相関セット使用時の新規インスタンスまたは既存インスタンスへのメッセージのルーティング方法
相関セットを使用したBPELプロセスでは、適切なルーティングが実行されます。メッセージは次のいずれかとなる可能性があります。
-
新しいインスタンスを作成する起動メッセージ
-
既存のインスタンスを続行するコールバック・メッセージ
図9-19に、同じ操作(process
)を使用したreceiveアクティビティのエントリと中間プロセスのreceiveアクティビティを示します。
次の例に、同じ操作(process
)を使用したreceiveアクティビティのエントリと中間プロセスのreceiveアクティビティの例を示します。
<receive name="receiveInput" partnerLink="client" portType="client:BPELProcess1" operation="process" variable="inputVariable" createInstance="yes"> <correlations> <correlation initiate="yes" set="CorrelationSet_1"/> </correlations> </receive> <!-- some business logic --> <while name="While_1" condition=*loop for 3 iterations*> <sequence name="Sequence_1"> <receive name="Continue_Receive" partnerLink="client" portType="client:BPELProcess1" operation="process" variable="inputVariable" createInstance="no"> <correlations> <correlation initiate="no" set="CorrelationSet_1"/> </correlations> </receive> <!-- some business logic --> </sequence> </while>
前の例の初期のシナリオでは、次のアクションがBPELプロセスP1で発生します。
-
パートナによって、4つのメッセージ(メッセージ1、メッセージ2、メッセージ3およびメッセージ4)が同じパートナ(相関ID
101
)に対して提供されます。 -
メッセージ1によって、BPELプロセスP1の新しいインスタンスが作成されます。このメッセージは起動メッセージとしてマークされます。
-
メッセージ2、3および4は、
Continue_Receive
アクティビティを使用して受信されます。これらのメッセージはコールバック・メッセージとしてマークされます。 -
while
ループが3回反復されることが想定されるため、インスタンスが閉じます。
ここで、追加メッセージがルーティングされ、これにより、競合状態が発生する可能性があると想定します。表9-13に詳細を示します。
表9-13 メッセージ配信シナリオ
シナリオ | 説明 | 起動メッセージとしてマーク | コールバック・メッセージとしてマーク |
---|---|---|---|
1 |
ここで、パートナによって、同じ相関ID ( |
|
|
2 |
メッセージ4と5が短い時間ウィンドウ内で受信される場合、メッセージ4によってインスタンスBPELプロセスP1が閉じ、メッセージ5がこのインスタンスへのコールバックとしてルーティングされる場合があります。このシナリオによって競合状態が発生する場合があります。例:
|
|
|
3 |
これはシナリオ2に類似しています。ただし、この場合、メッセージ7、8および9は受信されません。例:
メッセージ・リカバリにはいくつかのオプションがあります。
|
|
|