带有JPA 2.1的Websphere 8.5

时间:2014-05-19 19:18:01

标签: hibernate jpa websphere

IBM曾经有一个功能包将JPA 2.0放入WAS 7. WAS 8.5.5显然带有JPA 2.0。但我们有一个应用程序,我们刚刚升级到Hibernate 4,需要JPA 2.1。我无法找到WAS 8.5功能包的链接以推送到JPA 2.1。

还有其他人在WAS 8.5中使用过Hibernate 4吗?如果是这样,怎么样?如果没有功能包,我们会在javax.persistence类上获得NoSuchMethodError。

4 个答案:

答案 0 :(得分:11)

Hibernate 4.3.7.Final 可以在Websphere Application Server 8.5.5 中使用,具有以下配置:

  • 在您的应用中打包hibernate-jpa-2.1.jar,并将classloader策略设置为PARENT_LAST。

    Hibernate 4.3.7.Final与Websphere 8.5.5提供的JPA 2.0 API不兼容

  • 设置JVM属性com.ibm.websphere.persistence.ApplicationsExcludedFromJpaProcessing=*以禁用Websphere JPA初始化。

    如果没有这个,您将在启动期间跟随SAXParseException,因为Websphere会尝试根据JPA 2.0架构解析persistence.xml。

Caused by: org.xml.sax.SAXParseException: expected root element {http://java.sun.com/xml/ns/persistence}persistence
        at com.ibm.ws.jpa.management.JaxbUnmarshaller.startElement(JaxbUnmarshaller.java:310)
  • 在您的申请中应用work around for issue JPA-4

    报告使用 Hibernate的JPA 2 API而不是Webspheres JPA 1 API 的问题,而解决方案也适用于Hibernate的JPA 2.1 API,但有一些小的改动:

    您需要将HibernatePersistence替换为HibernatePersistenceProvider,因为前者已被弃用。

    如果没有这个,你将在启动期间跟随ClassCastException,因为Hibernate的JPA 2.1 API将加载所有PersistenceProvider类,包括在类路径中暴露的Websphere。

Caused by: java.lang.ClassCastException: com.ibm.websphere.persistence.PersistenceProviderImpl incompatible with javax.persistence.spi.PersistenceProvider
        at javax.persistence.Persistence$1.isLoaded(Persistence.java:110)
        at org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:56)

答案 1 :(得分:4)

Hibernate 4.2.x实现了JPA 2.0规范,我们在WebSphere 8.5.5中没有任何问题地使用它。我们将Hibernate JAR打包在WAR中,并将persistence.xml中的provider属性设置为org.hibernate.ejb.HibernatePersistence。

只有Hibernate 4.3.x需要JPA 2.1并且不能使用WebSphere 8.5.5。

答案 2 :(得分:0)

我能够使用在 Java 8 上运行的 websphere 8.5.5.13 做到这一点 通过制作一个包含

的共享库
  • hibernate-jpa-2.1-api-1.0.2.Final.jar

  • hibernate-core-4.3.11.Final.jar

一切都很好。

答案 3 :(得分:-1)

在WebSphere中使用自己的持久性提供程序应该没有问题。我的建议是你在你的应用程序中打包一个JPA 2.1提供程序,并尝试将类加载器更改为最后一个父类。在这种情况下,您不会使用WebSphere提供的默认OpenJPA 2.0。相反,您将使用您选择的提供商。

http://www-01.ibm.com/support/knowledgecenter/api/content/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/tejb_jpa3rdparty.html

http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/trun_classload_server.html?cp=SSAW57_8.5.5%2F3-8-2-5-1&lang=en

希望这有帮助。

来自IBM支持门户网站的另一篇相关文章:http://www-01.ibm.com/support/docview.wss?uid=swg21672354