5.2. 使用 TransactionManager 对象
使用 javax.transaction.TransactionManager
对象的最常见方法是将它传递到框架 API,例如 Camel JMS 组件。这可让框架在您进行事务后查找。有时,您可能想要直接使用 TransactionManager
对象。当您需要访问高级事务 API(如 suspend()
和 resume()
方法)时,这很有用。
5.2.1. TransactionManager 接口的定义
JTA TransactionManager 接口有以下定义:
interface javax.transaction.TransactionManager { // Same as UserTransaction methods public void begin(); public void commit(); public void rollback(); public void setRollbackOnly(); public int getStatus(); public void setTransactionTimeout(int seconds); // Extra TransactionManager methods public Transaction getTransaction(); public Transaction suspend() ; public void resume(Transaction tobj); }
5.2.2. TransactionManager 方法的描述
TransactionManager
接口支持 UserTransaction
接口中找到的所有方法。您可以使用 TransactionManager
对象进行事务分离。另外,TransactionManager
对象支持这些方法:
- getTransaction()
-
获取对当前事务的引用,这是与当前线程关联的事务。如果没有当前事务,此方法会返回
null
。 - suspend()
将当前的事务从当前线程分离,并返回对事务的引用。调用此方法后,当前线程不再有事务上下文。此时您所做的所有工作都不会在事务上下文中不再执行。
注意并非所有事务管理器都支持挂起事务。但是,Narayana 支持此功能。
- resume()
- 将暂停的事务重新关联到当前线程上下文。在调用此方法后,事务上下文会被恢复,并在事务上下文中完成这个点后执行的所有工作。