2010年2月22日月曜日

Oracle BPEL/ParalellSplit

前回インストールした Fusion Middleware 11g の Oracle BPEL で、workflow pattern の Parallel Split と Synchronizationを実装してみた。

以下のように、Flow アクティビティで実装。

パートナーリンク で指定している WaitProcessサービスは、入力XMLで指定されたミリ秒だけ待ち、開始時刻と終了時刻を文字列として返す。

この WaitProcessサービスに 2000ms を指定して、flow から3本のブランチに分岐させ、分岐が収束した後のアクティビティで 3つのメッセージをまとめて返す。

これを SoapUI から実行すると、こんな感じのレスポンスが返ってきた。
<env:Body>
名前空間省略・・・
<ns0:message>23:22:44:371-23:22:46:372</ns0:message>
<ns0:message>23:22:42:291-23:22:44:292</ns0:message>
<ns0:message>23:22:39:010-23:22:41:011</ns0:message>
</processResponse>
</env:Body>
うーん、思ってたのと違う・・・
3つの invoke が、一つ終わったら次って感じで、逐次的に実行されてる。

検索してみると、nonBlockingInvoke というパートナーリンクのプロパティをtrue にすれば良いというような記述が見つかる。その通りにして、再度試してもみたけど、動作は変わらない。監査を見ると、こんな風になっている。


一応 nonblocking な呼び出しが同時に始まってはいるようだが、本当の実行は逐次実行されているのがわかる。

さらにググってみると、やはり nonBlockingInvoke を設定しても並行で実行されずに困っている人たちの質問が見つかるが、改善策がはっきりしない。辛うじて見つかる記述も 10g の設定で、なんか違う。

これだと外部のサービス呼び出しを並列実行する意味が弱くなる。明示的に非同期なフロー定義にしなければ駄目だとすると、なんだか面倒くさ。ちょっとテンション下がる・・・

0 件のコメント:

コメントを投稿