Java 事务 API (JTA)
Java™ 事务 API (JTA) 可用于协调对多个资源管理器的事务更新。
您可以使用 Java 事务 API (JTA) 来协调对 CICS® 资源和其他第三方资源管理器 (例如 Liberty JVM 服务器中的类型 4 数据库驱动程序连接) 的事务更新。 在此场景中, Liberty 事务管理器是事务协调程序,而 CICS 工作单元是下级工作单元,就像事务源自 CICS 系统之外一样。
- 6.1如果您有 JVM 配置文件选项com.ibm.cics.jvmserver.wlp.jta.integration=false并使用自动配置
- 6.2 后来 如果设置了 JVM 配置文件选项 com.ibm.cics.jvmserver.wlp.jta.integration=false
- 如果您手动配置server.xml并包括<cicsts_jta Integration="false"/>元素
使用 CICS 数据源与本地 Db2® 数据库的类型 2 驱动程序连接可使用 CICS Db2 连接进行访问。 不需要使用 JTA 来协调对其他 CICS 资源的更新。
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();
}
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 事务 。