我们目前正在将 openjpa 2.2.1 与 Glassfish 3 结合使用。由于无论如何我们都必须对基础设施进行更改,因此我们正在考虑升级到 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 上,同样的事情运行得很好。
最佳答案
鉴于所发布的错误,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
关于java - 有人(成功)使用 Openjpa 和 Glassfish 4 了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19398168/