
第21号(2008年6月)
記事:JBoss Enterprise SOA Platform を試そう!(その2)
〜 開発者のためのエンタープライズ・サービスバスを理解する 〜
今回のレッドハットニュースレターでは、前回のレターで紹介したJBoss Enterprise SOA Platform(以下、略称JBoss ESP) を簡単に動作させるための手順の第2回になります。前回の内容をご覧頂くことで、JBoss Enterprise SOA Platform の簡単な振る舞いを確認できますので、ご覧なっていない方は、以下のURLをご覧ください。
http://www.jp.redhat.com/magazine/jp/200805/jb.html
その前に、今回のニュースレターでご紹介しておきたいことが1つあります。それは、JBoss Enterprise Middleware の日本語ページがわかりやすく更新されました。是非、ご覧ください。
http://www.jp.redhat.com/jboss/
特に注目は、次のコンテンツでしょう。
● JBoss Enterprise SOA Platform の構成ファイル
JBoss Enterprise SOA Platform (以下、JBoss ESP)の構成ファイルの中で比較的重要なファイルが、jboss-esb.xml になります。この構成ファイルの内容を確認する前に、1つだけ確認しておきたいことがあります。前回の手順でデプロイされた fun_cbr のアプリケーションは、どこに配備されているのでしょうか?答えは、次のフォルダです。
/jboss-soa-p.4.2.0/jboss-as/server/production/deploy/Quickstart_fun_cbr.esb
ここで見慣れない .esb という拡張子のフォルダがあります。これは、JBoss ESPの中でESBアプリケーションを意味するデプロイされているアプリケーションフォルダになります。このフォルダ以下には、この1つのESBアプリケーションとしての構成情報やESBアプリケーションの動作に必要なクラスファイルやjarファイルなどが格納されています。今回の主題である jboss-esb.xml は、Quickstart_fun_cbr.esb/META-INF/ 以下に格納されています。
● jboss-esb.xml
JBoss ESP にデプロイされる ESBアプリケーションが、どこのサービスバスのエントリからデータを受領して、受領したデータをどのように加工・変換・ルーティングし、最終的にどのサービスにデータを配信するかなどの構成定義が、このjboss-esb.xml にすべて記述されることになります。それでは、サンプル fun_cbr の jboss-esb.xml をテキストエディタで開いてみてください。場所は、サンプルフォルダのものがよいでしょう。
./jboss-soa-p.4.2.0/jboss-as/samples/quickstarts/fun_cbr/jboss-esb.xml
テキストエディタでjboss-esb.xml を参照すると、大きく以下の構造になっていることに気付く。
〈providers〉 以下には、そのESBアプリケーションのサービスバスへのインターフェースのエントリポイントが指定されます。詳細な仕様は、付属のドキュメントを確認して頂きたいが、今回ののサンプルでは、JMSキューがすべてのメッセージのバス・エントリポイントになっているため、〈jms-provider〉 が利用されています。サンプルでは、投入されるメッセージは、クライアントのアプリケーションからJMSキューにメッセージが投入される busid="quickstartGwChannel" の定義、メッセージの内容によってルーティングされるJMSキュー(GreeやRed、Blue)への定義が設定されています。これ以外にも汎用的な〈provider〉や〈schedule-provice〉などのエントリを指定することが可能です。
次に〈services〉以下には、メッセージを加工・ルーティングするための”サービス”が複数定義されています。ここで言うサービスとは、SOAに基づく実際のサービスへのプロクシー(代理)サービスになります。実際のサービス提供アプリケーションは、外部アプリケーション(EJBやJMSクライアント、Webサービス、ファイルシステムやDBMSなど)になります。〈services〉には、大きく以下の要素で構成されています。
〈listeners〉 には、この定義されたサービスがどのサービスバスのエントリポイントをリッスンするかが定義されます。今回の例では、メッセージが投入されるJMSキューをリッスンするように設定されています。サンプルのサービスの定義には、GatewayとなるJMSキュー、メッセージの内容に応じた配信先のそれぞれのJMSキュー(Red, Green, Blue)のListener の設定がされています。
〈actions〉には、投入されたメッセージをどのような順番で処理していくかの手順が記述されています。JBoss ESPには、デフォルトで提供されている便利なアクションがいくつか提供されています。
トランスフォーメーションと変換
- ByteArrayToString
- LongToDateConverter
- ObjectInvoke
- ObjectToCSVString
- ObjectToXStream
- SmooksTransformer
- PersistAction
- XStreamToObject
ビジネスプロセス管理
- jBPM - CommandInterpreter
スクリプティング
ルーティング
- Aggregator
- ContentBasedRouter
- StaticRouter
- StaticWireTap
- Notifier
Webサービス/SOAP
その他
カスタムアクション
- org.jboss.soa.esb.actions.AbstractActionLifecycleを継承
これらのアクションコンポーネントを利用することで、投入されたメッセージの変換、ロギング、コンテンツベース・ルーティング、オーケストレーションなどがアプリケーションのプログラムを開発することなしに、jboss-esb.xml の設定だけで実現できます。これがJBoss ESP を利用するメリットのひとつになります。それぞれのアクションコンポーネントがどのようなクラス名、プロパティが定義できるかは、付属のドキュメント SOA_ESB_ActionGuid.pdf をご覧ください。
それぞれのアクションには、アクションの実装クラス、パラメータとなるプロパティの指定があります。サンプルのアプリケーションでは、投入されたXMLデータの内容に応じたルーティングエンジンの実装クラスContentBasedRouterアクション(JBoss Rulesのエンジンを利用)とコンソールなどへの通知を実現するクラス Notifierアクションが利用されています。ContentBasedRouterでは、JBoss Rules の実行エンジンにメッセージを投入し、JBoss Rules の機能であるDomain Specific Language(DSL)を利用することでXMLドキュメントを解析ルールをルール定義ファイルに記述しています。XMLドキュメントの解析は、JBoss ESPであらかじめ提供しているDSL定義(XPathLanguage.dsl)を利用することで可能です。アプリケーションによるXML解析などは必要ありません。ContentBasedRouterアクションでは、JBoss Rules の戻り値に併せて、どのサービスを呼び出すかのプロパティ設定がされています。投入されたデータがJBoss Rules の判断により、適切なサービスへデータが渡されることを意味しています。
この設定により、投入されたデータがデータの属性に応じたサービスに伝搬されたことがわかります。実際のサンプルを動作して確認してみてください。
● jboss-esb.xml を書く?
JBoss ESPでは、ESBのサービス定義、ルーティング、アクション、変換などをjboss-esb.xml に記述します。XMLの定義は、それほど複雑ではないものの、JBoss ESPの製品の特徴に慣れていない場合、XMLファイルを直接設定することは厄介です。しかし、残念ながら現時点のバージョン(JBoss ESP 4.2)では、グラフィカルなエディタは提供されていません。ですが、次のバージョン(2008年冬を予定)には、Elipse のプラグインが提供される予定です。それまでは、この記述内容の不明な点は、製品付属のマニュアルを参照していただくか、製品サブスクリプションのサポートサービスを活用ください。サポートサービスを活用して頂くことで、より迅速でかつ正確な回答が得られます。
また、JBoss ESP に付属のサンプルプログラムは、非常に多様かつ沢山のパターンのjboss-esb.xml の設定が提供されています。実際のESBアプリケーションに近いサンプルを見つけ、そのjboss-esb.xml を参考として活用することも近道です。
● まとめ
この2回のニュースレターで、JBoss ESP の簡単な使い方を紹介しました。JBoss ESPの特徴は、エンタープライズサービスバスがその1つではあります。また、その他の特徴としては、JBoss jBPMやJBoss Rules の最新のコンポーネントが統合されたスウィート製品でもあります。エンタープライズサービスバスを利用するワークフローWebアプリケーション、ビジネスルールが頻繁に変更があるアプリケーションのJBoss Rulesの活用、純粋にJava EEのWebアプリケーション、SeamアプリケーションからjBPMを活用、もしくは、ESBアプリケーションを利用することで容易でかつ身近なSOAを実現できる基盤ミドルウェアとして、JBoss ESPは活用できます。是非、活用してみてください。
http://www.jp.redhat.com/jboss/
レッドハット株式会社/ニュースレター編集部