我們有一個包含WAR,Utility項目和JPA項目的EAR應用程序。 JPA的項目包含了我們所有的實體類,並在META-INF目錄是我們的persistence.xml其定義如下:使用OpenJPA 1.0的Websphere 7 EAR
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="TestJPA">
<description>openjpa</description>
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>jdbc/TestSource</jta-data-source>
<class>model.TestTable1</class>
<class>model.TestTable2</class>
</persistence-unit>
</persistence>
我們的web.xml中包含了持久化單元下面。
<persistence-unit-ref>
<persistence-unit-ref-name>peristence/TestJPA</persistence-unit-ref-name>
<persistence-unit-name>TestJPA</persistence-unit-name>
</persistence-unit-ref>
在我們的web服務,我們有以下幾點:
@PersistenceContext(name="peristence/TestJPA", unitName="TestJPA")
private EntityManagerFactory emf;
當應用程序絕不會在部署電動勢被實例化。它始終爲空。我們也嘗試過@PersistenceUnit,有和沒有參數。
我們還嘗試了使用InitialContext查找來獲取EntityManager的另一種方法。使用這種方法會引發異常,無法找到資源名稱。
我們盡了最後的做法是以下幾點:
em = (EntityManager) Persistence.createEntityManagerFactory("TestJPA");
將會產生以下異常
java.lang.ClassCastException: com.ibm.ws.persistence.EntityManagerFactoryImpl incompatible with javax.persistence.EntityManager
我已經找了各種教程關於OpenJPA的部署與EAR,但它們都是用於JPA 2或用於Spring的OpenJPA 1。
任何幫助,將不勝感激。
檢查兼容性。你是否從彼此兼容的庫中導入。此外,您確定您使用的EntityManagerFactoryImpl與您的EntityManager兼容嗎?.....當在WAS中使用外部庫時,我看到了類似這樣的問題。 – mhan 2012-07-11 14:04:57
我目前正在使用由OpenJPA插件添加的用於eclipse的庫。 – Burmudar 2012-07-11 14:10:39
我猜你的應用程序包含'javax.persistence'類,並且你已經將類加載器委派設置爲「parent last」。是對的嗎? – 2012-07-11 16:18:31