この章では、イベントおよびタイムアウトの使用方法について説明します。Webサービスはレスポンスを返すまでに長時間かかる場合があるため、BPELプロセスでは一定の時間が経過した後、タイムアウトしてフローの残りを継続できることが必要です。
この章の内容は次のとおりです。
このユースケースでは、Star Loan Webサービスからのレスポンスを1分間待機するBPELプロセスをプログラムします。Star Loanが1分以内にレスポンスを返さないと、BPELプロセスはUnited Loanの融資提案を自動的に選択します。現実の世界では、時間の制限は48時間など1分より大きな値です。しかし、この例では、BPELプロセスが正しく動作しているかどうかを確認するために、そのような長時間の待機は設定していません。
|
関連項目: 次のサンプル・ファイルを参照してください。
|
非同期Webサービスはレスポンスを返すまでに長時間かかる場合があるため、BPELプロセスでは一定の時間が経過した後、タイムアウトしたり、待機を中止してフローの残りを継続できることが必要です。pickアクティビティを使用すると、指定の時間待機するかまたは機能の実行を継続するようにBPELフローを構成できます。有効期限の設定には、waitアクティビティを使用できます。
リモート・データベースに接続する同期プロセスのタイムアウトを設定する場合は、domain.xmlファイルでsyncMaxWaitTimeタイムアウト・プロパティを設定する必要があります。
pickアクティビティには2つのブランチがあり、それぞれに条件があります。最初に条件が満たされたブランチが実行されます。次の例では、1つのブランチの条件は融資提案を受け取ることで、もう1つのブランチの条件は指定の時間待機することです。
概要を図10-1に示します。次のアクティビティを行います。
invokeアクティビティは、サービス(この場合は融資提案のStar Loanに対するリクエスト)を開始します。
次に、pickアクティビティについて説明します。これには次の条件があります。
onMessage: この条件には、Star Loan Webサービスからの融資提案の形式でリプライを受け取るためのコードが含まれています。onMessageコードは、タイムアウトが追加される前の、Star Loan Webサービスからレスポンスを受け取るコードと同じです。
onAlarm: この条件には、1分のタイムアウトのコードが含まれています。この時間はPT1Mとして定義されています。これは、タイムアウトまでに1分待機するという意味です。このタイムアウト設定では、Sは秒を、Mは分を、Hは時間を、Dは日を、Yは年を意味します。あまり一般的な例ではありませんが、時間制限が1年3日15秒の場合、PT1Y3D15Sと入力します。コードの残りの部分では、融資変数selectedおよびapprovedをfalseに設定し、年率(APR)を0.0に設定して、この情報をloanOffer変数にコピーしています。
期間の書式の詳細は、次の場所にある最新ドキュメント「XML Schema Part 2: Datatypes」の期間に関する項を参照してください。
http://www.w3.org/TR/xmlschema-2/#duration
最初に条件が満たされたpickアクティビティのブランチが、BPELプロセスにより実行されます。他のブランチは実行されません。
次のコード・セグメントは、この操作の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>
|
関連項目: 次のサンプルを参照してください。
|
waitアクティビティを使用すると、指定された期間の間、または時間制限に達するまで、プロセスが待機可能です。有効期限条件を1つのみ指定する必要があります。
<wait (for="duration-expr" | until="deadline-expr") standard-attributes>
standard-elements
</wait>
|
関連項目: waitアクティビティの定義例は、次のドキュメントを参照してください。
|
リモート・データベースに接続する同期プロセスの場合、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>
タイムアウトを定義する手順は、次のとおりです。
pickアクティビティをBPELプロセスにドラッグ・アンド・ドロップします。
pickアクティビティには、onMessageブランチ(封筒アイコン)とonAlarmブランチ(アラーム・クロック・アイコン)が含まれます。
onAlarmアクティビティのOnAlarmブランチをダブルクリックし、時間制限を1時間ではなく1分に設定します。
「OK」をクリックします。
onMessageアクティビティをダブルクリックし、融資サービスからのレスポンスを受け取るように、その属性を編集します。