情况:
我们有一个运行在WAS 8.5上的web应用程序(Spring,Hibernate),运行在3个不同的数据库上。他们在两个不同的地理位置。位置A:主数据DB (XA资源)。位置B: MD副本DB (R/O用途,非XA资源)+操作DB (XA资源)。
我们使用Last Participant Support,因此我们可以在全局事务(JTA)中包含MD副本数据库。使用服务方法上的注释来划分事务(服务方法反过来使用配置为访问这3个DB中的任何一个的服务和/或DAO)。只有几个操作需要同时写入操作数据库和MD数据库。我们打算去掉它们(作为分布式事务)。
问题:
我们希望在不重写应用程序的情况下摆脱XA (因此,只使用非XA JDBC驱动程序)。WAS中是否有全球事务的替代方案?ActivitySessions是否适用?如果是这样的话,是怎么做的?
发布于 2017-02-26 02:47:03
由于Last Participant Optimization ( LPO ),仍然可以将全局事务与非XA资源一起使用,但是使用LPO,每个全局事务只能使用1个非XA资源。因此,您仍然可以使用1个非XA数据源,并将其放在全局事务中,但是1资源全局事务从一开始就违背了使用全局事务的目的。
对于JDBC资源,拥有XA数据源是在没有LPO的情况下参与多资源全局事务的唯一方式。例如,要让2个数据源参与同一全局事务,则其中至少必须有一个是XADataSource。
发布于 2017-02-27 02:31:33
谢谢你的回答。
这正是我所怀疑的,但我很想知道是否有其他事务管理器或事务管理器配置/模式以不同的方式运行(可能是ActivitySessions?)。
我知道,对于分布式事务管理,除了XA/2PC之外,还有不同的方法。也许他们提供了不同的或更低的保证1。
致以敬意,
1
https://stackoverflow.com/questions/42454944
复制相似问题