我有一个应用程序可以交互多个数据库和一些自定义服务。对于某些操作,我需要类似事务的行为,其中一组更改要么跨所有数据库/服务提交,要么在发生错误时回滚。
X / Open组和Java JTA的XA标准似乎使用两阶段提交过程解决了这个问题。一些数据库(mySQL,Postgres,Oracle)支持这些接口,但我觉得它们不经常使用或不受欢迎。真的吗?如果是这样,为什么?
我知道在mySQL上有一些与XA有关的复制相关问题。此外,XA事务可能会明显变慢。还有其他原因导致XA不受欢迎/不常见吗?
答案 0 :(得分:6)
XA有几点:
答案 1 :(得分:1)
它们仍然用于您提到的内容。如果其中一个数据库上的操作失败,那么它将全部回滚。
它们较慢,因此如果不需要XA(即它是自主操作或非事务操作),则不应使用它。
在处理多个数据库时,Java EE容器甚至可能会强制您使用XA数据源。