java - 具有多个数据库服务器的分布式事务似乎不可靠
问题描述
在谷歌搜索了几天后,我了解了一些关于 JTA 和
然后编写了一个应用程序,它使用 JTA、JDBC 和 MySQL 服务器来执行分布式事务。下面是我的代码。
我们使用 3 个不同的数据库服务器, res1、res2 和 res3(它们是 3 个不同的 XAResources)分别表示它们。
try{
res1.start(xid1, XAResource.TMNOFLAGS);
dao.addEmployee(e, con);
res1.end(xid1, XAResource.TMSUCCESS);
res2.start(xid2, XAResource.TMNOFLAGS);
dao.addDepartment(d, tournamentCon);
res2.end(xid2, XAResource.TMSUCCESS);
res3.start(xid3, XAResource.TMNOFLAGS);
dao.addAsset(a, testCon);
res3.end(xid3, XAResource.TMSUCCESS);
int result1 = res1.prepare(xid1);
int result2 = res2.prepare(xid2);
int result3 = res3.prepare(xid3);
if(result1 == XAResource.XA_OK && result2 == XAResource.XA_OK &&
result3 == XAResource.XA_OK) {
res1.commit(xid1, false);
res2.commit(xid2, false);
res3.commit(xid3, false);
}
}
catch(Exception e){
res1.rollback(xid1);
res2.rollback(xid2);
res3.rollback(xid3);
}
现在,这种方法的问题是:-
假设在 res2.commit 或 res3.commit 期间,有一个异常然后已经完成的提交,即 res1.commit,不能回滚
但我们希望所有这些 trxs 完全完成或根本不完成。
有人可以让我知道该怎么做吗?
仅供参考:我们没有使用任何应用程序服务器。
还请让我知道什么是事务管理器?它是需要明确使用的 as/w 组件还是我发布的代码是所谓的事务管理器。
任何帮助将不胜感激。
解决方案
推荐阅读
- wordpress - 针对特定域的 WordPress 多站点和 301 重定向
- python - any() 的返回值
- python - 编写纸浆约束时遇到问题
- pagination - ngx-owl-carousle-o 分页在 Angular 10 中不起作用
- python - 如何获取数据框行以列出索引号?
- reactjs - 使用 jest 和 redux-mock-store 测试 redux 连接的组件
- firebase - 颤振:从火力基地检索数据
- python - PyCharm 导入与解释器
- flutter - 我想在调用小部件时获得颜色
- node.js - 基于上一个关于 discord.js 依赖的问题