ESBの本命、JBoss Fuseを知る 2

JBoss Fuseの機能概要

はじめに第1回では、JBoss Fuseのシステム連携の考え方について説明しました。今回は、JBoss Fuseの機能概要について具体的に説明していきます。まずは、JBoss Fuseの開発の歴史からひも解いてみましょう。JBoss Fuse開発の歴史JBoss Fuseは、Apache Camel

渡邉 誉(わたなべ ほまれ)

2015年4月2日 16:00

はじめに

第1回では、JBoss Fuseのシステム連携の考え方について説明しました。今回は、JBoss Fuseの機能概要について具体的に説明していきます。まずは、JBoss Fuseの開発の歴史からひも解いてみましょう。

JBoss Fuse開発の歴史

JBoss Fuseは、Apache Camel(以下Camel)をコアコンポーネントとして構成されていますが、そのCamelは、Apache ActiveMQのサブプロジェクトとして誕生しました。ActiveMQの誕生は古く、2004年にApache Software Foundationへ寄贈されており、2007年Camelが誕生しました。そして2012年にRed Hatが、商用ベンダーとしてApache Camelベースの製品を提供していたFuseSourceを買収し、現在Red Hat JBoss Fuseとして提供しています。

JBoss Fuse開発の歴史

図1:JBoss Fuse開発の歴史

続いて、JBoss Fuseの全体アーキテクチャを見てみましょう。

JBoss Fuseの全体アーキテクチャ

JBoss Fuseは、下記に示すオープンソースソフトウェアの組み合わせで構成されています。

JBoss Fuse全体アーキテクチャ図

図2:JBoss Fuse全体アーキテクチャ図

・Apache Camel
エンタープライズインテグレーションパターン(以下、EIP)のデザインパターンに基づいた、オープンソースのシステム連携フレームワークです。Camelは大変人気のあるオープンソースソフトウェアの一つです。

・Apache ActiveMQ
JMS(Java Message Service)に準拠した、アプリケーション間のメッセージング連携を実現するオープンソースのメッセージ指向ミドルウェアです。

・Apache CXF
JAX-WS(Java API for XML Web Services)、JAX-RS(Java API for RESTful Web Services)といったWebサービス(SOAP、XML/HTTP、REST-ful HTTP、CORBAに対応)インターフェースを構築するオープンソースのフレームワークです。

・Apache Karaf
さまざまなコンポーネントやアプリケーションを配備できる、OSGi(Open Services Gateway initiative)ベースの軽量コンテナです。

・JBoss Fabric8
分散環境でのシステム管理を実現するオープンソースプラットフォームです。容易なプロビジョニング機能、コンフィギュレーション機能、管理機能を提供します。

JBoss Fuseの特徴

JBoss Fuseは、EIPを実装したCamelをコアテクノロジーとして、ESBに求められる以下の代表的な機能を提供した製品です。

  • マルチプロトコルハンドル/変換機能
  • メディエーション機能
  • コンテンツベースルーティング
  • サービスオーケストレーション
  • メッセージ検証

JBoss Fuseの特徴として、第一に軽量な基盤ということ挙げられます。これは、統合フレームワークとして採用しているCamelのシンプルな統合実装と、軽量な実行コンテナとして人気のあるApache Karafといったテクノロジーによって、容易な定義、監視、管理と保守性が担保されているからです。

Camelベースの技術により、高度な開発プラットフォームと、高度な各種アプリケーションとの接続オプションが提供されていることも特徴的です。

開発面では、統合に必要な機能を一通り取り揃えており、使用感もユーザーフレンドリで大変使いやすい開発環境を提供しています。JBoss Developer Studioによるグラフィカルなルートの定義と実行環境を提供しています。

拡張性という面では、Camelが提供する各種コンポーネント(JDBC、FTP/SFTP、HTTP/HTTPS、ファイル、etc.)を利用することで、様々なアプリケーションとの連携性を実現しています。

次にCamelについて機能を追いながら、機能を理解していきましょう。

Camelの機能

Camelでは、アプリケーション間の連携フローを、外部アプリケーションとのインターフェースである「エンドポイント」と、データ変換やルーティングなどメッセージの内部処理である「プロセッサ」で構成します。プロセッサは複数個つなげることが可能で、連続したプロセッサのフロー上をメッセージが流れることにより、定義されたプロセッサの実装に基づいて処理されます。この一連のフローを、「Camelルート」と呼びます。

Camelルートとアプリケーションの関連イメージ

図3:Camelルートとアプリケーションの関連イメージ

Camelルートの実装はDSL(Domain Specific Language)で表現されます。DSLにはJavaとXMLの2種類の書き方があります。下記の例は、data/inboxディレクトリからファイルを読み込み、orderキューにメッセージを書き出す処理を表しています。

Java DSL:from("file:data/inbox").to("jms:queue:order");

XML DSL:

Camelルートは、「CamelContext」という管理単位で実行されます。1つのCamelContextには複数のルート、複数のプロセッサを定義できます。Fuseで構築されたアプリケーション連携フローは、CamelContextの単位でパッケージ化され管理されることになります。

CamelContextの概念図

図4:CamelContextの概念図

CamelのエンドポイントはURIで表記されます(図5)。

エンドポイントを表すURIの例

図5:エンドポイントを表すURIの例

このようにシンプルな定義方法のため、エンドポイントのスキーム変更も簡単にできます。

表1:Apache Camelの代表的なエンドポイント

スキーム URIの例 説明
Bean bean:beanName[?method=someMethod] POJOと連携するためBean Bindingを行う
Direct direct:name 同一CamelContext内のエンドポイントを同期で呼び出す
SEDA seda:name 同一CamelContext内のエンドポイントを非同期で呼び出す
VM vm:name 同一VM内のエンドポイントを非同期で呼び出す
File file://nameOfFileOrDirectory メッセージをファイルへ送信する。またはディレクトリまたはファイルをポーリングする
Log log:loggingCategory[?level=ERROR] メッセージをログ出力する
JMS jms:[topic:]destinationName JMSプロバイダと連携する
activeMQ activemq:[queue:|topic:]destinationName activeMQブローカと連携する
HTTP http://hostname[:port] 外部のHTTPサーバーを呼び出す
CXF cxf:address[?serviceClass=...] Webサービス統合のためApache CXFと連携する
JDBC jdbc:dataSourceName?options JDBCのクエリとオペレーションを実行する
FTP ftp://host[:port]/fileName FTP上でファイルの送受信を行う
SFTP sftp://host[:port]/fileName SFTP上でファイルの送受信を行う

表1に示したエンドポイントは、コンポーネントとして実装されます。コンポーネントは拡張が容易で、JBoss Fuse 6.1では150種類以上のコンポーネントが提供されています。表2で、その一部を紹介します。

表2:JBoss Fuse 6.1で提供される EIPコンポーネントの例

AMQP JCR
Atom JDBC
Amazon Web Services
AWS-DDB, AWS-S3
AWS-SDB, AWS-SES
AWS-SNS, AWS-SQS
JMS
LDAP Mail/SMTP
SAP Lucene/Solr
WS-CXF MongoDB
EJB MQTT
File SIP
FTP/SFTP Spring Batch/Web Services
HTTP SSH
Google App Engine JDBC
Hadoop (hbase, HDFS) Twitter
Hibernate WebSocket
Timer Stream
JT400 など多数
この記事のキーワード

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る