首页 > 解决方案 > 通过 JTA 中的单个事务提交多个 XAResource

问题描述

我有一个场景,我创建多个 XAConnections 到同一个数据库,从而创建多个 XAResources。但是由于所有 XAResources 都是为单个数据库创建的,所以我使用相同的事务分支(单个 xid)。

xaDS = getDataSource();
xaCon1 = xaDS.getXAConnection("jdbc_user", "jdbc_password");
xaRes1 = xaCon1.getXAResource();
con1 = xaCon1.getConnection();
stmt1 = con1.createStatement();
xid1 = new MyXid(100, new byte[]{0x01}, new byte[]{0x02});
xaRes1.start(xid1, XAResource.TMNOFLAGS);
stmt1.executeUpdate("insert into test_table1 values (100)");
xaRes1.end(xid, XAResource.TMSUCCESS);
xaCon2 = xaDS.getXAConnection("jdbc_user", "jdbc_password");
xaRes2 = xaCon2.getXAResource();
con2 = xaCon2.getConnection();
stmt2 = con2.createStatement();
if (xaRes2.isSameRM(xaRes1)) {
xaRes2.start(xid1, XAResource.TMJOIN);
stmt2.executeUpdate("insert into test_table2 values (100)");
xaRes2.end(xid1, XAResource.TMSUCCESS);
}

ret = xaRes1.prepare(xid1);
if (ret == XAResource.XA_OK) {
xaRes1.commit(xid1, false);
}

代码参考

我应该在 xaRes2 上提交以保存所做的更改test_table2还是要小心处理xaRes1.commit(xid1, false);

任何帮助表示赞赏!

标签: jta

解决方案


推荐阅读