2006年 7月 01日 土曜日 今回は,前回のエントリで作成したBPELから,前々回のエントリで作成したサービスをWebサービスで呼び出すことにします。
こんなイメージです。
【1. サービスのWebサービス化】
前々回に作成したサービス(BooksDataFacade,FooPriceListFacade,BarPriceListFacade)をWebサービス化します。手順は,前々回にBooksPricingProcessBeanをWebサービス化したときと同様です。Deployして,Webサービスのテスト機能で簡単に動作確認しておくと良いでしょう。
(*) 複数のWebサービスを同じパッケージで作成する場合,異なるクラスであってもWebメソッド名が重複すると上手く動作しないようです。findBooksData, findFooPriceList, findBarPriceListなど,Webメソッドの名前を変えるようにしましょう。
【2. WSDL,XMLスキーマの準備】
前回のBooksPricingProcessWebServiceBeanと同様の手順で,BooksDataWebServiceBean, FooPriceListWebServiceBean, BarPriceListWebServiceBeanのWSDL,XMLスキーマをローカルに保存,編集します。
【3. BPELの編集】
(1) WSDLのインポート,パートナーリンクの設定
編集した3つのWSDLファイルをBPELにインポートします。そして,それぞれのサービスに対応するパートナーリンクを設定します。
(2) アクティビティの配置
アクティビティを配置して,全体のプロセスが見えるようにしましょう。
(3) Assign1の設定
BPELエディタ上でAssign1を選択して,Mapperでコピー方法を設定します。
左側のFindBookPriceIn1から,右側のFindBooksDataIn1, FindFooPriceListIn1, FindBarPriceListIn1に線を引っ張ります。
NavigatorのBPEL Logical Viewで,それぞれのInvokeを右クリック,[Edit]を選択して,3つのサービスを呼び出すように設定します。Input Variable,Output VariableをCreateするのを忘れないようにしましょう。変数名はデフォルト値で構いません。
(5) Assign2の設定
BPELエディタ上でAssign2を選択して,Mapperでコピー方法を設定します。
左側のFindBooksDataOut1から,右側のFindBookPriceOut1に線を引っ張ります。
<copy>
<from variable="FindBooksDataOut1" part="parameters"/>
<to variable="FindBookPriceOut1" part="parameters"/>
</copy>
</assign>
(6) If1の設定
If1のMapperで,FindFooPriceListOut1のpriceをnumberとして評価した値が,FindBookPriceOut1のpriceをnumberとして評価した値より小さいことを条件として設定します。
(7) Assign3の設定
Assign3のMapperで,FindFooPriceListOut1のpriceをFindBookPriceOut1のpriceにコピーするように設定します。
If1とAssign3のBPEL該当箇所はこうなっているはずです。
<if name="If1">
<condition> ( number($FindFooPriceListOut1.parameters/return/price) < number($FindBookPriceOut1.parameters/return/price) ) </condition>
<then>
<assign name="Assign3">
<copy>
<from>$FindFooPriceListOut1.parameters/return/price</from>
<to>$FindBookPriceOut1.parameters/return/price</to>
</copy>
</assign>
</then>
</if>
(8) If2, Assign4の設定
FindBarPriceListOut1のpriceをnumberとして評価した値がFindBookPriceOut1のpriceをnumberとして評価した値より小さければ,FindBarPricListOut1のpriceをFindBookPriceOut1のpriceにコピーするように設定します。
【4. 実行】
BPELを実行してみましょう。BooksDataから取得したデータに加えて,FooPriceListとBarPriceListで安い方の価格が設定されたデータが戻ってくることを確かめます。
【5. BPELでのプロセス並行処理】
BPELではプロセスの並行処理が簡単に実行できます。これはJavaでプロセスを実行する場合に比較してアドバンテージになります。
Assign1の後に,並行処理のためのアクティビティであるFlowをDrag&Dropして,Invoke1, Invoke2, Invoke3を並行処理するようにアイコンを移動させます。これで並行処理が実行されるようになります。