1

以下配置对于 WebLogic 来说是可以的,但在 OpenEJB 中会引发错误“javax.naming.NameNotFoundException:未找到名称“AppDB”。”

如果我删除了属性 javax.persistence.jtaDataSource,它就可以工作。为什么要设置 2 个重复的数据源?因为它是 Eclipselinks 的一个错误(参见http://bugs.eclipse.org/246126

<persistence-unit name="app1" transaction-type="JTA">
  <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  <jta-data-source>AppDB</jta-data-source>

  <properties>
    <property name="javax.persistence.jtaDataSource" value="AppDB" />
  </properties>       
</persistence-unit>

以下是jndi.properties

java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory
openejb.validation.output.level=VERBOSE
openejb.nobanner=false
jdbc/AppDB = new://Resource?type=DataSource
jdbc/AppDB.provider = org.eclipse.persistence.jpa.PersistenceProvider 
jdbc/AppDB.JdbcDriver = oracle.jdbc.OracleDriver
jdbc/AppDB.JdbcUrl = jdbc:oracle:thin:@xx.xx.xx.xx:xxxx:xxxx
jdbc/AppDB.JtaManaged = false
jdbc/AppDB.UserName = xxxx
jdbc/AppDB.Password = xxxx

因为这是其他团队打包的jar,我无法更改内容,但我仍然想在我的OpenEJB中使用它,有什么建议吗?谢谢。

4

1 回答 1

2

完全不确定 EclipseLink 如何处理该javax.persistence.jtaDataSource属性。我不得不假设这是某种 JNDI 查找,但他们如何做到这一点具有难以置信的意义。java:comp/env/例如,如果它们预先添加,则会显着改变语义。

也许尝试覆盖javax.persistence.jtaDataSource为您的数据源使用 OpenEJB 全局 JNDI 名称。所以在你的jndi.properties文件中,添加

app1.javax.persistence.jtaDataSource = openejb:Resource/jdbc/AppDB

绝对让我知道这是否有效。即使 JPA 提供者实际使用了该属性,这似乎也是添加到 OpenEJB 的一个很好的特性。修复无效的 JNDI 名称可能非常方便。

附带说明一下,应该有一个日志语句说“jdbc/AppDB.provider”不是数据源支持的属性。可能最好删除该属性。

于 2011-10-08T23:00:19.020 回答