【问题标题】:ejb3-using-2-persistence-units-within-a-transactionejb3-using-2-persistence-units-within-a-transaction
【发布时间】:2010-09-01 04:04:49
【问题描述】:

我在使用以下技术堆栈从同一事务中连接到 2 个持久性单元时遇到问题,

WLS 10.3.x, Eclipselink 2.1, Oracle 11g JDBC driver, Informix 10 JDBC driver

使用来自此 SO post 的输入,我使 oracle 数据源符合 XA 和 Informix ds“模拟 2 阶段提交”并且事情开始起作用。但是,现在我遇到了一个奇怪的问题。

我正在使用独立的 java 客户端来调用我的 ejb 3 SLSB,后者又调用 JPA 实体。我面临的问题是它第一次工作,第二次它没有抛出任何异常,但没有更新任何一个数据库中的数据,第三次它抛出一个异常,说明“事务已经提交”,就好像应用程序一样服务器 JTA 事务管理器保留原始事务上下文。请注意,这 3 次调用是独立且连续的,其中每次调用都在客户端退出客户端进程时完成。问题非常一致,每次我重新启动应用服务器时都会以完全相同的顺序发生。

感谢任何意见!

【问题讨论】:

  • 请出示您的持久性 XML 并说明哪个数据源是 XA
  • Oracle 是 XA 而 Informix ix 是非 XA。 Persistence.xml 内容如下。

标签: jpa jakarta-ee weblogic jta java-ee-5


【解决方案1】:
<persistence-unit name="TopLinkDB" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/oracleDS</jta-data-source>
    <class>com.home.domain.Property</class>
    <properties>
        <property name="eclipselink.target-server" value="WebLogic_10" />
    </properties>
</persistence-unit>     
<persistence-unit name="TopLinkINFO" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/infoDS</jta-data-source>
    <class>com.home.domain.GlobalNumber</class>
    <properties>
        <property name="eclipselink.target-server" value="WebLogic_10" />
    </properties>
</persistence-unit>

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 2022-12-27
    • 2022-11-09
    • 1970-01-01
    • 2016-07-07
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多