Java 和 XA 事务挑战

标签 java spring hibernate jakarta-ee transactions

我问这个问题是因为我在谷歌上没有找到一篇好文章可以涵盖我的问题的至少一半。我是事务新手,希望得到答案,该答案简要揭示了 Java EE 世界中与 XA 事务相关的主要困难。

我的问题

  1. Java 中的 XA 事务有哪些常见困难。
  2. XA 事务在与不同框架(最流行的 Java EE)集成时遇到哪些困难?例如,如果第一个数据库通过 Hibernate 工作,第二个数据库通过 MyBatis 工作,那么配置 XA 事务是否是一个挑战?
  3. 多个数据库供应商的 XA 事务怎么样?例如,第一个数据库 - PostgreSQL,第二个数据库 - H2。
  4. 也许还有其他挑战?
  5. Spring 和 Hibernate 怎么样?

附注

我不希望有人立即回答上述所有问题。如果您可以提供一个问题的答案,甚至提供一些有趣的引用资料,我们非常欢迎!

最佳答案

我一直在生产中使用 XA,这是我的经验。

  • 分布式事务显着增加了事务管理的复杂性:当交易有多个参与者时,更难监控正在发生的情况,更难处理错误和恢复(两阶段提交可能会失败并使交易“不确定”),更难正确配置(有关分布式交易的优化未标准化,例如最后一个参与者优化),最后更难测试。在你走这条路之前,请考虑所有这些。

  • 容器抽象了“数据源”背后的连接池。如果您将持久性框架配置为使用正确的 XA 数据源,它将参与分布式交易。然而,持久性框架依赖于 session 的概念来缓存对数据的更改。您通常无法控制交易中事情何时真正发生。此外,对于缓存,持久性框架需要注册一个钩子(Hook),以便在事务提交时将更改刷新到缓存。对于分布式事务,事件排序和缓存一致性问题变得更难处理。

如果可以的话,不要使用 XA。

关于Java 和 XA 事务挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18428599/

相关文章:

java - Eclipse 中建议方法的标记

java - 在 hql 中将字符串列转换为日期

java - android自定义列表不显示

java - 如何使用 CSS 更改 JavaFX FileChooser 的外观?

java - 无法在JSP中获取上传图像文件的完整路径

java - 检测 TCP 连接重置的方法

java - 如何配置 Spring 使用 @RequestBody 注释将 JSON 反序列化为 BigDecimal

hibernate - 解释 Struts 2、Spring 和 Hibernate 集成的教程

java - @Transactional 不打开 Hibernate 事务

java - NoSuchMethodError : org. hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;