gpt4 book ai didi

java - Resteasy 部署在 glassfish 4.1 上随机失败

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:39 24 4
gpt4 key购买 nike

我的 REST 应用程序在使用 Resteasy 时遇到问题。当我部署具有此依赖项的应用程序时

<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-servlet-initializer</artifactId>
<version>3.0.11.Final</version>
</dependency>

如第 3.5 章中的 here 所描述,有时服务器会正​​确部署应用程序并且一切正常。

但有时我会得到

Error invoking ServletContainerInitializer 
org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer
java.lang.NullPointerException
at org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer.register(ResteasyServletInitializer.java:109)
at org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer.onStartup(ResteasyServletInitializer.java:80)
at org.apache.catalina.core.StandardContext.callServletContainerInitializers(StandardContext.java:6031)
at com.sun.enterprise.web.WebModule.callServletContainerInitializers(WebModule.java:774)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5929)
at com.sun.enterprise.web.WebModule.start(WebModule.java:691)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2286)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1932)
at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500)
at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:406)
at com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:243)
at org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:329)
at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:377)
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:461)
at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:227)
at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:84)
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2258)
at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:105)
at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87)
at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1162)
at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1147)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
]]

在 ResteasyServletInitializer 的源代码中,第 109 行是这样的(带有上下文)

ServletRegistration.Dynamic reg = servletContext.addServlet(applicationClass.getName(), HttpServlet30Dispatcher.class);
reg.setLoadOnStartup(1); //Line 109
reg.setAsyncSupported(true);
reg.setInitParameter("javax.ws.rs.Application", applicationClass.getName());

所以我认为这是一个 Glassfish 错误,并且 Glassfish 无法正确返回正确的对象。我还没有发现这种情况发生在重新部署、清除 osgi-cache 等之后。这似乎是相当随机的。

This 似乎相关,我尝试添加

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

但有时它仍然会失败,尽管我想说它失败的频率要少一些。帖子中接受的答案已被 Resteasy 引用 3.9. RESTEasy as a ServletContextListener 弃用,所以我不想尝试这个。这似乎是在逃避问题,而不是解决问题。

我的 Glassfish 版本是 GlassFish Server Open Source Edition 4.1(内部版本 13)。

请帮我解决这个问题。

干杯

最佳答案

我最终通过确保应用程序 WAR 不包含 RESTEasy 避免了这个问题。

因此,我现在构建了两场 war :一场使用 RESTEasy(根据在 Tomcat 和 Wildfly 上部署的要求),另一场不使用 RESTEasy(根据在 Glassfish 上部署的要求)。这似乎比需要更改 Glassfish 安装更好,但效果相同:避免安装两个 JAX-RS 实现。

关于java - Resteasy 部署在 glassfish 4.1 上随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com