0

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

一些提供程序允许同时声明 jta-datasource 和 non-jta-datasource 并使用后者通过非 JTA 连接进行优化读取(即,不会与正在进行的 JTA 事务相关联)。这是如何工作的以及 OpenJPA 是否支持这一点? “jta-datasource”和“resource-local”数据源之间的区别?

4

2 回答 2

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根据需要使用适当的数据源手动构建。您可以参考链接了解更多详情。

于 2012-05-29T05:35:25.440 回答
0

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

于 2012-05-29T03:51:15.890 回答