IBM WebSphere Application Server は、ローカル・トランザクション拡張デプロイメント記述子を使用して構成できる、ローカル・トランザクション内包 (LTC) をサポートしています。 このトピックでは、このサポートがアプリケーション・プログラマーに提供する利点、および使用する関連設定について説明します。 このトピックでは、ローカル・トランザクションのトランザクション・サポートを構成する最良の方法を決定する際の、考慮点もリストします。
以下のセクションでは、LTC サポートが提供する利点、および各状況でのローカル・トランザクション拡張デプロイメント記述子の設定方法について説明します。
アプリケーションは、IBM WebSphere Application Server の拡張ローカル・トランザクション・サポートを使用することにより、 グローバル・トランザクションの下にあるときと同じ、不特定のトランザクション・コンテキスト内のビジネス・ロジックを実行することができます。 例えば、エンタープライズ Bean は、Transaction 属性が Not supported または Never でデプロイされた場合、 不特定のトランザクション・コンテキスト下で実行されます。
拡張ローカル・トランザクション・サポートは、コンテナー管理の、暗黙のローカル・トランザクション境界を提供します。この境界内で、コンテナーは、アプリケーションの更新およびその接続のクリーンアップをコミットします。 アプリケーションは、デプロイメントの問題からさらに独立して設計できます。 例えば、グローバル・トランザクション・コンテキストを使用するかしないかに関係なく、 ビジネス・ロジックが呼び出される場合などの Transaction 属性 Supports の使用を大きく簡素化します。
アプリケーションは、トランザクション下で実行されているかどうかに関係なく、 獲得、使用、クローズ (get-use-close) パターンの接続方法に従うことができます。アプリケーションは、 グローバル・トランザクションがなくても、すべての状態においてクローズに依存して同様の振る舞いを行い、すなわち、接続時のロールバックを引き起こさないようにすることができます。
複数のリソース・マネージャーの ACID 調整が必要ないシナリオは、多数あります。 そのようなシナリオでは、Transaction ポリシーを Not supported にして ビジネス・ロジックを実行した方が、Required ポリシーの場合よりもパフォーマンスが上がります。 この利点は、Local Transactions - Resolution-control 拡張デプロイメント設定 ContainerAtBoundary で活用されます。この設定を使用すると、アプリケーションとリソース・プロバイダー (データベースなど) との対話が、コンテナーによって開始と終了の両方が行われる暗黙のリソース・マネージャー・ローカル・トランザクション (RMLT) 内で管理されます。 コンテナーは、構成済みの Local Transactions - Boundary (例えば、メソッドの終わりなど) で RMLT をコミットします。 例外によってアプリケーションからコンテナーにコントロールが戻された場合には、開始済みのすべての RMLT がコンテナーによってロールバックされます。
この使用方法は、サーブレットとエンタープライズ Bean の両方に適用されます。
アプリケーションによるローカル・トランザクションの使用方法を説明した J2EE の仕様では、Local Transactions - Resolution-control=Application および Local Transactions - Unresolved-action=Rollback というデフォルト設定によって提供される方法で、これが行われます。Local Transactions - Unresolved-action 拡張デプロイメント記述子が Commit に設定されると、コンテナーは、アプリケーションが開始するが、ローカル・トランザクション内包が終了したとき (例えば、メソッドの終了時) に完了しない、任意の RMLT をコミットします。 この使用方法は、サーブレットとエンタープライズ Bean の両方に適用されます。
ActivitySession を使用して、単一のメソッドより長い境界を持 つ分散コンテキストを提供することができます。 より長い ActivitySession 境界で使用できるよう RMLT を拡張す ることができます (クライアントによって制御可能)。 ActivitySession 境界は、複数のリソース上での ACID 操作が不要な分散トランザクションを使用する必要性を減らします。 この利点は、Local Transactions - Boundary 拡張デプロイメント 設定を ActivitySession にすることで使用できます。 このような拡張 RMLT は、アプリケーションのコントロール下に置かれたままとなるか、Local Transactions - Resolution-control デプロイメント記述子設定の使用に従って、コンテナーによって管理されます。
セッション Bean の場合には、コンポーネントのデプロイメント記述子内で、Transaction type を Bean (Bean によって管理されたトランザクションを使用する) に設定します。(サーブレットの場合、この作業は必要はありません。)
コンポーネントのデプロイメント記述子内で、Local Transactions - Resolution-control を ContainerAtBoundary に設定します。 Container トランザクション・デプロイメント記述子で、Transaction を Supports に設定します。
Container トランザクション・デプロイメント記述子で、Transaction を Required、Requires new、または Mandatory に設定します。
コンポーネントのデプロイメント記述子内で、Local Transactions - Resolution-control を ContainerAtBoundary に設定します。 Container トランザクション・デプロイメント記述子で、Transaction を Not supported に設定します。
コンポーネントのデプロイメント記述子内で、Local Transactions - Resolution-control を Application に設定し、Local Transactions - Unresolved-action を Rollback に設定します。 Container トランザクション・デプロイメント記述子で、Transaction を Not supported に設定します。
コンポーネントのデプロイメント記述子内で、Local Transactions - Resolution-control を ContainerAtBoundary に、Local Transactions - Boundary を ActivitySession に、Bean Cache - Activate at を ActivitySession に設定します。 Container トランザクション・デプロイメント記述子で、Transaction を Not supported に設定し、ActivitySession 属性を Required、Requires new、または Mandatory に設定します。
コンポーネントのデプロイメント記述子内で、Local Transactions - Resolution-control を Application に、Local Transactions - Boundary を ActivitySession に、Bean Cache - Activate at を ActivitySession に設定します。 Container トランザクション・デプロイメント記述子で、Transaction を Not supported に設定し、ActivitySession 属性を Required、Requires new、または Mandatory に設定します。