第 5 章 使用 Narayana 事务管理器
本节通过实施 javax.transaction.UserTransaction
接口、org.springframework.transaction.PlatformTransactionManager
接口或 javax.transaction.Transaction
接口来使用 Narayana 事务管理器的详细信息。您选择使用哪个接口取决于应用程序的需求。在本章的结尾处,可以讨论列出 XA 资源的问题解决办法。该信息组织如下:
有关 Java 事务 API 详情,请查看 Java Transaction API (JTA) 1.2 规格和 Javadoc。
5.1. 使用 UserTransaction 对象
实施 javax.transaction.UserTransaction
接口以进行事务处理。也就是说,用于开始、提交或回滚事务。这是您很可能直接在应用程序代码中使用的 JTA 接口。但是,UserTransaction
接口只是分解事务的方法之一。有关您可以分离事务的不同方法的讨论,请参阅 第 9 章 编写使用事务的 Camel 应用程序。
5.1.1. UserTransaction 接口的定义
JTA UserTransaction
接口定义如下:
public interface javax.transaction.UserTransaction { public void begin(); public void commit(); public void rollback(); public void setRollbackOnly(); public int getStatus(); public void setTransactionTimeout(int seconds); }
5.1.2. 用户事务方法的描述
UserTransaction
接口定义了以下方法:
- begin()
- 启动新的事务,并将其与当前线程相关联。如果有任何 XA 资源与此事务相关联,则事务会隐式成为 XA 事务。
- commit()
正常完成当前事务,以便所有待处理的更改变得永久。提交后,不再有与当前线程关联的事务。
注意但是,如果当前事务仅标记为回滚,则当称为
commit ()
时实际会回滚事务。- rollback()
- 立即中止事务,以便丢弃所有待处理的更改。回滚后,不再有与当前线程关联的事务。
- setRollbackOnly()
- 修改当前事务的状态,以便回滚是唯一可能的结果,但尚未执行回滚。
- getStatus()
返回当前事务的状态,可以是以下整数值之一,如
javax.transaction.Status
接口中定义的:-
STATUS_ACTIVE
-
STATUS_COMMITTED
-
STATUS_COMMITTING
-
STATUS_MARKED_ROLLBACK
-
STATUS_NO_TRANSACTION
-
STATUS_PREPARED
-
STATUS_PREPARING
-
STATUS_ROLLEDBACK
-
STATUS_ROLLING_BACK
-
STATUS_UNKNOWN
-
- setTransactionTimeout()
- 自定义当前事务的超时时间,以秒为单位指定。如果在指定的超时时间内没有解决事务,事务管理器会自动回滚。