JTA サポート

Java™ Transaction API (JTA) サポートでは、JTA 1.1 仕様で定義される UserTransaction インターフェースに加えて、アプリケーション・プログラミング・インターフェース (API) が提供されます。

これらのインターフェースには、JTA 1.1 仕様で定義される TransactionSynchronizationRegistry インターフェースと、以下の API 拡張が含まれています。
  • SynchronizationCallback インターフェース
  • ExtendedJTATransaction インターフェース
  • UOWSynchronizationRegistry インターフェース
  • UOWManager インターフェース
これらの API は、以下の機能を提供します。
  • スレッドに関連付けられたグローバル・トランザクション ID およびローカル・トランザクション ID へのアクセス。

    グローバル ID は、CosTransactions::PropagationContext: オブジェクトのトランザクション ID と、ローカル Java 仮想マシン (JVM) でトランザクションを一意的に識別するローカル ID を基にしています。

  • 任意のエンタープライズ・アプリケーション・コンポーネントが、トランザクション完了でのインタレストを登録するのに使用できる、トランザクション同期化コールバック。

    拡張アプリケーションはこのコールバックを使用して、 トランザクションの完了前に更新をフラッシュし、トランザクション完了後に状態を消去することができます。 通常、JavaEE (および関連する) 仕様では、この機能をエンタープライズ・アプリケーション・コンテナーのドメインとして位置付けています。

    パーシスタンス・マネージャー、リソース・アダプター、エンタープライズ Bean などのコンポーネント、および Web アプリケーション・コンポーネントは、JTA トランザクションで登録を行うことができます。

以下の情報は、JTA サポートで提供されるインターフェースの概要です。 詳しくは、生成された API の資料を参照してください。

SynchronizationCallback インターフェース

このインターフェースを 実装するオブジェクトは、 まず ExtendedJTATransaction インターフェースを介して得られ、 トランザクションの完了通知を受け取ります。

このインターフェースを実装するオブジェクトは、エンタープライズ・アプリケーション・サーバーの Java プラットフォーム上で実行可能ですが、このオブジェクトが呼び出されたときにアクティブな特定のエンタープライズ・アプリケーション・コンポーネントはありません。 したがって、オブジェクトは、いずれのエンタープライズ・アプリケーション・リソースに対しても、直接アクセスを制限されています。 具体的には、オブジェクトは java (名前空間または任意のコンテナー仲介リソース) にアクセスできません。 そのようなオブジェクトは、そのオブジェクトが代行するエンタープライズ・アプリケーション・コンポーネント (ステートレス・セッション Bean など) への参照をキャッシュに入れることができます。 その後、このオブジェクトは、エンタープライズ・アプリケーション・リソースに通常どおりアクセスできるようになります。 例えば、このオブジェクトを使用して、Java Database Connectivity (JDBC) 接続を獲得し、beforeCompletion メソッドの実行中にデータベースの更新をフラッシュすることができます。

ExtendedJTATransaction インターフェース

このインターフェースは、Java EE JTA サポートへの WebSphere® プログラミング・モデル拡張機能です。 このインターフェースを実装するオブジェクトは、 このインターフェースをサポートする WebSphere Application Server のエンタープライズ・アプリケーション・コンテナーにより java:comp/websphere/ExtendedJTATransaction でバインドされます。 このオブジェクトへのアクセスは、Enterprise JavaBeans (EJB) コンテナーから呼び出された場合、コンポーネント管理トランザクションに制限されません。

アプリケーションは java:comp/websphere/ExtendedJTATransaction の Java Naming and Directory Interface (JNDI) 参照を使用して、ExtendedJTATransaction オブジェクトを取得します。 アプリケーションはこのオブジェクトを以下の例のように使用します。
ExtendedJTATransaction exJTA = (ExtendedJTATransaction)ctx.lookup("
	java:comp/websphere/ExtendedJTATransaction");
SynchronizationCallback sync = new SynchronizationCallback();
exJTA.registerSynchronizationCallback(sync);
ExtendedJTATransaction オブジェクトは、アプリケーション提供の 1 つ以上の SynchronizationCallback オブジェクトの登録をサポートします。 コールバックが登録される方法によって、登録されたコールバックそれぞ れが、次のポイントのいずれかで呼び出されます。
  • アプリケーション・サーバー上で実行される各トランザクションの終わり (トランザクションがローカルで開始されたか、インポートされたかにかかわらず)。
  • コールバックが登録されたトランザクションの終わり。
非推奨の機能 (Deprecated feature) 非推奨の機能 (Deprecated feature): このリリースでは、registerSynchronizationCallbackForCurrentTran メソッドは推奨されません。その代わりに、TransactionSynchronizationRegistry インターフェースの registerInterposedSynchronization メソッドを使用します。depfeat

TransactionSynchronizationRegistry インターフェース

このインターフェースは、JTA 1.1 仕様で定義されます。 システム・レベルのアプリケーション・コンポーネント (パーシスタンス・マネージャー、リソース・アダプター、エンタープライズ Bean など)、および Web アプリケーション・コンポーネントは、このインターフェースを使用して、JTA トランザクションでの登録を行うことができます。そのようにして、例えば、コンポーネントはトランザクションの完了時にキャッシュをフラッシュすることができます。

TransactionSynchronizationRegistry インターフェースを取得するには、java:comp/TransactionSynchronizationRegistry の JNDI 検索を使用します。

非推奨の機能 (Deprecated feature) 非推奨の機能 (Deprecated feature): 同期インターフェースを登録するには、このリリースで推奨されない ExtendedJTATransaction インターフェースの registerSynchronizationCallbackForCurrentTran メソッドではなく、registerInterposedSynchronization メソッドを使用してください。depfeat

UOWSynchronizationRegistry インターフェース

このインターフェースは、TransactionSynchronizationRegistry インターフェースと同じ機能を提供しますが、WebSphere Application Server でサポートされる以下のすべてのタイプの作業単位 (UOW) に適用されます。
  • JTA トランザクション
  • ローカル・トランザクション内包 (LTC)
  • ActivitySession コンテキスト
システム・レベルのアプリケーション・サーバー・コンポーネント (パーシスタンス・マネージャー、リソース・アダプター、エンタープライズ Bean など)、および Web アプリケーション・コンポーネントは、このインターフェースを使用して、JTA トランザクションでの登録を行うことができます。このコンポーネントでは、以下の作業を実行できます。
  • 特殊な順序付けセマンティックで同期オブジェクトを登録します。
  • リソース・オブジェクトと UOW を関連付けます。
  • 現在の UOW のコンテキストを取得します。
  • 現在の UOW 状況を取得します。
  • 現在の UOW をロールバックのためにマークします。

UOWSynchronizationRegistry インターフェースを取得するには、java:comp/websphere/UOWSynchronizationRegistry の JNDI 検索を使用します。 このインターフェースは、サーバー環境でのみ使用可能です。

以下は、現在の UOW で挿入された同期を登録するサンプルです。
// Retrieve an instance of the UOWSynchronizationRegistry interface from JNDI.
final InitialContext initialContext = new InitialContext();
final UOWSynchronizationRegistry uowSyncRegistry =
				(UOWSynchronizationRegistry)initialContext.lookup("java:comp/websphere/UOWSynchronizationRegistry");

// Instantiate a class that implements the javax.transaction.Synchronization interface
final Synchronization sync = new SynchronizationImpl();

// Register the Synchronization object with the current UOW.
uowSynchronizationRegistry.registerInterposedSynchronization(sync);

UOWManager インターフェース

UOWManager インターフェースは、JTA TransactionManager インターフェースと同じく、アプリケーション・サーバーによるトランザクション境界の管理を可能にするメソッドを定義するものです。 アプリケーションは UOWManager インターフェースを使用して、製品内で UOW コンテキストを操作できます。 UOWManager インターフェースは、WebSphere Application Server がサポートする UOW のタイプすべてに適用されます。 そのタイプとは、JTA トランザクション、ローカル・トランザクション内包 (LTC)、および ActivitySession コンテキストです。 アプリケーション・コードを特定のタイプの UOW で実行する際に、適切に構成されたエンタープライズ Bean を使用する必要がありません。 基本的に、UOW の有効範囲内で実行されるロジックは、匿名の内部クラスにカプセル化されます。 システム・レベルのアプリケーション・サーバー・コンポーネント (パーシスタンス・マネージャー、リソース・アダプター、エンタープライズ Bean など)、および Web アプリケーション・コンポーネントは、このインターフェースを使用することができます。

WebSphere Application Server の API またはシステム・プログラミング・インターフェース (SPI) では、TransactionManager インターフェースを提供していません。 UOWManager インターフェースによって同等の機能が提供されていますが、WebSphere Application Server は UOW コンテキストの制御と保全性を保持します。

コンテナー管理環境で UOWManager インターフェースを取得するには、java:comp/websphere/UOWManager の JNDI 検索を使用します。 コンテナー管理環境外で UOWManager インターフェースを取得するには、UOWManagerFactory クラスを使用します。 このインターフェースは、サーバー環境でのみ使用可能です。

UOWManager インターフェースを使用すると、Web アプリケーションをマイグレーションして、エンタープライズ Bean ではなく Web コンポーネントを使用しても、UOW の制御を保持することができます。例えば、現在 UserTransaction インターフェースを使用してグローバル・トランザクションを開始する Web アプリケーションは、一部の非トランザクション作業の実行をサポートしないよう構成されたセッション・エンタープライズ Bean で、メソッドへの呼び出しを行ってから、グローバル・トランザクションを完了します。セッション EJB メソッドでカプセル化されたロジックを、UOWAction 実装の実行メソッドに移動することができます。 その後で、セッション・エンタープライズ Bean を呼び出す Web コンポーネント内のコードを、UOWManager インターフェースの runUnderUOW メソッドへの呼び出しと置き換えて、このロジックがローカル・トランザクションで実行されるように要求します。このようにして、元のアプリケーションと同じレベルで UOW 制御を保持します。

次の例では、新規グローバル・トランザクションの有効範囲で、トランザクション作業をいくつか実行します。 トランザクション作業は、UOWAction インターフェースの run メソッドを実装する、匿名の内部クラスで実行されます。 実行メソッドにより作成されたチェック例外が、トランザクションの結果に影響を及ぼすことはありません。
// Retrieve an instance of the UOWManager interface from JNDI.
final InitialContext initialContext = new InitialContext();
final UOWManager uowManager = (UOWManager)initialContext.lookup("java:comp/websphere/UOWManager");

try
{
		// Invoke the runUnderUOW method, indicating that the logic should be run in a global 
		// transaction, and that any existing global transaction should not be joined, that is, 
		// the work must be performed in the scope of a new global transaction.
		uowManager.runUnderUOW(UOWSynchronizationRegistry.UOW_TYPE_GLOBAL_TRANSACTION, false, new UOWAction()
	{
 				public void run() throws Exception
 		{
						// Perform transactional work here.
 		}
	});
}

catch (UOWActionException uowae)
{
		// Transactional work resulted in a checked exception being thrown.
}

catch (UOWException uowe)
{
		// The completion of the UOW failed unexpectedly. Use the getCause method of the 
		// UOWException to retrieve the cause of the failure.
}

トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjta_extjta
ファイル名:cjta_extjta.html