Java 事务 API (JTA)

Java™ 事务 API (JTA) 可用于协调对多个资源管理器的事务更新。

您可以使用 Java 事务 API (JTA) 来协调对 CICS® 资源和其他第三方资源管理器 (例如 Liberty JVM 服务器中的类型 4 数据库驱动程序连接) 的事务更新。 在此场景中, Liberty 事务管理器是事务协调程序,而 CICS 工作单元是下级工作单元,就像事务源自 CICS 系统之外一样。

注: 如果您具有 JVM 概要文件选项 com.ibm.cics.jvmserver.wlp.jta.integration=false 并使用 autoconfigure ,或者正在手动配置 server.xml 并包含 <cicsts_jta Integration="false"/> 元素,那么 CICS 工作单元将不会参与 JTA 事务,而是单独落实或回滚。

使用 CICS 数据源与本地 Db2® 数据库的类型 2 驱动程序连接可使用 CICS Db2 连接进行访问。 不需要使用 JTA 来协调对其他 CICS 资源的更新。

在 JTA 中,创建 UserTransaction 对象以封装和协调对多个资源管理器的更新。 以下代码片段显示如何创建和使用用户事务:
InitialContext ctx = new InitialContext();
UserTransaction tran = (UserTransaction)ctx.lookup("java:comp/UserTransaction");

DataSource ds = (DataSource)ctx.lookup("jdbc/SomeDB");
Connection con = ds.getConnection();

// Start the User Transaction
tran.begin();

// Perform updates to CICS resources via JCICS API and
// to database resources via JDBC/SQLJ APIs

if (allOk) {
    // Commit updates on both systems
    tran.commit();
} else {
    // Backout updates on both systems
    tran.rollback();
}
如果您正在使用 OSGi 应用程序,请确保在 MANIFEST.MF:
Import-Package: javax.transaction;version="[1.1,2)"

缺省情况下,您的开发环境可能不会突出显示此依赖关系。 建议显式检查并确保指定最低版本的 1.1 。 如果允许运行时环境解析依赖关系本身,那么它可能会解析为来自底层 JRE 的包的较低版本,并与 Liberty 运行时发生冲突。

与 CICS 工作单元不同,必须使用 begin() 方法显式启动 UserTransaction 。 调用 begin() 会导致 CICS 落实在启动 UserTransaction之前可能已进行的任何更新。 通过调用 commit()rollback() 方法或在 Web 应用程序终止时由 Web 容器终止 UserTransaction 。 当 UserTransaction 处于活动状态时,程序无法调用 JCICS Task commit()rollback() 方法。

JCICS 方法 Task.commit()Task.rollback() 在 JTA 事务上下文中无效。 如果尝试执行任何一项操作,系统将抛出 InvalidRequestException。

Liberty 缺省值是等到创建第一个 UserTransaction 之后再尝试恢复任何不确定的 JTA 事务。 但是,一旦 Liberty JVM 服务器初始化完成, CICS 将立即启动事务恢复。 如果 JVM 服务器安装为已禁用,那么恢复将在设置为已启用时运行。

如果要使用 EJB ,请参阅 在 EJB 中使用 JTA 事务