JBoss Fuseの機能概要
はじめに
第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の全体アーキテクチャを見てみましょう。
JBoss Fuseの全体アーキテクチャ
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ルートの実装は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の単位でパッケージ化され管理されることになります。
CamelのエンドポイントはURIで表記されます(図5)。
このようにシンプルな定義方法のため、エンドポイントのスキーム変更も簡単にできます。
スキーム | 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で、その一部を紹介します。
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) | |
Hibernate | WebSocket |
Timer | Stream |
JT400 | など多数 |