同一トランザクション内での 1 フェーズ・コミット対応リソース および 2 フェーズ・コミット対応リソースへのアクセスの調整
最終参加者サポートにより、 同一のグローバル・トランザクションの中で 1 つの 1 フェーズ・コミット対応リソースを、 任意の数の 2 フェーズ・コミット対応リソースとともに使用できます。同一のトランザクション内で 1 フェーズ・コミット・リソースを含む複数の対話が可能ですが、そのようなリソースを関与させることができるのは 1 つだけです。
トランザクションのコミット時には、2 フェーズ・コミット・プロトコルを使用して、 2 フェーズ・コミットのリソースがまず準備され、これが正常に完了したら、次に 1 フェーズ・コミットのリソースが 呼び出されてコミットされます。次に、1 フェーズ・コミットの リソースの応答に応じて、2 フェーズ・コミットのリソースがコミット またはロールバックされます。
- メイン・シナリオでは、1 フェーズ・コミット・リソース・プロバイダーには、
トランザクションが開始されたアプリケーション・サーバー・プロセス (「トランザクション・ルート」
サーバー) でアクセスすることができます。
このシナリオでは、最終参加者サポートは、 同一トランザクション内の 1 つの 1 フェーズ・コミット対応リソースと任意の数の 2 フェーズ・コミット対応リソースを 調整することができます。
- 異なるアプリケーション・サーバー (「トランザクション従属」サーバー) で、
トランザクションが開始されたサーバーから 1 フェーズ・コミット・リソース・プロバイダーに
アクセスする場合があります (例えば、EJB 実装が 1 フェーズ・コミット・リソース・プロバイダー
にアクセスするリモート EJB インターフェースでトランザクションが起動された結果として)。
このシナリオでは、通常、トランザクションはコミットすることができません。 トランザクション従属サーバーに登録されている 1 フェーズ・コミット・リソース を (グローバル・トランザクションの一部として) コミットできるようにするために、 トランザクション・サービスは、トランザクション・ルートから従属サーバーに 調整の責任を委任する必要があります。 このことは、トランザクション・ルート・サーバーに登録されている リソースが他にない場合にだけ発生します。
最終参加者サポートによって、トランザクションへのヒューリスティックの結果のリスクが増大します。 すなわち、トランザクション・マネージャーは、すべてのリソースが同じ方向で (コミットまたは ロールバックのいずれか) 完了したのかどうかが分からなくなくなります。このため、 アプリケーションで同一トランザクション内の 1 フェーズ・コミット対応リソースと 2 フェーズ・コミット対応リソースへの アクセスを調整できるようにするには、ヒューリスティック障害を受け入れる、すなわちヒューリスティックな結果のリスクが 増大することを受け入れるように、アプリケーションを構成します。
ヒューリスティックの結果は、トランザクション・サービス (JTS) が 1 フェーズ・コミット・リソースに対して行った 1 フェーズ・コミットのフローからの応答を受信しない場合に発生します。この状態では、 トランザクション・サービスは、1 フェーズ・コミット・リソースの変更がコミットされたのかロールバックされたのかを 判別できず、そのため、グローバル・トランザクションの結果が正しくても、それを信頼して他の 2 フェーズ・コミット・ リソースに対して適用することができません。
アプリケーション・サーバーのトランザクション・サービスがヒューリスティック障害を 受け入れるように構成することも、アプリケーションが個別にヒューリスティック障害を受け入れるように 構成することもできます。アプリケーションは、そのアセンブル時またはデプロイ後に、 個別に構成できます。
- 1 フェーズ・コミット・リソースがコミットするよう要求された場合は、アクティビティー・ログに ヒューリスティックの結果が報告されます。
- 1 フェーズ・コミット・リソースがコミットを要求されなかった場合は、トランザクションは矛盾なく ロールバックされています。
1 フェーズ・コミットおよび 2 フェーズ・コミットの両方のリソースを含むトランザクションの例外
1 フェーズ・コミット・リソースおよび 2 フェーズ・コミット・リソ ースが関係するトランザクションによってスローされる可能性のあ る例外は、2 フェーズ・コミット・リソースのみが関係するトランザク ションによってスローされる可能性のある例外と同じです。
発生する可能性がある例外は、WebSphere Application Serverインフォメーション・センターのアプリケーション・プログラミング・インターフェース (API) 参照情報にリストされています。