pe中的jta和non jta

时间:2012-05-29 02:58:59

标签: jpa jta

如果我在persistence.xml中提及jta和非jta数据源,提供者将如何识别何时以及何时使用?有没有办法在某些情况下强制使用非jta数据源?我正在使用IBM支持的OpenJPA。

某些提供程序允许声明jta-datasource和非jta-datasource,并使用后者通过非JTA连接进行优化读取(即,不会与正在进行的JTA事务关联)。这是如何工作的,如果OpenJPA支持这个? Difference between a "jta-datasource" and a " resource-local " datasource?

2 个答案:

答案 0 :(得分:2)

  1. 您可能想要的是为数据源配置单独的持久性单元&然后注入。

    <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;

  2. 否则,您可以根据需要使用适当的数据源手动构建EntityManagerFactory。您可以参考this链接了解详情。

答案 1 :(得分:0)

很难理解为什么在persistence.xml中提到jta和非jta数据源。你不需要声明两者,你可能需要声明一个,jta或非jta数据源。如果你使用jta数据源,你将在你的应用服务器中配置它,并在你的persistence.xml中声明。如果你能'使用jta datasource,您将在persistence.xml中配置JDBC连接。