为了避免XA开销,我在项目A中添加了一些表名,并将其推出到与项目B相同的mysql数据库中,这样我就可以使用相同的连接 - 并希望获得完整的原子性等。
项目A和B虽然具有非常不同的会话工厂配置。我有一个为项目B配置的HibernateTransactionManager,而A只是使用 TransactionSynchronizationManager.hasResource(sessionFactoryA) 用于加入事务的OSiV样式代码。
这是否在概念上有效?我只是在A中尝试了一个断点,然后等待,然后继续,超时导致B回滚,但A仍然提交!!?
是什么给出的?谢谢你的帮助。
答案 0 :(得分:2)
即使两组实体都驻留在同一个数据库中,您仍然使用两个不同的事务管理器配置Spring。因此,最终会出现重叠但完全独立的事务,每个事务都使用不同的数据库连接。
为了使交易正常运作,您需要使用一个交易管理器,并通过该交易管理器发送所有交易操作。
答案 1 :(得分:1)
根据您当前的设置,我担心您需要JtaTransactionManager
(12.2.8. Transaction management strategies部分)。如果您想避免使用XA,则需要使用单个且唯一的连接。