我们有一个 EAR 应用程序,其中包含一个 WAR、实用程序项目和一个 JPA 项目。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。
任何帮助,将不胜感激。