flowアクティビティ内のアクティビティ実行の同期化
flowアクティビティ内のアクティビティの実行を同期化すると、他のアクティビティが完了した後にのみ特定のアクティビティを実行できるようになります。たとえば、invokeアクティビティverifyFlight
があり、flowの開始時に他のinvokeアクティビティ(verifyHotel
、verifyCarRental
およびscheduleFlight
)と並行して実行されると仮定します。ただし、フライトのスケジュールが必要なのは、フライトが使用可能であることを確認した後のみです。したがって、verifyFlight
invokeアクティビティとscheduleFlight
invokeアクティビティの間にリンクを追加できます。このリンクにより、リンクのターゲットであるアクティビティ(scheduleFlight
)は、リンクのソースであるアクティビティ(verifyFlight
)が完了した場合のみ実行されることを示す、依存関係のレベルが指定されます。
次の例に詳細を示します。リンク名verifyFlight-To-scheduleFlight
は、ソースverifyFlight
invokeアクティビティおよびターゲットscheduleFlight
invokeアクティビティに割り当てられます。ソースverifyFlight
の実行が完了した後、ターゲットscheduleFlight
が実行されます。
<flow ...> <links> <link name="verifyFlight-To-scheduleFlight" /> </links> <documentation> Verify the availability of a flight, hotel, and rental car in parallel </documentation> <invoke name="verifyFlight" ...> <sources> <source linkName="verifyFlight-To-scheduleFlight" /> </sources> </invoke> <invoke name="verifyHotel" ... /> <invoke name="verifyCarRental" ... /> <invoke name="scheduleFlight" ...> <targets> <target linkName="verifyFlight-To-scheduleFlight" /> </targets> </invoke> </flow>
前の例は、BPELバージョン2.0におけるリンク構文の例を示しています。BPELバージョン1.1とBPELバージョン2.0では、リンク構文が若干異なります。
-
BPELバージョン1.1では、
<target>
と<source>
を使用します。 -
BPELバージョン2.0では、
<targets>
と<sources>
を使用します。
表10-1に詳細を示します。
表10-1 BPELバージョン1.1とBPELバージョン2.0のリンク構文
BPELバージョン1.1の例 | BPELバージョン2.0の例 |
---|---|
<flow> <links> <link name="XtoY"/> <link name="CtoD"/> </links> <sequence name="X"> <source linkName="XtoY"/> <invoke name="A" .../> <invoke name="B" .../> </sequence> <sequence name"Y"> <target linkName="XtoY"/> <receive name="C" ...> <source linkName="CtoD"/> </receive> <invoke name="E" .../> </sequence> <invoke partnerLink="D" ...> <target linkName="CtoD"/> </invoke> </flow> |
<flow> <links> <link name="AtoB"/> </links> <assign name="B"> <targets> <target linkName="AtoB"/> </targets> <copy> <from>concat($output.payload, 'B')</from> <to>$output.payload</to> </copy> </assign> <assign name="A"> <sources> <source linkName="AtoB"/> </sources> <copy> <from>concat($output.payload, 'A')</from> <to>$output.payload</to> </copy> </assign> </flow> |