8 Java Transaction APIとOracle WebLogicの拡張機能
JTA APIの概要
簡単な概要を使用してJTA APIについて学習します。WebLogic Serverでは、JavaアプリケーションのJava Transaction API (JTA)を実装するjavax.transaction
パッケージとjavax.transaction.xa
パッケージがサポートされています。
JTAの詳細は、Java Transaction API (JTA)仕様(http://www.oracle.com/technetwork/java/javaee/jta/index.html
)を参照してください。javax.transaction
インタフェースおよびjavax.transaction.xa
インタフェースの詳細は、JTAのJavadocを参照してください。
JTAの構成要素は以下のとおりです。
-
アプリケーションからトランザクション境界を設定したり、トランザクションを管理したりするためのインタフェースである
javax.transaction.UserTransaction
。このインタフェースは、Javaクライアント・プログラムの一部として、またはEJB内でBean管理のトランザクションの一部として使用します。 -
トランザクション・マネージャがアプリケーションのトランザクションの境界を設定したり、トランザクションを管理したりするためのインタフェースである
javax.transaction.TransactionManager
。このインタフェースはコンテナ管理のトランザクションの一部としてEJBコンテナによって使用されます。このインタフェースでは、javax.transaction.Transaction
インタフェースを使用して特定のトランザクションで処理が実行されます。 -
トランザクション・マネージャがアプリケーション・サーバーにステータスおよび同期の情報を提供するためのインタフェースである
javax.transaction.Status
とjavax.transaction.Synchronization
。これらのインタフェースは、トランザクション・マネージャによってのみアクセスされ、アプリケーション・プログラムの一部として使用することはできません。 -
トランザクション・マネージャがXA準拠リソースのリソース・マネージャと連係するためのインタフェースである
javax.transaction.xa.XAResource
、およびトランザクション・マネージャがトランザクションの識別子を取り出すためのインタフェースであるjavax.transaction.xa.Xid
。これらのインタフェースは、トランザクション・マネージャによってのみアクセスされ、アプリケーション・プログラムの一部として使用することはできません。
JTAに対するOracle WebLogicの拡張機能
Java Transactions APIの拡張機能は、JTAの仕様で実装の細かな部分がカバーされていないところや補足的な機能が必要なところで提供されます。
Oracle WebLogicでは、JTA仕様の解釈に基づいて以下の機能が提供されます。
-
クライアントが開始するトランザクション - JTAトランザクション・マネージャ・インタフェース(
javax.transaction.TransactionManager
)がJNDIを通じてクライアントやBeanプロバイダから利用可能になります。この機能により、クライアントや、Bean管理のトランザクションを利用するEJBでトランザクションをサスペンドしたり再開したりすることができます。ノート:
サスペンドされたトランザクションは、それがサスペンドされた同じサーバー・プロセスで再開する必要があります。
-
トランザクションのスコープ - トランザクションはクラスタとドメインの内部、およびクラスタとドメイン間で機能します。
-
拡張された
javax.transaction.TransactionSynchronizationRegistry
のサポート - WebLogic Serverでは、java:comp/TransactionSynchronizationRegistry
の標準名を使用して、JNDI内のTransactionSynchronizationRegistry
オブジェクトをルックアップできるようになりました。Oracleでは、このサポートを拡張するため、2つのグローバルJNDI名(javax/transaction/TransactionSynchronizationRegistry
とweblogic/transaction/TransactionSynchronizationRegistry
)を追加しました。http://docs.oracle.com/javaee/7/api/index.html?javax/transaction/TransactionSynchronizationRegistry.html
のjavax.transaction.TransactionSynchronizationRegistry
を参照してください。
Oracle WebLogicでは、JTAの拡張機能として以下のクラスとインタフェースが提供されます。
-
weblogic.transaction.RollbackException
(javax.transaction.RollbackException
を拡張)このクラスでは、より包括的な例外情報で使用するためにロールバックの元々の理由が保持されます。
-
weblogic.transaction.TransactionManager
(javax.transaction.TransactionManager
を拡張)WebLogic JTAトランザクション・マネージャ・オブジェクトでは、XAリソースが起動時にトランザクション・マネージャに対する登録を行ったり、登録を解除したりできるようにするこのインタフェースがサポートされています。このインタフェースを利用すると、トランザクションをサスペンド後に再開することもできます。
このインタフェースには、以下のメソッドがあります。
-
registerStaticResource
、registerDynamicResource
、およびunregisterResource
-
registerResource
— (WebLogic Server 8.1で新しく追加されたメソッド)このメソッドでは、トランザクション・マネージャによるリソースの管理方法を指定するためのプロパティがサポートされています。 -
getTransaction
-
forceResume
およびforceSuspend
-
begin
-
-
weblogic.transaction.Transaction
(javax.transaction.Transaction
を拡張)WebLogic JTAトランザクション・オブジェクトでは、ユーザーがトランザクション・プロパティを取得および設定できるようにするこのインタフェースがサポートされています。
このインタフェースには、以下のメソッドがあります。
-
setName
およびgetName
-
addProperties
、setProperty
、getProperty
、およびgetProperties
-
setRollbackReason
およびgetRollbackReason
-
getHeuristicErrorMessage
-
getXID
およびgetXid
-
getStatusAsString
-
getMillisSinceBegin
-
getTimeToLiveMillis
-
isTimedOut
-
-
weblogic.transaction.TransactionHelper
このクラスを使用すると、現在のトランザクション・マネージャおよびトランザクションを取得できます。
TxHelper
のかわりに使用されます。このインタフェースには、以下の静的メソッドがあります。
-
getTransaction
-
getUserTransaction
-
getTransactionManager
-
-
weblogic.transaction.TxHelper
(非推奨です。かわりにTransactionHelper
を使用してください)このクラスを使用すると、現在のトランザクション・マネージャおよびトランザクションを取得できます。
このインタフェースには、以下の静的メソッドがあります。
-
getTransaction
、getUserTransaction
、getTransactionManager
-
status2String
-
-
weblogic.transaction.XAResource
(javax.transaction.xa.XAResource
を拡張)このクラスを使用すると、XAリソースをリストから削除できます。
このインタフェースには、次のメソッドがあります。
-
getDelistFlag
-
-
weblogic.transaction.nonxa.NonXAResource
このインタフェースを使用すると、
javax.transaction.xa.XAResource
インタフェースをサポートしていないリソースを簡単にWebLogic Serverトランザクション・マネージャに統合できます。トランザクション・マネージャでは、非XAリソースが分散トランザクションに参加することを許可する、最後のエージェントによる2フェーズ・コミットの最適化のバリエーションがサポートされています。プロトコルは、非XAリソースに対して2フェーズ・コミットを発行し、その処理の結果を使用してトランザクションのコミットの決定を行います。
javax.transaction
インタフェースおよびjavax.transaction.xa
インタフェースに対するWebLogicの拡張機能の詳細は、Oracle WebLogic Server Java APIリファレンスの
weblogic.transactionパッケージのサマリーに関する項を参照してください。