この章では、イベントおよびタイムアウトの使用方法について説明します。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アクティビティをダブルクリックし、融資サービスからのレスポンスを受け取るように、その属性を編集します。