ヘッダーをスキップ
Oracle BPEL Process Manager開発者ガイド
10g(10.1.3.1.0)
B31874-03
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

10 イベントおよびタイムアウト

この章では、イベントおよびタイムアウトの使用方法について説明します。Webサービスはレスポンスを返すまでに長時間かかる場合があるため、BPELプロセスでは一定の時間が経過した後、タイムアウトしてフローの残りを継続できることが必要です。

この章の内容は次のとおりです。

10.1 イベントおよびタイムアウトのユースケース

このユースケースでは、Star Loan Webサービスからのレスポンスを1分間待機するBPELプロセスをプログラムします。Star Loanが1分以内にレスポンスを返さないと、BPELプロセスはUnited Loanの融資提案を自動的に選択します。現実の世界では、時間の制限は48時間など1分より大きな値です。しかし、この例では、BPELプロセスが正しく動作しているかどうかを確認するために、そのような長時間の待機は設定していません。


関連項目:

次のサンプル・ファイルを参照してください。
  • SOA_Oracle_Home¥bpel¥samples¥tutorials¥108.Timeouts


10.2 イベントおよびタイムアウトの概念の概要

非同期Webサービスはレスポンスを返すまでに長時間かかる場合があるため、BPELプロセスでは一定の時間が経過した後、タイムアウトしたり、待機を中止してフローの残りを継続できることが必要です。pickアクティビティを使用すると、指定の時間待機するかまたは機能の実行を継続するようにBPELフローを構成できます。有効期限の設定には、waitアクティビティを使用できます。

リモート・データベースに接続する同期プロセスのタイムアウトを設定する場合は、domain.xmlファイルでsyncMaxWaitTimeタイムアウト・プロパティを設定する必要があります。

10.3 pickアクティビティによるプロセスの継続または待機の選択

pickアクティビティには2つのブランチがあり、それぞれに条件があります。最初に条件が満たされたブランチが実行されます。次の例では、1つのブランチの条件は融資提案を受け取ることで、もう1つのブランチの条件は指定の時間待機することです。

概要を図10-1に示します。次のアクティビティを行います。

  1. invokeアクティビティは、サービス(この場合は融資提案のStar Loanに対するリクエスト)を開始します。

  2. 次に、pickアクティビティについて説明します。これには次の条件があります。

    • onMessage: この条件には、Star Loan Webサービスからの融資提案の形式でリプライを受け取るためのコードが含まれています。onMessageコードは、タイムアウトが追加される前の、Star Loan Webサービスからレスポンスを受け取るコードと同じです。

    • onAlarm: この条件には、1分のタイムアウトのコードが含まれています。この時間はPT1Mとして定義されています。これは、タイムアウトまでに1分待機するという意味です。このタイムアウト設定では、Sは秒を、Mは分を、Hは時間を、Dは日を、Yは年を意味します。あまり一般的な例ではありませんが、時間制限が1315秒の場合、PT1Y3D15Sと入力します。コードの残りの部分では、融資変数selectedおよびapprovedをfalseに設定し、年率(APR)を0.0に設定して、この情報をloanOffer変数にコピーしています。

      期間の書式の詳細は、次の場所にある最新ドキュメント「XML Schema Part 2: Datatypes」の期間に関する項を参照してください。

      http://www.w3.org/TR/xmlschema-2/#duration
      
      
  3. 最初に条件が満たされたpickアクティビティのブランチが、BPELプロセスにより実行されます。他のブランチは実行されません。

図10-1 pickアクティビティの概要

図bpmdg001.gifの説明が続きます
図bpmdg001.gifの説明

次のコード・セグメントは、この操作のpickアクティビティを定義しています。

  <pick>
        <!--  receive the result of the remote process -->
        <onMessage partnerLink="LoanService"
            portType="services:LoanServiceCallback"
            operation="onResult" variable="loanOffer">

        <assign>
        <copy>
            <from variable="loanOffer" part="payload"/>
            <to variable="output" part="payload"/>
        </copy>
        </assign>

       </onMessage>
       <!--  wait for one minute, then timesout -->
       <onAlarm for="PT1M">
            <assign>
                <copy>
                    <from>
                        <loanOffer xmlns="http://www.autoloan.com/ns/autoloan">
                            <providerName>Expired</providerName>
                            <selected type="boolean">false</selected>
                            <approved type="boolean">false</approved>
                            <APR type="double">0.0</APR>
                        </loanOffer>
                    </from>
                    <to variable="loanOffer" part="payload"/>
                </copy>
            </assign>
       </onAlarm>
</pick>

関連項目:

次のサンプルを参照してください。

10.4 waitアクティビティによる有効期限の設定

waitアクティビティを使用すると、指定された期間の間、または時間制限に達するまで、プロセスが待機可能です。有効期限条件を1つのみ指定する必要があります。

<wait (for="duration-expr" | until="deadline-expr") standard-attributes>
    standard-elements
  </wait>

関連項目:

waitアクティビティの定義例は、次のドキュメントを参照してください。
  • waitアクティビティを使用するデモンストレーションについては、SleepBrokerを参照してください。

  • 「Waitアクティビティ」

  • 『Oracle BPEL Process Manager Order Bookingチュートリアル』

  • SOA_Oracle_Home¥bpel¥samples¥references¥Wait


10.5 同期プロセスのタイムアウトの設定

リモート・データベースに接続する同期プロセスの場合、SOA_Oracle_Home¥bpel¥domains¥default¥config¥domain.xmlファイルでsyncMaxWaitTimeタイムアウト・プロパティの値を大きくする必要があります。

<property id="syncMaxWaitTime">
        <name>Delivery result receiver maximum wait time</name>
        <value>45</value>
        <comment>
        <![CDATA[The maximum time the process result receiver will wait for a
result before returning.  Results from asynchronous BPEL processes are
retrieved synchronously via a receiver that will wait for a result from the
container.
        <p/>
        The default value is 45 seconds.]]>
        </comment>
    </property>

10.6 タイムアウトの定義

タイムアウトを定義する手順は、次のとおりです。

  1. pickアクティビティをBPELプロセスにドラッグ・アンド・ドロップします。

    pickアクティビティには、onMessageブランチ(封筒アイコン)とonAlarmブランチ(アラーム・クロック・アイコン)が含まれます。

    図pick2.gifの説明が続きます
    図pick2.gifの説明

  2. onAlarmアクティビティのOnAlarmブランチをダブルクリックし、時間制限を1時間ではなく1分に設定します。

    図pick3.gifの説明が続きます
    図pick3.gifの説明

  3. 「OK」をクリックします。

  4. onMessageアクティビティをダブルクリックし、融資サービスからのレスポンスを受け取るように、その属性を編集します。

    図pick4.gifの説明が続きます
    図pick4.gifの説明

10.7 まとめ

pickアクティビティを使用すると、フロー属性のように同時に複数の操作を実行するのではなく、複数の操作のうち最初に完了したもののみを実行するよう定義できます。この章の例のpickアクティビティは、1つのブランチが融資サービスからの非同期コールバックで、もう1つのブランチは1分間に設定されたタイムアウトでした。