Oracle BPEL Process Managerのトランザクション・セマンティクス
以前のリリースと同様に、Oracle BPEL Process Managerでは、デフォルトの場合、リクエストに基づいて新規のトランザクションが作成されます。つまり、トランザクションが存在する場合は、そのトランザクションが一時停止され、新規のトランザクションが作成されます。子(新規)トランザクションが完了すると、マスター(一時停止された)トランザクションが再開します。
ただし、リクエストが非同期(一方向)の場合、トランザクションには次のいずれかの処理が適用されます。
-
デハイドレーション・ストア(
dlv_message
表)に挿入するために継承されます。 -
トランザクションに透過的に登録されます(トランザクションがある場合)。
メッセージの損失はありません。起動メッセージは、処理のためにデハイドレーション・ストアに挿入されるか、フォルトを介して顧客に通知されます。
リリース10.1.3.xでは、消費側プロセス(つまり、パートナ・リンク)および提供側プロセスに、複数のプロパティを設定していました。これらのプロパティを使用することで、実行を単一のグローバル・トランザクションにチェーンできました。消費側では、bpel.xml
ファイルのパートナ・リンク・バインディングにtransaction=participate
を設定しました。提供側では、bpel.xml
の<configurations>
セクションにtransaction=participate
を設定しました。
リリース11gおよび12cでは、コールされるBPELコンポーネント(コール先プロセスと呼ばれます)にのみ、新しいtransaction
プロパティを設定する必要があります。次のようにbpel.config.transaction
を追加します。
-
新規BPELプロセスのための「BPELプロセスの作成」ダイアログ内。
-
既存のBPELプロセスの
composite.xml
ファイル内のBPELプロセス・サービス・コンポーネント・セクション内(bpel.config.
の必須接頭辞に注意)。
このプロパティは、コールを開始するBPELインスタンスのトランザクション動作を構成します。この設定を後で変更する必要がある場合は、プロパティ・インスペクタを使用できます。
次の例に詳細を示します。
<component name="InternalWareHouseService" version="2.0"> <implementation.bpel src="BPEL/InternalWareHouseService.bpel"/> <property name="bpel.config.transaction" type="xs:string" many="false">required | requiresNew | notSupported " </property> </component>
表13-1は、required
値(デフォルト値)およびrequiresNew
値について説明し、設定に基づいたBPELインスタンスの動作の要約を示しています。
表13-1 bpel.config.transactionプロパティの動作
説明 | bpel.config.transactionがrequiredに設定されている場合 | bpel.config.transactionがrequiresNewに設定されている場合 |
---|---|---|
リクエスト/レスポンス(開始)起動 |
トランザクションがある場合はコール元トランザクションが結合され、トランザクションがない場合は新規トランザクションが作成されます。 |
常に新規トランザクションが作成され、既存のトランザクションがある場合はそのトランザクションが一時停止されます。 |
|
起動されたメッセージは、同じトランザクションの同一スレッドを使用して処理されます。 |
常に新規トランザクションが作成され、既存のトランザクションがある場合はそのトランザクションが一時停止されます。 |
ノート:
bpel.config.transaction
プロパティは、中間プロセスのreceiveアクティビティには適用されません。この場合は、別のトランザクションの別のスレッドを使用してメッセージが処理されます。これは、相関が必要で常に非同期で処理されるためです。
bpel.config.transaction
プロパティの設定方法の詳細は、「BPELプロセス・サービス・コンポーネントの追加方法」および「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。
次の各項では、bpel.config.transaction
をrequired
またはrequiresNew
に設定した場合のトランザクションおよびフォルト動作について説明します。