3.4.6 トランザクションマネージャの取得

トランザクションマネージャ(javax.transaction.TransactionManagerまたはjavax.transaction.Transaction)は,トランザクションを管理するためのAPIを提供します。トランザクションマネージャのAPIを使用するフレームワークを使用する場合は,JNDIを使用してトランザクションマネージャを取得できます。トランザクションマネージャを取得するには,「java:comp/TransactionManager」の名前でルックアップします。

アプリケーションサーバがサポートするトランザクションマネージャのAPI,およびSynchronizationを使用する場合の注意について説明します。

<この項の構成>
(1) サポートするAPI
(2) トランザクションマネージャを使用する場合の注意事項
(3) Synchronizationを使用する場合の注意事項

(1) サポートするAPI

アプリケーションサーバがサポートするトランザクションマネージャのAPIを次の表に示します。

表3-16 アプリケーションサーバがサポートするトランザクションマネージャのAPI

インタフェースメソッド使用可否
javax.transaction.TransactionManagerbegin
commit
getStatus
getTransaction
resume
rollback
setRollbackOnly
setTransactionTimeout
suspend
javax.transaction.Transactioncommit
delistResource
enlistResource
getStatus
registerSynchronization
rollback
setRollbackOnly

(凡例) ○:使用できる -:使用できない

注 使用できないメソッドを使用しようとすると,javax.transaction.SystemExceptionがスローされます。


(2) トランザクションマネージャを使用する場合の注意事項

ルックアップで取得したトランザクションマネージャを使用する場合,トランザクション管理に含める処理(データベースのコネクションの取得,使用,解放など)は,トランザクションの開始後から決着前,または開始後から中断前および再開後から決着前の範囲内で実装してください。トランザクションの開始前や決着後,中断中に実装された処理はトランザクション管理に含まれません。

(3) Synchronizationを使用する場合の注意事項

トランザクション(javax.transaction.Transaction)のregisterSynchronizationメソッドで登録するSynchronization(javax.transaction.Synchronization)のbeforeCompletionメソッド,およびafterCompletionメソッドでは,J2EEサーバが提供するサービスを使用できません。使用できないサービスの例を次に示します。

これらのサービスのうちリソースアクセスを行った場合,リソースアクセスでトランザクションマネージャが管理するトランザクションの一部として管理されないため,不整合が発生することがあります。リソースアクセスをする場合は,フレームワークの責任で,フレームワークがリソースに対して直接トランザクションを制御するようにしてください。

上記のような注意事項があるため,ユーザプログラムでSynchronizationを利用することは推奨しません。ユーザプログラムからトランザクション決着のタイミングを利用したい場合には,EJBのjavax.ejb.SessionSynchronizationを使用してください。