5

我有一个与多个数据库和一些自定义服务交互的应用程序。对于某些操作,我需要类似事务的行为,其中一组更改要么跨所有数据库/服务提交,要么在发生错误时全部回滚。

X/Open 组的 XA 标准和 Java JTA 似乎使用两阶段提交过程准确地解决了这个问题。一些数据库(mySQL、Postgres、Oracle)支持这些接口,但我感觉它们不经常使用或流行度下降。真的吗?如果是这样,为什么?

我知道 mySQL 上的 XA 存在一些与复制相关的问题。此外,XA 事务可能会明显变慢。XA 不受欢迎/不常见还有其他原因吗?

4

2 回答 2

7

XA有几点:

  • 它完成了它的工作,没有公认的替代方案。如果您必须使用分布式事务,那么就无法绕过 XA。
  • 这是“标准技术”,没有炒作,也没有营销。因此,它在大多数人的雷达之下飞行。
  • 即使使用它,Jack Application Developer 也很有可能不知道它,因为大多数部分通常隐藏在某些框架中。
  • 对 XA 的需求确实有所下降,因为面向服务的体系结构 (SOA) 和消息队列是大肆宣传的体系结构范式,它们试图 避免子系统的这种紧密耦合。尽管至少 SOA 似乎也在下降得很好。;-)
  • XA 中经常被遗忘的部分是事务实际中断时使用的所需代码和工具。在 XA 的一些郊区,事务管理器在相当长的一段时间内既不能提交也不能回滚所有资源。这一点只会增加“只有当你真的必须使用它”这一点。
于 2011-12-07T23:11:54.090 回答
1

它们仍然用于您提到的内容。如果对其中一个数据库的操作失败,那么它会全部回滚。

它们速度较慢,因此如果不需要 XA(即它是自主操作或非事务性操作),则不应使用它。

在处理多个 DB 时,Java EE 容器甚至可能会强制您使用 XA 数据源。

于 2011-12-07T20:00:17.450 回答