bpel.config.transactionがrequiredに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる
表13-3では、BPELCallerプロセスがBPELCalleeプロセスをコールします。BPELCalleeプロセスでは、bpel.config.transaction
プロパティがrequired
に設定されています。表13-3は、bpel.config.transaction
がこの値に設定されている場合のフォルト伝播とトランザクション動作を示しています。
表13-3 bpel.config.transactionがrequiredに設定されているBPELCalleeへのBPELCallerによるコール
BPELCalleeの状態 | BPELCallerの動作 |
---|---|
フォルトでリプライ( |
フォルトを取得して捕捉します。BPELCallerがトランザクションを所有します。したがって、トランザクションを捕捉した場合、トランザクションはコミットされます。BPELCallerが処理しない場合は、グローバル・ロールバックが発生します。 |
フォルトをスロー( |
フォルトを取得して捕捉します。 |
フォルト(FaultOne)でリプライ後、フォルト(FaultTwo)をスローした場合 |
FaultTwoを取得します。 |
|
そのトランザクション・ロールバックを取得します。そのロールバックを捕捉する方法はありません。このフォルトは処理されません。 |
たとえば、2つの同期プロセス(BPELMasterとBPELChild)を作成し、同じレコードを挿入する際にそれぞれが同じデータベース・アダプタ参照を使用するとします(したがって、権限キー(PK)違反が発生します)。双方にxADatasourceName
が設定されます。
bpel.config.transaction
設定がないと、発生したフォルトは処理されず、BPELChildはロールバックされます。BPELMasterにcatchブロックがある場合、そのトランザクションはコミットされます。したがって、データベースのBPELMasterからのレコードで終了します。
BPELMasterでのフォルトも捕捉しなかった場合は、(2つの異なるトランザクションで)第2のロールバックを取得します。
同じテスト・ケースで、bpel.config.transaction
がrequired
に設定され、フォルト・ハンドラが適切でない場合は、BPELMasterの未処理のフォルトに基づいてトランザクション全体がロールバックされます。
BPELChildからフォルトを捕捉してロールバック・フォルトをスローするように、BPELMasterにフォルト・ハンドラを追加すると、トランザクションはグローバルにロールバックされます。
この機能を使用して、トランザクション境界を管理し、エンドツーエンド・トランザクション・フローをモデル化できます(ソースおよびターゲットがトランザクションの場合)。