我们目前正在使用带有Glassfish 3的openjpa 2.2.1。由于我们不得不对我们的基础设施进行更改,我们正在考虑升级到Glassfish 4.不幸的是,我无法让OpenJpa使用它。每当我尝试访问实体时,我都会得到AbstractMethodErrors
Caused by: java.lang.AbstractMethodError: org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(Ljavax/persistence/SynchronizationType;Ljava/util/Map;)Ljavax/persistence/EntityManager;
(即如果我使用openjpa-maven-plugin在构建期间增强了分类)。如果我使用动态增强功能,我甚至无法部署应用程序。
如果我将持久性提供程序切换到EclipseLink,它似乎工作正常。不幸的是,更改持久性提供程序并不是一个选项,因为我们使用了一些OpenJPA功能。
我也尝试过OpenJpa 2.2.2,结果相同。在Glassfish 3上,同样的事情运行得很好。
答案 0 :(得分:1)
鉴于发布的错误,看起来Glassfish 4假设使用JPA 2.1提供程序(由于在创建EM时使用了SynchronizationType参数)。 OpenJPA(尚未)支持JPA 2.1规范。
您需要禁用或删除Glassfish 4中的JPA 2.1 API,以便可以使用JPA 2.0 API(与OpenJPA一起打包)。我不确定这种禁用对Glassfish有多容易或可行。
这个问题刚刚作为OpenJPA的JIRA创建并引用了这个stackoverflow帖子: https://issues.apache.org/jira/browse/OPENJPA-2471