2.5. Resource Enlistment
Transactional resources, such as database connections, are typically managed by the application server in conjunction with some resource adapter, and optionally, with connection pooling optimization. In order for an external transaction manager to coordinate transactional work performed by the resource managers, the application server must enlist and de-list the resources used in the transaction. These resources (participants) are enlisted with the transaction so that they can be informed when the transaction terminates.
As stated previously, the JTA is much more closely integrated with the XA concept of resources than the arbitrary objects. For each resource in use by the application, the application server invokes the
enlistResource
method with an XAResource
object which identifies the resource in use. See
for details on how the implementation of the XAResource
can affect recovery in the event of a failure.
The enlistment request causes the transaction manager to inform the resource manager to start associating the transaction with the work performed through the corresponding resource. The transaction manager is responsible for passing the appropriate flag in its
XAResource.start
method call to the resource manager.
The
delistResource
method is used to dissociate the specified resource from the transaction context in the target object. The application server invokes the method with two parameters:
- An
XAResources
object, which represents the resource. - A flag to indicate whether the operation is due to the transaction being suspended (
TMSUSPEND
), a portion of the work has failed (TMFAIL
), or a normal resource release by the application (TMSUCCESS
).
The de-list request causes the transaction manager to inform the resource manager to end the association of the transaction with the target
XAResource
. The flag value allows the application server to indicate whether it intends to come back to the same resource, in which case the resource states must be kept intact. The transaction manager passes the appropriate flag value in its XAResource.end
method call to the underlying resource manager.