
第20号(2008年5月)
記事:JBoss Enterprise SOA Platform を試そう!(その1)
〜 開発者のためのエンタープライズ・サービスバスを理解する 〜
今回のレッドハットニュースレターでは、JBoss Enterprise SOA Platform(以下、略称JBoss ESP) を簡単に動作させるための手順を紹介します。
● JBoss Enterprise SOA Platform の入手
JBoss Enterprise SOA Platform を入手するためには、レッドハットから評価用のKeyを入手してください。評価用のKey は、以下のURLからレッドハットにリクエストすることで入手できます。
JBoss Enterprise 製品評価の入手方法 http://www.jp.redhat.com/jboss/eva/
また、以下の手順は、JBoss Enterprise SOA Platform ではなく、JBoss.org で開発されているJBoss ESBを利用するこで動作を確認する方法もあります。
ただし、JBoss ESB は、レッドハットから提供されるEnterprise 製品ではありません。上述の評価版とは、バイナリレベルで異なります。
動作検証や動作保証、チューニングなどはされていませんので、ご注意ください。パフォーマンス評価やプロジェクトでの動作検証を目的とする場合、上記の評価Keyを入手してください。
以下の手順は、JBoss ESP をベースとしています。
● JBoss Enterprise SOA Platform のセットアップと構成の確認、
サーバの起動評価版を入手(soa-4.2.0.GA.zip, Community 版は、jbossesb-server-4.3.CR1.zip)したあとは、任意のフォルダに展開してください。
JBoss ESP を動作させるためには、JDK5 以上の環境とAnt環境が必要になります。あらかじめ環境変数などのセットアップは済ませておいてください。
Zipファイルを展開すると以下のフォルダ構成になっています。
/jboss-soa-p.4.2.0/
フォルダの構成が確認できましたら、今後は、サーバを起動しましょう。
サーバを動作させるためには、次のフォルダに移動してください。
|
/jboss-soa-p.4.2.0/jboss-as/bin
|
JDK5 の環境が整っている場合、次のコマンドでサーバが起動できます。
この時点では、JBoss ESPサーバが起動しただけです。サンプルアプリケーションを動作させるためには、サンプルアプリケーションのデプロイが必要になります。
● fun_cbr サンプルアプリケーション
上述の quickstarts/ フォルダ以下には、たくさんのサンプルが提供されています。サンプルには、helloworld など非常にシンプルなもの、ルーティング/アグリゲーションなど、カスタムアクション、データ変換系(CSVからXML, XMLからXML,XMLからPOJO)、Webサービスのオーケストレーション、メッセージ連携、BPMを利用したオーケストレーション、例外や連携で失敗した際の処理などがあります。
今回は、その中の fun_cbr というサンプルを動かしましょう。
fun_cbr は、コンテンツベース・ルーティングをシンプルに実装したアプリケーションです。入力として注文データをXMLドキュメントとしてJMSのキューに投入します。
投入された注文データは、注文データのあるデータ項目(statusCode)の状態に応じて、注文を受ける3つのサーバに振り分けます。
サンプルアプリケーションでは、JBoss Rules を利用して投入されたXMLデータの解析、入力データに応じた転送先サービスの決定しています。それでは、サンプルアプリケーションを動作させましょう。
● サンプル fun_cbr を動かす
サンプルのfun_cbr を動かすためには、最初にこのサンプルアプリケーションのデプロイする必要があります。
デプロイするためには、コマンドプロンプトで func_cbr に移動し、以下のコマンドを実行してください。
|
cd ./jboss-soa-p.4.2.0/jboss-as/samples/quickstarts/fun_cbr
ant deploy
|
次注文データを受けるサービスの準備をしましょう。
本サンプルは、処理された注文データを3つのいずれかのサーバ(サービス)に降ります。
3つのサービスは、JBoss ESPサーバにそれぞれのサービスに用意されたJMSキューを参照しています。3つのサービスを起動するためには、以下のコマンドをそれぞれのコマンドプロンプトから実行してください。
cd ./jboss-soa-p.4.2.0/jboss-as/samples/quickstarts/fun_cbr
ant receiveBlue
cd ./jboss-soa-p.4.2.0/jboss-as/samples/quickstarts/fun_cbr
ant receiveRed
cd ./jboss-soa-p.4.2.0/jboss-as/samples/quickstarts/fun_cbr
ant receiveGreen
|
上記のコマンドを実行することで、3つのサービスが待機状態になっていることを確認してください。それぞれのサービスは、JBoss ESP のそれぞれのJMSキューをポーリングして待ち受けをしている状態になります。それでは、実際に注文データをJBoss ESP のJMSキュー
に投入しましょう。注文データは、以下のXMLデータになります。
この注文データをJBoss ESP に投入しますが、サンプルアプリケーション fun_cbr では、注文データのXMLのstatusCode の値にあわせたコンテツベースルーティングを設定しています。
上記の例では、statusCode = 1 のデータになります。JBoss ESPでは、コンテンツベースルーティングの実行エンジンとして、JBoss Rulesを利用します。JBoss Rules が投入されたデータに対してどのような判断をするかは、FunCBRRules-XPath.drl に定義されています。
JBoss Rules では、DSL(Domain Specific Language)という機能を利用することで、XMLデータの各ノードの値を解析し、そのデータにあわせた実行判断を簡単に表現できます。
上記の例では、投入された注文データのXML文書において、statusCode のノードの値が一致した場合、どのような結果(destination)にするかが記述されています。投入されるサンプルデータのstatusCode = 1 であるため、上記のルールによると “red” の結果(destination)をJBoss Rules は返答します。
JBoss ESP では、各サービスの定義、ルーティングの定義などは、jboss-esb.xml に定義されます。
上述の注文データが投入されるサービスプロバイダ、注文データを受けるサービスプロバイダ、各サービス間のルーティング、コンテンツベースルーティングの利用条件、分岐条件などが定義されています。
上述の例では、以下のように定義されています。
上記の定義は、コンテツベースルーティングの実行として ContentBasedRouter 設定されています。これは、JBoss Rules を呼び出すためにあらかじめ提供されているJBoss ESPのアクションになります。
このルール判断を実行した結果、destination に定義されている各サービス名、つまり、GoBlue, GoRed, GoGreen に受信データがルーティングされることを定義しています。それれぞれのサービス定義、例えば、GoRed は、jboss-esb.xml の中でさらに別に定義されており、既にサービスを起動して待機しているサーバが接続しているチャネル(この場合は、JMS)が定義されています。
それでは、実際に、注文データを投入しましょう。注文データは、以下のコマンドを実行することで投入できます。
新しい別のコマンドプロンプトから以下を実行してください。
cd ./jboss-soa-p.4.2.0/jboss-as/samples/quickstarts/fun_cbr
ant runtest
|
みなさんが既に起動した各サービスのコマンドプロンプトに変化はあったでしょうか?恐らく、receiveRed で起動したサービスに注文データが流れたことがわかります。
それでは、次に注文データのstatusCode = 2 に変更して、再投入してみてください。恐らく、reciveBlue で起動したサービスに注文が流れます。なぜ、注文データが流れる先が変わったのでしょうか?
それは、既に説明していますが、JBoss Rules が参照しているルール定義ファイルにその条件が設定されています。
● まとめ
ここまで実行できた方は、何が起こったかを理解していただけていると思います。
JBoss Enterprise SOA Platform は、エンタープライズサービスバスを提供します。上記のサンプルは、エンタープライズサービス
バスが提供するソフトウェア・ルーティングの1つの例ですが、応用範囲は広いと思います。
次回は、jboss-esb.xml の構造を少しづつ解説していく予定です。
それまでに、 quickstarts/ 以下のサンプルをいくつか実行してみてください。すべてのサンプルには、Readme.txt が提供されており、サンプルを動かすまでの手順が簡潔に説明されています。
http://www.jp.redhat.com/jb/
レッドハット株式会社/ニュースレター編集部