OpenEJB不能使用javax.persistence.jtaDataSource

时间:2011-09-28 07:50:40

标签: jpa openejb

以下配置适用于WebLogic,但在OpenEJB中,它会引发错误“javax.naming.NameNotFoundException:Name”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中使用它,有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:2)

完全不确定EclipseLink如何处理javax.persistence.jtaDataSource属性。我必须假设它是某种类型的JNDI查找,但是它们如何做到这一点具有令人难以置信的意义。例如,如果它们以java:comp/env/为前缀,则会显着改变语义。

也许尝试重写javax.persistence.jtaDataSource以使用OpenEJB全局JNDI名称作为数据源。因此,在jndi.properties文件中,添加

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

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

另外,应该有一个日志声明说'jdbc / AppDB.provider'不是数据源支持的属性。可能最好删除该属性。