2011-09-28 36 views
1

以下配置适用于WebLogic,但在OpenEJB中会引发错误“未找到javax.naming.NameNotFoundException:Name”AppDB“。OpenEJB不能使用javax.persistence.jtaDataSource

如果我删除了属性javax.persistence.jtaDataSource,它的工作原理。为什么设置2重复的数据源?因为它是Eclipselinks的一个bug(见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 

,因为这是其他球队包装罐,我无法改变的内容,但我还是想在我的OpenEJB中使用它,有什么建议吗?谢谢。

回答

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'不是数据源支持的属性。可能最好删除该属性。

+0

它的工作原理,我只是在jndi.properties中添加1行。谢谢!!! – Dennys