whileアクティビティ作成時の処理内容
次のコードは、設計完了後の.bpel
ファイルの例を示しています。whileアクティビティ内にscopeアクティビティがあります。scopeアクティビティには、シーケンスおよびフォルト・ハンドラが最上位レベルに含まれています。シーケンスにはinvokeアクティビティ、assignアクティビティ、およびシーケンスにラップされたassignアクティビティとwaitアクティビティを含むcatchAll
を定義するフォルト・ハンドラが含まれています。
次のコードにより、外部サービスがコールされます。外部サービスがフォルトをスローすると、フォルト・ハンドラによってフォルトが捕捉され、dbStatus
変数値が増分されます。
したがって、whileループの終了条件は次のいずれかとなります。
-
例外がないこと(
dbStatus
値が値10
に設定されており、これにより、while条件はfalseと評価されます) -
フォルトが5回スローされた後であること(
dbStatus
値が5
に設定されており、while条件はfalseを返します)
<while name="While_1" condition="bpws:getVariableData('dbStatus') > 5"> <scope name="Scope_1"> <faultHandlers> <catchAll> <sequence name="Sequence_2"> <assign name="assign_DB_retry"> <copy> <from expression="bpws:getVariableData('dbStatus') + 1"/> <to variable="dbStatus"/> </copy> </assign> <wait name="Wait_30_sec" for="'PT31S'"/> </sequence> </catchAll> </faultHandlers> <sequence name="Sequence_1"> <invoke name="Write_DBWrite" partnerLink="WriteDBRecord" portType="ns2:WriteDBRecord_ptt" operation="insert" inputVariable="Invoke_DBWrite_merge_InputVariable"/> <assign name="Assign_dbComplete"> <copy> <from expression="'10'"/> <to variable="dbStatus"/> </copy> </assign> </sequence> </scope> </while>
ノート:
前の例のwhileアクティビティのコード・フラグメントでは、BPEL 1.1コンストラクトbpws:getVariableData('dbStatus')
が使用されています。BPEL 2.0の場合、変数は$
記号およびドット(.
)表記法を使用して、直接参照されます。例:
<while name="While1"> <condition>$inputVariable.payload/client:counter > 0 </condition>