The Java Transaction API includes a javax.transaction.Synchronization
interface, which issues notifications before and after a transaction is completed. Objects implementing this interface can be registered with a Transaction object. Just before the transaction’s completion process begins, the TransactionManager
calls the Synchronization
object’s beforeCompletion()
method. After the transaction is committed or rolled back, the TransactionManager
calls the Synchronization
object’s afterCompletion()
method.
The beforeCompletion()
method is usually used to perform any last-minute work. For example, an application might use this callback to write some built-up state to the database.
The afterCompletion()
method is called after the commit or rollback, and passes in a status code indicating which of those outcomes occurred. Applications can use this callback to clean up any state or resources that were used during the transaction.
To register synchronizations directly, your code must use the TransactionManager
to get a hold of the Transaction object. J2EE components do not have explicit access to the TransactionManager
interface, so J2EE provides other ways for its components to receive synchronization callbacks. Specifically, stateful session EJBs can implement the javax.ejb.SessionSynchronization
interface, which includes methods for receiving synchronization notifications.