微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 JTA 中通过单个事务提交多个 XAResource

如何解决在 JTA 中通过单个事务提交多个 XAResource

我有一个场景,我创建了多个 XAConnections 到同一个数据库,从而创建了多个 XAResources。但是由于所有 XAResource 都是为单个数据库创建的,因此我使用相同的事务分支(单个 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);
}

Code reference

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

感谢任何帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。