2012-07-11 28 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引擎,注释集成可能不起作用。