2.3. トランザクションの停止および再開

JTAは、一時的にトランザクションを停止、再開する スレッドという概念に対応しており、トランザクショナルな作業以外を実行することができます。suspend メソッドを呼出し、呼出中のスレッドに紐付いた現在のトランザクションを一時的に停止します。このスレッドがどのトランザクションとも紐付いていない場合、null オブジェクト参照が返されます。そうでない場合は、有効なTransaction オブジェクトが返されます。Transaction オブジェクトはその後、resume メソッドに渡されトランザクションコンテキストを復帰させます。
resume メソッドは、指定したトランザクションコンテキストと呼出中のスレッドを紐付けます。指定されたトランザクションが有効な場合、トランザクションコンテキストは呼出中のスレッドと関連付けられます。そうでない場合は、スレッドはどのトランザクションとも紐付けられません。

注記

呼出中のスレッドがすでに別のトランザクションと関連づいている場合にresume メソッドが呼び出されるとトランザクションマネージャはIllegalStateException 例外をスローします。
Transaction tobj = TransactionManager.suspend();
..
TransactionManager.resume(tobj);

注記

この機能は JTA 規格で必須ではないにも拘らず、JBossJTA では停止されたトランザクションを別のスレッドで再開することが可能です。
トランザクションが停止されると、アプリケーションサーバーは、停止中のトランザクションに関連するリソースの登録を解除し、空きを作ります。リソースがリストから外されると、トランザクションマネージャがリソースマネージャに対し指定のリソースオブジェクトからトランザクションの関連をなくすよう通知します。アプリケーションのトランザクションコンテキストが再開されると、アプリケーションサーバーはトランザクションに対してリソースを戻さなければなりません。トランザクションの再開によりリソースの登録をすると、トランザクションマネージャはリソースマネージャに対し、リソースオブジェクトと再開されたトランザクションを再度関連付けるように通知します。