2012-07-11 68 views
0

我們有一個包含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。

任何幫助,將不勝感激。

+0

檢查兼容性。你是否從彼此兼容的庫中導入。此外,您確定您使用的EntityManagerFactoryImpl與您的EntityManager兼容嗎?.....當在WAS中使用外部庫時,我看到了類似這樣的問題。 – mhan 2012-07-11 14:04:57

+0

我目前正在使用由OpenJPA插件添加的用於eclipse的庫。 – Burmudar 2012-07-11 14:10:39

+0

我猜你的應用程序包含'javax.persistence'類,並且你已經將類加載器委派設置爲「parent last」。是對的嗎? – 2012-07-11 16:18:31

回答

0

//試試這個

@PersistenceContext(NAME = 「TestJPA」) 私人EntityManager的EM;

我會建議挖掘你的WAS 7並使用這些庫。如果您使用非ibm庫,甚至是JDK,WAS是一場噩夢

0

在Web模塊中,您應該使用PersistenceUnit而不是PersistneceContext。嘗試以下注射:

@PersistenceUnit(unitName="TestJPA") 
EntityManagerFactory emf; 

... 
EntityManager em = emf.createEntityManager(); 
... 
em.close(); 

您還使用哪種Web服務?如果您使用的是第三方WS引擎,註釋集成可能不起作用。