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に設定した場合のトランザクションおよびフォルト動作について説明します。