JTAの概要

ここでは、XAの概念について簡潔に概要を示します。

TimesTenでのJTAについて

TimesTen ClassicでのみサポートされているJTAインタフェースのTimesTen実装は、Javaアプリケーション、アプリケーション・サーバーおよびトランザクション・マネージャを有効にして、分散トランザクション処理(DTP)環境でTimesTenリソース・マネージャを使用することを目的にしています。

TimesTenのこの実装はOracle WebLogic Serverで使用するためにサポートされています。

詳細は、次の場所を参照してください。

TimesTen JTAは、X/Open XA標準のTimesTen実装の最初の部分であるため、この章での説明の多くは基本的なXA機能に関することです。『Oracle TimesTen In-Memory Database C開発者ガイド』分散トランザクション処理: XAも参照してください。

ヒント:

  • TimesTen XA実装はキャッシュと併用できません。キャッシュ・エージェントが実行されていると、XAトランザクションの開始に失敗します。

  • レプリケーションが有効化されていると、XAトランザクションは実行できません。

  • XAトランザクション内では、DDL文は実行しないでください。

X/Open DTPモデル

X/Open DTPモデルで定義されているインタフェースについて説明します。

図4-1 にX/Open DTPモデルによって定義されるインタフェースを示します。

図4-1 分散トランザクション処理モデル

図4-1の説明
「図4-1 分散トランザクション処理モデル」の説明

TXインタフェースとは、トランザクション・マネージャとの通信に使用するアプリケーションです。この図はグローバル・トランザクションをトランザクション・マネージャに伝達するアプリケーションを示しています。DTPモデルでは、トランザクション・マネージャは、各グローバル・トランザクションを複数のブランチに分割し、分割したグローバル・トランザクションを別々のリソース・マネージャのサービスに分散させます。トランザクション・マネージャは、JTAインタフェースを使用して、各トランザクション・ブランチと適切なリソース・マネージャを調整します。

TimesTen JTAのコンテキストでは、リソース・マネージャは、TimesTenデータベースのコレクションの場合と、JTAをサポートする他の商用データベースと組み合せたデータベースのコレクションの場合があります。

TXおよびJTAインタフェースで提供されるグローバル・トランザクション制御は、ネイティブのJDBCインタフェースで提供されるローカル・トランザクション制御とは異なります。一般に、ローカル・トランザクションおよびグローバル・トランザクションには別々の接続を使用することをお薦めします。アプリケーションは、TimesTenリソース・マネージャに対する接続ハンドルを取得して、同じ接続上でローカル・トランザクションおよびグローバル・トランザクションの両方を開始できます。

2フェーズ・コミット

JTAの実装においてトランザクション・マネージャは、グローバル・トランザクションの分散したブランチを2フェーズ・コミット・プロトコルを使用してコミットします。

  1. 第1フェーズでは、トランザクション・マネージャは、グローバル・トランザクションの各ブランチがコミット可能であることを確認し、保証するために、各リソース・マネージャに対してコミットを準備するように指示します。リソース・マネージャがそのブランチをコミットできない場合、トランザクション・マネージャは、第2フェーズでトランザクション全体をロールバックします。

  2. 第2フェーズでは、トランザクション・マネージャは、各リソース・マネージャにブランチをコミットするように命令します(第1フェーズでコミットできなかったことがリソース・マネージャにレポートされている場合は、グローバル・トランザクションをロールバックします)。

次の最適化された動作に注意してください。

  • トランザクション・マネージャは、グローバル・トランザクションに1つのブランチのみが含まれるように指定した場合、第1フェーズをスキップして、第2フェーズでトランザクションをコミットします。

  • グローバル・トランザクション・ブランチが読取り専用で、トランザクション・ログ・レコードが生成されない場合、トランザクション・マネージャは第1フェーズでそのブランチをコミットし、ブランチの第2フェーズをスキップします。

ノート:

トランザクション・マネージャは、すべてのブランチを正常にコミットしたときにかぎり、グローバル・トランザクションがコミットされたとみなします。