Jpa OpenEJB无法使用javax.persistence.jtaDataSource

Jpa OpenEJB无法使用javax.persistence.jtaDataSource,jpa,openejb,Jpa,Openejb,以下配置对于WebLogic是可以的,但在OpenEJB中会引发错误“javax.naming.NameNotFoundException:Name“AppDB”notfound” 如果我删除了javax.persistence.jtaDataSource属性,它就可以工作了。为什么要设置2个重复的数据源?因为它是日食的一种虫子(见) 因为这是一个由其他团队打包的jar,我无法更改内容,但我仍然希望在OpenEJB中使用它,有什么建议吗?谢谢。完全不确定EclipseLink如何处理javax.

以下配置对于WebLogic是可以的,但在OpenEJB中会引发错误“javax.naming.NameNotFoundException:Name“AppDB”notfound”

如果我删除了javax.persistence.jtaDataSource属性,它就可以工作了。为什么要设置2个重复的数据源?因为它是日食的一种虫子(见)


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

完全不确定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”不是数据源支持的属性。最好删除该属性

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
app1.javax.persistence.jtaDataSource = openejb:Resource/jdbc/AppDB