首页 > 解决方案 > 未注入 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) 部署以避免重复服务。

标签: jpajakarta-eeglassfishjax-ws

解决方案


推荐阅读