2011-09-28 106 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