使用OpenJPA 1.0的Websphere 7 EAR

时间:2012-07-11 13:47:46

标签: java xml jpa openjpa websphere-7

我们有一个包含WAR,Utility项目和JPA项目的EAR应用程序。 JPA项目包含我们所有的实体类,在META-INF目录中是我们的persistence.xml,其定义如下:

    <?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>

在我们的网络服务中,我们有以下内容:

@PersistenceContext(name="peristence/TestJPA", unitName="TestJPA")
private EntityManagerFactory emf;

部署应用程序时,emf永远不会被实例化。它总是空的。我们也尝试了@PersistenceUnit,有或没有参数。

我们还尝试了一种不同的方法,使用InitialContext查找来获取EntityManager。使用此方法会抛出异常,无法找到资源名称。

我们尝试的最后一种方法如下:

em = (EntityManager) Persistence.createEntityManagerFactory("TestJPA");

产生以下异常

java.lang.ClassCastException: com.ibm.ws.persistence.EntityManagerFactoryImpl incompatible with javax.persistence.EntityManager

我已经查找了有关使用EAR进行OpenJPA部署的各种教程,但所有这些教程都是针对JPA 2或针对Spring的OpenJPA 1。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

//试试这个

@PersistenceContext(名称= “TestJPA”) 私有EntityManager em;

我建议深入了解您的WAS 7并使用这些库。如果你使用非ibm库,甚至是JDK

,WAS就是一场噩梦

答案 1 :(得分:0)

在Web模块中,您应该使用PersistenceUnit而不是PersistneceContext。尝试以下注射:

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

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

您使用的是哪种Web服务?如果您使用的是第三方WS引擎,则注释集成可能不起作用。