5.3. 使用 Transaction 对象
如果您要暂停/恢复事务,或者需要明确列出资源,您可能需要直接使用 javax.transaction.Transaction
对象。如 第 5.4 节 “解决 XA enlistment 问题” 所述,框架或容器通常会自动处理资源。
5.3.1. Transaction 接口的定义
JTA Transaction
接口具有以下定义:
interface javax.transaction.Transaction { public void commit(); public void rollback(); public void setRollbackOnly(); public int getStatus(); public boolean enlistResource(XAResource xaRes); public boolean delistResource(XAResource xaRes, int flag); public void registerSynchronization(Synchronization sync); }
5.3.2. Transaction 方法的描述
commit ()
, rollback ()
, setRollbackOnly
(), 和 getStatus ()
方法的行为与 UserTransaction
接口的对应方法相同。实际上,UserTransaction
对象是一个方便的打包程序,用于检索当前事务,然后在 Transaction
对象上调用对应的方法。
另外,Transaction
接口定义了以下方法,它在 UserTransaction
接口中没有对应的方法:
- enlistResource()
将 XA 资源与当前事务相关联。
注意这个方法是 XA 事务上下文中的关键重要。使用当前事务代表 XA 事务的功能,可以精确列出多个 XA 资源。另一方面,明确列出资源是微不足道的资源,您通常希望您的框架或容器为您完成此操作。例如,请参阅 第 5.4 节 “解决 XA enlistment 问题”。
- delistResource()
解除指定资源与事务相关的关联。flag 参数可以采用
javax.transaction.Transaction
接口中定义的以下整数值之一:-
TMSUCCESS
-
TMFAIL
-
TMSUSPEND
-
- registerSynchronization()
-
使用当前事务注册
javax.transaction.Synchronization
对象。Synchronization
对象仅在提交准备阶段之前收到回调,并在事务完成后接收回调。