使用 Hibernate JPA 2.1 将应用程序部署到 IBM WebSphere 会产生 NullPointerException
Posted
技术标签:
【中文标题】使用 Hibernate JPA 2.1 将应用程序部署到 IBM WebSphere 会产生 NullPointerException【英文标题】:Deploying application using Hibernate JPA 2.1 to IBM WebSphere gives NullPointerException 【发布时间】:2015-06-11 03:09:00 【问题描述】:我们正在尝试将使用 Hibernate 的 Java 7 Spring MVC 应用程序部署到 IBM WebSphere 8.5.5.2 服务器中。该应用程序在 Tomcat 服务器上运行良好,但我们无法让它在 WebSphere 中运行。
堆栈跟踪输出如下:
[3/26/15 13:49:53:552 MDT] 00000066 AutowiredAnno I org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor <init> JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
[3/26/15 13:49:54:299 MDT] 00000066 LocalContaine I org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory Building JPA container EntityManagerFactory for persistence unit 'default'
[3/26/15 13:49:54:339 MDT] 00000066 LogHelper Z org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation HHH000204: Processing PersistenceUnitInfo [
name: default
...]
[3/26/15 13:49:54:536 MDT] 00000066 Version Z org.hibernate.Version logVersion HHH000412: Hibernate Core 4.3.7.Final
[3/26/15 13:49:54:543 MDT] 00000066 Environment Z org.hibernate.cfg.Environment <clinit> HHH000206: hibernate.properties not found
[3/26/15 13:49:54:546 MDT] 00000066 Environment Z org.hibernate.cfg.Environment buildBytecodeProvider HHH000021: Bytecode provider name : javassist
[3/26/15 13:49:54:580 MDT] 00000066 JarInputStrea Z org.hibernate.jpa.boot.archive.internal.JarInputStreamBasedArchiveDescriptor visitArchive HHH015010: Unable to find file (ignored): bundleresource://130.fwk-1163147521/
java.lang.NullPointerException: in is null
at java.util.zip.ZipInputStream.<init>(ZipInputStream.java:111)
at java.util.zip.ZipInputStream.<init>(ZipInputStream.java:90)
at java.util.jar.JarInputStream.<init>(JarInputStream.java:87)
at java.util.jar.JarInputStream.<init>(JarInputStream.java:73)
at org.hibernate.jpa.boot.archive.internal.JarInputStreamBasedArchiveDescriptor.visitArchive(JarInputStreamBasedArchiveDescriptor.java:73)
at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:72)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.scan(EntityManagerFactoryBuilderImpl.java:725)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:221)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:188)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider$1.<init>(SpringHibernateJpaPersistenceProvider.java:49)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:49)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1686)
at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:414)
at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169)
at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:749)
at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634)
at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:426)
at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:718)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1177)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1370)
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:639)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:968)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:776)
at com.ibm.ws.runtime.component.ApplicationMgrImpl$5.run(ApplicationMgrImpl.java:2195)
at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:5474)
at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:5600)
at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2200)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:446)
at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:389)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:117)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:995)
at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:502)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1864)
[3/26/15 13:49:54:899 MDT] 00000066 Version Z org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> HCANN000001: Hibernate Commons Annotations 4.0.5.Final
[3/26/15 13:49:55:511 MDT] 00000066 Enhance E CWWJP9992E: openjpa.Enhance: Error: The identity field defined in the com.company.model.KeyValueMapping Embeddable is not supported.
[3/26/15 13:49:55:837 MDT] 00000066 Dialect Z org.hibernate.dialect.Dialect <init> HHH000400: Using dialect: org.hibernate.dialect.SQLServer2008Dialect
[3/26/15 13:49:55:864 MDT] 00000066 LobCreatorBui Z org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
[3/26/15 13:49:56:071 MDT] 00000066 AnnotationCon W org.springframework.context.support.AbstractApplicationContext refresh Exception encountered during context initialization - cancelling refresh attempt
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.company.WebConfig: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax/persistence/Table.indexes()[Ljavax/persistence/Index;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1686)
at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:414)
at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169)
at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:749)
at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634)
at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:426)
at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:718)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1177)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1370)
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:639)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:968)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:776)
at com.ibm.ws.runtime.component.ApplicationMgrImpl$5.run(ApplicationMgrImpl.java:2195)
at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:5474)
at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:5600)
at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2200)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:446)
at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:389)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:117)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:995)
at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:502)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1864)
Caused by: java.lang.NoSuchMethodError: javax/persistence/Table.indexes()[Ljavax/persistence/Index;
at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:973)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3799)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1412)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
... 37 more
谢谢!
【问题讨论】:
您使用的是什么版本的 JPA?检查WAS版本是否支持。 @kmansoor 我们使用的是 2.1,这导致了问题。我们将其降低到 2.0 并通过了该版本。 当您添加 hibernate-entitymanager 4.3 时,这为实体管理器带来了更新的规范 (2.1) 和不同的工厂提供程序。基本上,您最终在类路径中拥有两个 jar 作为传递依赖项。 ....来自...***.com/questions/20734540/… 您能验证您的 EM 版本吗?检查你的 pom.xml(如果使用 maven) 其实问题可能是在 JPA 2.0 中找不到该方法。文档说它从 2.1 开始可用 【参考方案1】:javax/persistence/Table.indexes()
来自 JPA 2.1,WebSphere Application Server 传统 8.5.5.2 默认使用 JPA 2.0 (OpenJPA)。如果您想使用 Hibernate,您必须覆盖默认提供程序 - 请查看 this post 了解更多详细信息。
更新
是的,你是对的。您不能使用 JPA 2.1 覆盖 WebSphere 传统 8.5.5.x 中的默认提供程序,因为容器依赖 2.0 api 进行初始化。
如果您必须使用 2.1,您可以将其用作应用程序管理的提供程序,而不是容器管理。因此,您需要为您的应用程序禁用 JPA,check this,而不是依赖容器注入 EntityManager,而是使用 API 自行初始化它。
另一种选择是考虑从 8.5.5.6 版本开始支持 JPA 2.1(使用 EclipseLink)的 WebSphere Liberty。因为容器支持 2.1,所以应该可以在那里更改提供程序,但是我没有时间测试它。
您还可以升级到最近发布的 WebSphere Application Server v9,它支持 JPA 2.1。
【讨论】:
【参考方案2】:我想我会分享对我有用的东西。通过使用自定义 PersistenceProviderResolver,我能够在 Websphere 8.5.5.5 上使用 JPA 2.1 和 Hibernate 4.3.11,这样 Websphere 类就不会干扰 Hibernate https://gist.github.com/jeffsheets/aec3e94870ef903ce7efe33e00563d3c
我基于这里找到的帖子 https://hibernate.atlassian.net/browse/JPA-4
【讨论】:
我是否理解正确,使用自定义 PersistenceProviderResolver 容器管理的持久性得到维护(因此仍然可以注入EntityManager
)。
我不确定“容器管理的持久性”。使用该自定义解析器,它基本上不使用 Websphere 中的类,因此我们可以使用我们自己的 JPA 和 Hibernate 类。我没有使用任何 J2EE 风格的容器托管实体 bean。只是带有 JPA 注释的直接 Spring Data【参考方案3】:
我分享对我有用的东西。我和我的团队能够在 Websphere 8.5.5 和 Websphere 7 中使用 Spring 4.2.4、Hibernate 5.1 和 Hibernate JPA 2.1 部署我们的应用程序。
执行此操作的关键是提取所有休眠库并将它们放在服务器中的共享库文件夹中,在服务器配置中创建一个新的类加载器,其父顺序为最后一个,并将包含的共享库分配给该类加载器休眠库。然后您必须更改默认 Java 持久性 API 设置以使用休眠持久性提供程序而不是默认的 WebSphere 持久性提供程序。所以步骤如下:
在您的服务器中创建一个文件夹并将所有休眠库放入其中
在Websphere中创建共享库(环境/共享库),并将其设置为你刚刚在服务器上创建的文件夹的路径
在 WebSphere 上单击您的服务器,然后在 Server Infrastructure 下单击 Java and Process Management / Class Loader。点击New 并选择Parent Last 选项。保存
单击您刚刚创建的新类加载器,然后单击右侧的共享库引用。这里添加包含 Hibernate Libraries 的共享库
现在在您的服务器的容器设置部分下单击容器服务/默认 Java 持久性 API 设置。在这里,您必须指定一个备用的默认持久性提供程序。见下图。
现在编译您的应用程序并从生成的战争中删除 Hibernate 库(参见图像 1)。然后安装到服务器上。
在我的例子中,该应用程序在 WebSphere 7 中也像一个魅力一样工作。
此过程解决了javax/persistence/Table.indexes()
错误以及所有其他由 WebSphere 和 Hibernate 之间的库冲突引起的编译错误。
参考:
https://www.ibm.com/developerworks/community/wikis/form/anonymous/api/wiki/53181ccd-bcd4-431f-b968-0b5f6d46d652/page/192a432b-28bb-4080-b037-345e5d83da76/attachment/61e74f67-1d60-4120-ba25-ad7264c9f4f6/media/AlternateJPAProviders_TestReport.pdf
【讨论】:
仅供参考:Gas 对此问题的回答的链接答案包含以下语句:“如果您必须使用 JPA 2.1 和 Hibernate,则必须覆盖默认的 JPA 提供程序。” 更重要的是,当走这条路时,您将使用“应用程序管理的持久性提供程序”,并且不能再依赖注入实体管理器的容器。您必须自己实例化它。 (如@Gas 的回答中所述。) 您好,我正在尝试将您的 WA 用于 was,但无济于事。 + 我打开了 com.ibm.websphere.persistence.ApplicationsExcludedFromJpaProcess 标志 (www-01.ibm.com/support/docview.wss?uid=swg1PM26361)。服务器仍在尝试使用 jpa2.0 运行应用程序。有什么想法吗? @amicoderozer,我对基于 hibernate 5.2.9 的应用程序战争部署遵循了完全相同的步骤,但得到了java.lang.IllegalStateException: org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@a8288642 is closed
。谁能帮忙解决这个问题?
@PriyankaW 这似乎是一个与您的应用程序以及您如何处理连接有关的问题。可能你在某处关闭了连接 (***.com/questions/42538817/…)【参考方案4】:
我让它与 Spring Boot 2.1.4、Hibernate 5.3.9.Final 和 WAS 8.5.5 一起工作,没有任何服务器级别的更改 :)。我在下面的文章中概述了这些步骤。仍在使用 JPA 2.1,根本不必降级到 JPA 2.0。
[How-to] Deploy Spring Boot 2.x apps on WebSphere 8.5.5
【讨论】:
【参考方案5】:对我有用的是:
在日志中(从 OP 的日志中复制),有这样的:
[3/26/15 13:49:54:339 MDT] 00000066 LogHelper Z org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation HHH000204: Processing PersistenceUnitInfo [
name: default
...]
如果您注意到,它正在尝试使用 默认 持久性提供程序。
因此,如果我们没有明确指定要使用的持久性提供程序,Hibernate 将使用 WAS Persistence 提供程序(即本例中的 OpenJPA) - 而对于 WebLogic,则使用 EclipseLink。
由于 WAS 8.5.5.x 仅支持 JPA 2.0(和 JPA 1.0),因此这将不起作用,并且日志中会出现一堆错误(...),例如 OP 发布的错误。
为了解决这个问题,我按照this post明确指定了第三方持久化到Hibernate
我希望这会对某人有所帮助。
【讨论】:
【参考方案6】:我遵循了 amicoderozer 在 Websphere 8.5.5 上的回答。但是,我不得不做更多的修改。
-
将 JPA 库提取到新的共享库中
正如 amicoderozer 所写,您必须将 JPA 库提取到一个新的共享库中并选择标志为此共享库使用隔离类加载器。
JPA_LIBS/antlr-2.7.7.jar
JPA_LIBS/byte-buddy-1.10.10.jar
JPA_LIBS/classmate-1.3.4.jar
JPA_LIBS/dom4j-2.1.3.jar
JPA_LIBS/FastInfoset-1.2.15.jar
JPA_LIBS/hibernate-commons-annotations-5.1.0.Final.jar
JPA_LIBS/hibernate-core-5.4.16.Final.jar
JPA_LIBS/hibernate-entitymanager-5.4.16.Final.jar
JPA_LIBS/hibernate-jpa-2.1-api-1.0.0.Final.jar
JPA_LIBS/hibernate-validator-5.4.3.Final.jar
JPA_LIBS/istack-commons-runtime-3.0.7.jar
JPA_LIBS/jandex-2.0.5.Final.jar
JPA_LIBS/javax.activation-api-1.2.0.jar
JPA_LIBS/javax.persistence-api-2.2.jar
JPA_LIBS/jaxb-api-2.3.1.jar
JPA_LIBS/jaxb-runtime-2.3.1.jar
JPA_LIBS/jboss-logging-3.3.2.Final.jar
JPA_LIBS/jboss-transaction-api_1.2_spec-1.1.1.Final.jar
JPA_LIBS/jpa.txt
JPA_LIBS/stax-ex-1.8.jar
JPA_LIBS/txw2-2.3.1.jar
JPA_LIBS/validation-api-2.0.1.Final.jar
-
导航到“应用程序服务器 > your_server > 默认 Java 持久性 API 设置”部分并访问“默认 Java 持久性 API”。
在那里,单击单选按钮“指定备用默认持久性提供程序”并输入:
org.hibernate.jpa.HibernatePersistenceProvider
-
在创建 JVM 变量的服务器级别禁用 JPA 处理(Your_Server > 进程定义 > Java 虚拟机 > 自定义属性)
com.ibm.websphere.persistence.ApplicationsExcludedFromJpaProcessing => *
在安装应用程序期间,选择您在第一步中创建的 JPA 共享库
安装应用程序后,导航至“企业应用程序 > Your_APP_name > 管理模块 > YourModule”。 最后,在属性“Class loader order”上选择PARENT_LAST
【讨论】:
以上是关于使用 Hibernate JPA 2.1 将应用程序部署到 IBM WebSphere 会产生 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2.1 缺少多个 org.hibernate.jpa.event 类
使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出错
Play 2.4 JPA/Hibernate EntityManager 不刷新到数据库
使用 JPA 2.1 / Hibernate 4 将值列表传递给存储过程
当加载 spring-boot 和 spring-data-jpa 时,Hibernate 无法加载 JPA 2.1 Converter