jpa - 未注入 Web 服务的持久性单元
问题描述
我有一个在 Java 6 + Glassfish 3 上运行的应用程序。我正在迁移这个项目以在带有 oracle java 8 的 Glassfish 5.1 上运行。
应用程序构建没有问题。在部署期间,唯一与 jpa/eclipselink 相关的行是
Info: EclipseLink, version: Eclipse Persistence Services - 2.7.4.v20190115-ad5b7c6b2a
Info: /file:/home/eelke/NetBeansProjects/MplusLicentieService/build/web/WEB-INF/classes/_MplusLicentieServicePU login successful
但是,当执行肥皂调用时,NullPointerException
会触发 a。我已经用调试器验证了空指针实际上是持久性单元。这是 web 服务的定义,EntityManager 和失败的方法之一。内法em == null
。省略了其他语句和变量。
@WebService(serviceName = "LicentieWebService")
public class LicentieWebService {
@PersistenceContext(unitName = "MplusLicentieServicePU")
private EntityManager em;
@Resource
private javax.transaction.UserTransaction utx;
@WebMethod(operationName = "getLicentie2")
public QLicentieAntwoord getLicentie2(
@WebParam(name = "licentieNr") String licentieNr,
@WebParam(name = "filiaalNr") int filiaal,
@WebParam(name = "werkplekNr") int werkplek,
@WebParam(name = "codewoord") String codewoord) {
try {
Licentie lic = em.find(Licentie.class, licentieNr);
...
} catch (ApplicationError ex) {
...
}
}
我还尝试在 netbeans 中重新定义持久性单元,但这并没有改变任何东西。
一些额外的发现
在同一个项目中还有一个无状态 EJB,它具有由计时器调度调用的功能。使用@Inject 将第二个无状态 EJB 注入到这个 EJB 中,这是可行的。在第二个 EJB 中注入了与 Web 服务中相同的持久性上下文。这有效,它被注入并按预期执行查询。
找到一些可能相关的日志行
信息:JAX-WS RI 特定描述符 (WEB-INF/sun-jaxws.xml) 在存档 Web 中找到,因此为此存档禁用企业 Web 服务 (109) 部署以避免重复服务。
解决方案
推荐阅读
- r - 在 Quanteda 中标记文本并使用字典进行分析
- apache-spark - 如何在没有 Hadoop 的情况下使用 Yarn 作为 Spark 资源管理器?
- docker - 在 Docker ASP.NET Core webapplication 中复制和使用 json-config 文件
- excel - 为数字组合开发适当的算法
- python - 检查cherrypy会话数据的年龄
- beautifulsoup - 我想用漂亮的汤来解析多个 HTML 文档,但我不能让它工作
- c - __libc_start_main 中的调试函数
- javascript - Javascript 中的双空格
- angular - 从带有超时的 mapbox-gl-js 传递带有集成地图的页面时,Angular e2e 测试失败 - 错误
- debugging - 如何在 Clion 和 PyCharm 中显示整数的十六进制视图?