是否仍在使用XA / JTA交易?

时间:2011-12-07 19:53:58

标签: mysql postgresql jta distributed-transactions xa

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

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

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

2 个答案:

答案 0 :(得分:6)

XA有几点:

  • 它完成了它的工作并且没有可接受的选择。如果必须使用分布式事务,则无法绕过XA。
  • 这是“标准技术”,没有炒作,没有营销。因此它飞得低于大多数人的雷达。
  • 即使使用它,Jack Application Developer也很有可能不知道它,因为大多数部分通常隐藏在某些框架中。
  • 对XA的需求确实有所下降,因为面向服务的体系结构(SOA)和消息队列是大肆宣传的体系结构范例,尝试以避免子系统的这种紧密耦合。虽然至少SOA似乎也在下降得很好。 ; - )
  • XA经常被遗忘的部分是在事务实际中断时使用的必需代码和工具。在XA中有一些郊区,事务管理器在相当长的一段时间内既不能提交也不能回滚所有资源。这一点只会增加“只有当真的必须”指向时才使用它。

答案 1 :(得分:1)

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

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

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