如果我在persistence.xml中提及jta和非jta数据源,提供者将如何识别何时以及何时使用?有没有办法在某些情况下强制使用非jta数据源?我正在使用IBM支持的OpenJPA。
某些提供程序允许声明jta-datasource和非jta-datasource,并使用后者通过非JTA连接进行优化读取(即,不会与正在进行的JTA事务关联)。这是如何工作的,如果OpenJPA支持这个? Difference between a "jta-datasource" and a " resource-local " datasource?
答案 0 :(得分:2)
您可能想要的是为数据源配置单独的持久性单元&然后注入。
<persistence-unit name="JTA_DS" transaction-type="JTA"> <jta-data-source>java:JTA_DS</jta-data-source> </persistence-unit> <persistence-unit name="NON_JTA_DS" transaction-type="RESOURCE_LOCAL"> <non-jta-data-source>java:NON_JTA_DS</non-jta-data-source> </persistence-unit>
现在,您可以为各自的持久性单元创建EnityManager
。
@PersistenceContext(unitName="JTA_DS")
private EntityManager _JTAManager;
@PersistenceContext(unitName="NON_JTA_DS")
private EntityManager _NonJTAManager;
否则,您可以根据需要使用适当的数据源手动构建EntityManagerFactory
。您可以参考this链接了解详情。
答案 1 :(得分:0)
很难理解为什么在persistence.xml中提到jta和非jta数据源。你不需要声明两者,你可能需要声明一个,jta或非jta数据源。如果你使用jta数据源,你将在你的应用服务器中配置它,并在你的persistence.xml中声明。如果你能'使用jta datasource,您将在persistence.xml中配置JDBC连接。