Liberty服务器从JDK 8升级到JDK 21后EntityManager未注入为空的问题求助
Liberty服务器从JDK 8升级到JDK 21后EntityManager未注入为空的问题求助
大家好,最近在做应用版本升级时碰到了个棘手的问题,想请各位帮忙分析下:
之前我的应用在JDK 8 + Liberty 22.0.0.10环境下运行完全正常,现在我把环境升级到了JDK 21 + Liberty 24.0.0.9,已经调整了pom.xml里的依赖版本,也修改了Liberty服务器的特性配置。目前应用能正常启动,REST接口和JMS队列都能正常工作,但只要一触发数据库操作,就会抛出空指针异常——原因是我通过依赖注入的EntityManager对象em是空的!在JDK 8的旧环境里它可是能正常注入、完全没问题的。
具体报错信息如下:
nliberty.opentracing.internal.OpentracingJaxRsEMCallbackImpl W CWMOT0009W: The OpenTracing exception mapper detected and is handling an unhandled exception from the JAX-RS application. java.lang.NullPointerException: Cannot invoke "javax.persistence.EntityManager.find(java.lang.Class, Object)" because "this.em" is null
我使用的是JPA 2.2库,确认过Liberty对JPA 2.2的支持是包含JDK 21的。下面是我pom.xml里最相关的配置片段(我升级了部分核心依赖的版本):[此处为用户未完整粘贴的pom.xml相关内容]
我已经尝试过的排查动作
- 检查Liberty服务器的
server.xml,确认已正确启用jpa-2.2特性 - 验证EntityManager的注入方式(用的是
@Inject/@PersistenceContext,和旧环境完全一致) - 确认
persistence.xml配置没有变动,数据源也能正常连接
想请教大家的问题
有没有人碰到过类似的跨JDK版本升级问题?可能是什么原因导致EntityManager在JDK 21 + Liberty 24环境下无法正常注入?有没有什么排查或解决的思路?
备注:内容来源于stack exchange,提问作者Accollativo
相关产品推荐
相关产品推荐

