【问题标题】:jta and non jta in pepe中的jta和非jta
【发布时间】:2012-06-03 06:56:52
【问题描述】:

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

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

【问题讨论】:

    标签: jpa jta


    【解决方案1】:
    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链接了解更多详情。

    【讨论】:

    • 您知道是否可以安全地为两个持久性单元使用相同的数据源吗?我试过了,似乎工作正常..
    • @JaqenH'ghar 这取决于供应商,可能很少有人支持它。可以参考这里-stackoverflow.com/a/3218191/366964;这解释了差异及其适用的地方。
    【解决方案2】:

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

    【讨论】:

    • 似乎某些提供商优化了使用非 jta 数据源来执行不需要包含在事务中的查询。下面的 URL 有一个示例 webspherepersistence.blogspot.in。寻找有关其工作原理以及是否有效的清晰度。
    • stackoverflow.com/questions/3217586/… - 一些提供商甚至允许同时声明 jta-datasource 和 non-jta-datasource 并使用后者通过非 JTA 连接优化读取(即不会关联到正在进行的 JTA 事务)
    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 2015-02-26
    • 2017-03-05
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多