2.3. Suspending and Resuming a Transaction
The JTA supports the concept of a thread temporarily suspending and resuming transactions to enable it to perform non-transactional work. The
suspend
method is called to temporarily suspend the current transaction associated with the calling thread. If the thread is not associated with any transaction, a null
object reference is returned; otherwise, a valid Transaction
object is returned. The Transaction
object can later be passed to the resume
method to reinstate the transaction context.
The
resume
method associates the specified transaction context with the calling thread. If the transaction specified is valid, the transaction context is associated with the calling thread. Otherwise, the thread is not associated with any transaction.
Note
If the
resume
method is invoked when the calling thread is already associated with another transaction, the Transaction Manager throws the IllegalStateException
exception.
Transaction tobj = TransactionManager.suspend(); .. TransactionManager.resume(tobj);
Note
JBossJTA supports allowing a suspended transaction to be resumed by a different thread, even though this feature is not required by the JTA standards.
When a transaction is suspended, the application server de-register and free up the resources that related to the suspended transaction. When a resource is de-listed this triggers the Transaction Manager to inform the resource manager to disassociate the transaction from the specified resource object. When the application’s transaction context is resumed, the application server must give the transaction back its resources. Enlisting a resource as a result of resuming a transaction triggers the Transaction Manager to inform the resource manager to re-associate the resource object with the resumed transaction.