2016-10-08 184 views
1

我有一个OSGi项目,其中包含多个包含JPA模型类的bundle以及相应的persistence.xml。所有PU都使用JTA作为它的事务类型并连接到同一个数据库(它们使用相同的DataSource)。JPA多持久性持久性单元和JTA事务

当操作实体时,我使用不同的EntityManagers,只要我使用XADataSource,一切工作正常。我现在的想法是,因为他们使用相同的数据库,并且相同的事务管理器XA事务不应该是必需的。虽然如果我切换到一个普通的DataSource,但在回滚的情况下我开始看到不一致。

我查看了规格,但找不到与此相关的任何内容。有没有人有指示是否需要XA交易作为这种设置的一部分?

感谢, 菲利普

回答

1

如果使用不同的持久性单元,然后每次都会有它自己的数据库连接。所以即使你使用相同的DataSource,他们也不会使用同一个事务。所以我认为这就是为什么在回滚期间你可能会遇到问题。

在jta事务可以跨越不同的连接,所以它的工作原理。

+0

谢谢,这听起来很合理。很高兴在官方规格中的某个地方看到这一点。它总是很难让这些东西在OSGi中工作,所以你永远不知道它是由于设置还是应该以这种方式工作:) – smigfu

+0

OSGi中的jpa和jta的主题非常复杂(仅部分原因是因为OSGi的)。由于需要考虑很多事情,因此不知道如何改进。 –