Jpa 未在webservice中注入持久化单元
我有一个在Java6+GlassFish3上运行的应用程序。我正在将此项目迁移到使用oracle java 8的Glassfish 5.1上运行 应用程序的构建没有问题。在部署期间,只有jpa/eclipselink相关的行是Jpa 未在webservice中注入持久化单元,jpa,jakarta-ee,glassfish,jax-ws,Jpa,Jakarta Ee,Glassfish,Jax Ws,我有一个在Java6+GlassFish3上运行的应用程序。我正在将此项目迁移到使用oracle java 8的Glassfish 5.1上运行 应用程序的构建没有问题。在部署期间,只有jpa/eclipselink相关的行是 Info: EclipseLink, version: Eclipse Persistence Services - 2.7.4.v20190115-ad5b7c6b2a Info: /file:/home/eelke/NetBeansProjects/Mplus
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
但是,当执行soap调用时,会触发NullPointerException
。我已经用调试器验证了null指针实际上是持久性单元。下面是webservice、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,它有一个由计时器调度调用的函数。在这个EJB中,第二个无状态EJB被注入@Inject,这是有效的。在第二个EJB中,注入了与webservice相同的持久上下文。这是可行的,它被注入并按预期执行查询
找到一些可能相关的日志行
信息:找到JAX-WSRI特定描述符(WEB-INF/sun jaxws.xml)
在归档web和企业web服务(109)部署中
已对此存档禁用,以避免服务重复
相关报道:@perissf,这个问题和答案对我没有帮助。资源和池已在glassfish中创建并更正,名称与persistence.xml匹配。一旦我在那里弄坏了什么东西,我也会在glassfish日志中得到关于它的错误信息。但是我没有得到任何错误,em只是没有被注入。好吧,我想Web服务不是在代码中的某个地方被手动实例化的。它的生命周期应该由web/应用程序管理container@perissf,更正它是由容器管理的。注:我还为我的问题添加了一些额外的发现。@perissf,别介意我让它起作用了,我想我不确定到底出了什么问题。经过多次尝试后,我重置为上次提交,并重新解决了丢失的依赖项,现在它可以工作了。相关:@perissf,该问题和答案中没有对我有帮助的内容。资源和池已在glassfish中创建并更正,名称与persistence.xml匹配。一旦我在那里弄坏了什么东西,我也会在glassfish日志中得到关于它的错误信息。但是我没有得到任何错误,em只是没有被注入。好吧,我想Web服务不是在代码中的某个地方被手动实例化的。它的生命周期应该由web/应用程序管理container@perissf,更正它是由容器管理的。注:我还为我的问题添加了一些额外的发现。@perissf,别介意我让它起作用了,我想我不确定到底出了什么问题。在多次尝试之后,我重置为上次提交,并重新解决了丢失的依赖项,现在它可以工作了。