SOA@Oracle
「一方向」プロセスを作成する
最終更新:
Bot(ページ名リンク)
-
view
一方向プロセスを作成する
はじめに
Oracle BPEL Process Manager で新規にプロセスを作成する際には、テンプレートから「同期プロセス」「非同期プロセス」は、選択することが可能です。

基本的なプロセスの呼出しパターンとして、これ以外に「一方向」呼出しがありますが、残念ながらテンプレートから作成することができません。ここでは、プロセスの呼出しを「一方向」型で行うプロセスの作成方法をご紹介します。
本題に入る前に、「同期」「非同期」「一方向」の言葉の意味を確認してみましょう(以下、SOAP/HTTPでプロセスが起動されることを前提として説明を行います)。
本題に入る前に、「同期」「非同期」「一方向」の言葉の意味を確認してみましょう(以下、SOAP/HTTPでプロセスが起動されることを前提として説明を行います)。
1. 同期プロセス
プロセスの呼出しが、レクエスト・リプライ型で行われる。言い換えるとHTTPのリクエストで
プロセスが起動され、対応するHTTPレスポンスでプロセスからの返信メッセージがが
SOAPレスポンスとして送信される。
2. 非同期プロセス
プロセスの呼出しが、非同期コールバック型で行われる。言い換えると、HTTPのリクエストで
プロセスが起動され、即座に、空のHTTPレスポンスがクライアントへ返される。
プロセスからの返信メッセージは、別のHTTPセッションにより行われる
3. 一方向プロセス
非同期コールバック型で行われる。言い換えると、HTTPのリクエストで
プロセスが起動され、即座に、空のHTTPレスポンスがクライアントへ返される。
プロセスからの返信はない。
プロセスの呼出しが、レクエスト・リプライ型で行われる。言い換えるとHTTPのリクエストで
プロセスが起動され、対応するHTTPレスポンスでプロセスからの返信メッセージがが
SOAPレスポンスとして送信される。
2. 非同期プロセス
プロセスの呼出しが、非同期コールバック型で行われる。言い換えると、HTTPのリクエストで
プロセスが起動され、即座に、空のHTTPレスポンスがクライアントへ返される。
プロセスからの返信メッセージは、別のHTTPセッションにより行われる
3. 一方向プロセス
非同期コールバック型で行われる。言い換えると、HTTPのリクエストで
プロセスが起動され、即座に、空のHTTPレスポンスがクライアントへ返される。
プロセスからの返信はない。
つまり一方向プロセスでは、プロセスからの返信が呼出しもとに返されないのです。実際のところ長時間実行されるプロセスでは、呼出し元にコールバックしなければならないケースはすくないので、非同期プロセスではなく、一方向プロセスが適する場合の方が多いのです。
では、一方向プロセスの作り方を具体的に見てみましょう。
作成手順
一方向プロセスの作成方法はいくつかありますが、今回は「同期プロセス」テンプレートから一方向プロセスを作る方法をご紹介します。
1. [BPELプロジェクト作成]ウィザードで[同期プロセス]テンプレートを選択します。

2. 画面左下の[構造ペイン]から、[パートナー・リンク]→[プロセス]→[Partner Links]→[client]→[Role]→[PortType]→[Operation]と展開し、[Operation - process]を右クリックし、編集を選択します。

3. [Edit Operation]ウインドが立ち上がりますので[Output]のチェックをはずし、[Input]の[Name]フィールドに「input」等の任意の名称を入力し(注)、[OK]ボタンをクリックします。
注) 本来であれば、input要素のname属性はoptionalなので空でもよいのですが、JDeveloperの不具合により空の値のまま[OK]ボタンをクリックするとエラーが発生します。
注) 本来であれば、input要素のname属性はoptionalなので空でもよいのですが、JDeveloperの不具合により空の値のまま[OK]ボタンをクリックするとエラーが発生します。

4. 右の図のように、[replyOutput]アクティビティを右クリックし[削除]を選択します。

以上で、一方向型の呼出しパターンをもつプロセスが完成しました。次の手順「5」「6」は必須ではありませんが、プロセス定義の中にゴミを残さないためにも行っておいた方がよいでしょう。
5. [構造ペイン]から[メッセージ・タイプ]→[プロセスWSDL]→[<プロセス名>ResponseMessage]と展開し、[<プロセス名>ResponseMessage]を右クリックし[削除 メッセージ・タイプ]を選択。

6. [構造ペイン]から[変数]→[プロセス]→[変数]→[outputVariable]と展開し、[outputVariable]を右クリックし[削除]を選択。

一方向プロセスの作成手順は以上です。
同期プロセスとの比較
同期プロセスを使っても一方向プロセスとほぼ同等のことは実現できます。下の画面ショットのように[reply]アクティビティの後に、後続の処理を書けばよいのです。

ただし、同期型にはない以下のようなメリットが、一方向型にはありますので同期プロセスではなく今回ご紹介した一方向型のプロセスの利用も検討してみてください。
一方向型の場合は、プロセスを起動するSOAPメッセージを受け取ると、そのメッセージを 一旦キューイングします。キューイング後に、あらかじめ設定しておいたスレッド数で 順次プロセスが実行されます。一方向型はこのような特徴があるため、一度に大量に メッセージを受け取った場合にも対処できます。
同期型と一方向型の挙動の違いに関しては、以下のマニュアル、書籍を参照してください。
Oracle Application Server パフォーマンス・ガイド
http://otndnld.oracle.co.jp/document/products/as10g/101310/doc_cd/index.htm
→ 7 Oracle BPEL Process Managerのパフォーマンス・チューニング
http://otndnld.oracle.co.jp/document/products/as10g/101310/doc_cd/core.1013/B31836-01/tuning_bpel.htm#671337
http://otndnld.oracle.co.jp/document/products/as10g/101310/doc_cd/index.htm
→ 7 Oracle BPEL Process Managerのパフォーマンス・チューニング
http://otndnld.oracle.co.jp/document/products/as10g/101310/doc_cd/core.1013/B31836-01/tuning_bpel.htm#671337
またOracle SOA Suite 10g SOA実践開発ガイドの「8-6 チューニング」にも詳細な情報があります。
ご質問は、以下のフォームまでお願いします。トラックバック( http://www28.atwiki.jp/oraclesoa/tb/20.html )も大歓迎です。
&trackback()


