SyncMaxWaitTimeとタイムアウトのない永続同期リクエストに関する必知事項

SyncMaxWaitTimeプロパティは、非同期方式でコールされる永続同期プロセスに適用されます。

次の例に示す定義がBPELプロセスに存在していると仮定します。このプロセスは、breakpointアクティビティがないため、永続プロセスではありません。

<receive name="receiveInput" partnerLink="client" variable="input"
createInstance="yes" />
<assign>
...
</assign>
<reply name="replyOutput" partnerLink="client" variable="output" />

Javaクライアントまたは別のBPELプロセスがこのプロセスをコールすると、assignアクティビティが実行され、replyアクティビティによって出力メッセージがHashMapに設定され、クライアント(実際には配信サービス)が取得できるようになります。replyは最後のアクティビティであるため、スレッドがクライアント側に戻り、リプライ・メッセージの取得が試みられます。リプライ・メッセージはすでに挿入されているため、クライアントは待機せずにリプライで戻ります。

次の例に示すように、BPELプロセスにbreakpointアクティビティがあると仮定します。

<receive name="receiveInput" partnerLink="client" variable="input"
createInstance="yes" />
<assign>
...
</assign>
<wait name="Wait1">
      <for>'PT10S'</for>
</wait>
<reply name="replyOutput" partnerLink="client" variable="output" />

同期プロセス内部に非同期のアクティビティが存在することは適切ではありませんが、BPELではこの種の設計が禁止されていません。

クライアント(または別のBPELプロセス)がプロセスをコールすると、wait (breakpoint)アクティビティが実行されます。ただし、waitはいくらかの時間が経過した後に非同期スレッドによってバックグラウンドで処理されるため、スレッドの実行はクライアント側に戻ります。クライアント(実際には配信サービス)はリプライ・メッセージの取得を試みますが、プロセス内のリプライ・アクティビティはその時点では実行されていないため、メッセージは存在しません。したがって、クライアント・スレッドはSyncMaxWaitTime値(秒数)に指定されている時間が経過するまで待機します。この時間を超えると、クライアント・スレッドはコール元にタイムアウト例外を返します。待機時間がSyncMaxWaitTime値未満の場合は、非同期のバックグラウンド・スレッドが待機状態から再開し、リプライを実行します。リプライはHashMapに配置され、待機側(クライアント・スレッド)に通知されます。クライアント・スレッドは、リプライ・メッセージを取得して戻ります。

したがって、プロセスの中ほどにブレークポイントがある場合は、同期プロセスの起動にのみSyncMaxWaitTimeが適用されます。ブレークポイントがない場合は、プロセス全体がクライアント・スレッドで実行され、リプライ・メッセージを返します。