2.3. トランザクションの停止および再開
JTAは、一時的にトランザクションを停止、再開する スレッドという概念に対応しており、トランザクショナルな作業以外を実行することができます。
suspend
メソッドを呼出し、呼出中のスレッドに紐付いた現在のトランザクションを一時的に停止します。このスレッドがどのトランザクションとも紐付いていない場合、null
オブジェクト参照が返されます。そうでない場合は、有効なTransaction
オブジェクトが返されます。Transaction
オブジェクトはその後、resume
メソッドに渡されトランザクションコンテキストを復帰させます。
resume
メソッドは、指定したトランザクションコンテキストと呼出中のスレッドを紐付けます。指定されたトランザクションが有効な場合、トランザクションコンテキストは呼出中のスレッドと関連付けられます。そうでない場合は、スレッドはどのトランザクションとも紐付けられません。
注記
呼出中のスレッドがすでに別のトランザクションと関連づいている場合に
resume
メソッドが呼び出されるとトランザクションマネージャはIllegalStateException
例外をスローします。
Transaction tobj = TransactionManager.suspend(); .. TransactionManager.resume(tobj);
注記
この機能は JTA 規格で必須ではないにも拘らず、JBossJTA では停止されたトランザクションを別のスレッドで再開することが可能です。
トランザクションが停止されると、アプリケーションサーバーは、停止中のトランザクションに関連するリソースの登録を解除し、空きを作ります。リソースがリストから外されると、トランザクションマネージャがリソースマネージャに対し指定のリソースオブジェクトからトランザクションの関連をなくすよう通知します。アプリケーションのトランザクションコンテキストが再開されると、アプリケーションサーバーはトランザクションに対してリソースを戻さなければなりません。トランザクションの再開によりリソースの登録をすると、トランザクションマネージャはリソースマネージャに対し、リソースオブジェクトと再開されたトランザクションを再度関連付けるように通知します。