第 5 章 使用 Narayana 事务管理器

本节介绍了通过实施 javax.transaction.UserTransaction 接口、org.springframework.transaction.PlatformTransactionManager 接口或 javax.transaction.Transaction Manager 接口来使用 Narayana 事务管理器。您选择的要使用的接口取决于应用程序的需求。在本章最后,讨论获取 XA 资源的问题。这些信息被组织如下:

有关 Java 事务 API 详情,请查看 Java 事务 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 方法的描述

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()
自定义当前事务的超时,以秒数为单位。如果在指定超时内没有解决事务,则事务管理器会自动回滚。