我想在我的 Java 应用程序中使用 Java 事务服务进行分布式事务管理。
我有 3 个不同的数据库,必须使用 3 个不同的 Connection 对象连接到它们。我想在 3 个数据库中分别插入某些数据。 我的要求是应该保持原子性。因此,要么数据应该插入到所有 3 个数据库中,要么不应该插入到任何数据库中。 我在网上搜索了这种交易,并得到了Java Transaction服务。 我可以在这里找到它的API http://java.sun.com/products/jts/javadoc/index.html 但我仍然不明白如何使用它来实现交易。有人可以给我提供 Java 事务服务示例代码或教程的链接吗?
提前致谢, 阿尼凯特·科达里
最佳答案
几点:
- XA 并不是解决此问题的唯一可能的解决方案,尽管它可能是最简单的解决方案,因为它周围的工具已经成熟(搜索 CAP 定理和 BASE - 基本可用的软状态最终一致)。
- XA 事务具有故障模式,并且您仍然可能会在参与的数据库之间出现不一致的情况。
- 您没有说明您正在使用哪个数据库 - 也许其中一个或全部不支持 XA 事务。
- 您不太可能希望在 Java 中使用原始 JTS/JTA API,而是可以使用任何众所周知的 Java 应用程序服务器,因为它们包含事务管理器(使用 JTS/JTA)。
因此,假设您决定使用 Java 应用程序服务器,我建议您使用 Spring、EJB 3.0 或类似的工具进行数据库交互,因为它们将允许您执行声明式事务,这比您自己手动编写事务逻辑要干净得多。
这是一个link Spring 的事务文档。
关于Java事务服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1398099/