Show Table of Contents
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
suspendmethod is called to temporarily suspend the current transaction associated with the calling thread. If the thread is not associated with any transaction, a
nullobject reference is returned; otherwise, a valid
Transactionobject is returned. The
Transactionobject can later be passed to the
resumemethod to reinstate the transaction context.
resumemethod 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.
resumemethod is invoked when the calling thread is already associated with another transaction, the Transaction Manager throws the
Transaction tobj = TransactionManager.suspend(); .. TransactionManager.resume(tobj);
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-registers and frees up the resources that are related to the suspended transaction. When a resource is de-listed, the Transaction Manager informs the resource manager and the resource manager disassociates 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.