在Glassfish 4.1上Resteasy部署失败 [英] Resteasy deploy fails randomly on glassfish 4.1

查看:145
本文介绍了在Glassfish 4.1上Resteasy部署失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Resteasy我的REST应用程序出现问题。
当我使用这个依赖性部署应用程序时

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

这里在第3.5章中有时服务器会正​​确部署应用程序,一切正常。



但有时我得到

 调用ServletContainerInitializer的错误
org.jboss.resteasy.plugins .servlet.ResteasyServletInitializer $在org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer.register(ResteasyServletInitializer.java:109)b $ b显示java.lang.NullPointerException

在org.jboss.resteasy.plugins .servlet.ResteasyServletInitializer.onStartup(ResteasyServletInitializer.java:80)
在org.apache.catalina.core.StandardContext.callServletContainerInitializers(StandardContext.java:6031)
在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)
位于org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
位于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.Applic ationLoaderService.processApplication(ApplicationLoaderService.java:406)
处org.jvnet.hk2.internal.ClazzCreator com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:243)
。 postConstructMe(ClazzCreator.java:329)
在org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:377)
在org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor。 Java的:在org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:227 461)

在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(Current TaskFuture.java:1162)
在org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.run(CurrentTaskFuture.java:1147)
在java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明)
at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)$ b $ at java.lang.Thread.run(Unknown Source)
]]


$ b $ p在ResteasyServletInitializer第109行的源代码中是这样的(带上下文)

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

所以我认为这是一个Glassfish错误,Glassfish无法正确返回正确的对象。
在清除osgi-cache之后,我还没有发现重新部署会发生这种情况,这看起来很随意。


似乎是相关的,我试着添加

 < dependency> 
< groupId> javax.servlet< / groupId>
< artifactId> javax.servlet-api< / artifactId>
< version> 3.1.0< / version>
< scope>提供< / scope>
< /依赖关系>

但它仍然有时会失败,但我会说失败的次数会减少一点。
帖子中接受的答案已被废弃,如resteasy参考 3.9。 RESTEasy作为ServletContextListener ,所以我不想试试这个。
这似乎是避免了这个问题,而不是解决它。


我的GlassFish版本是GlassFish Server开源版4.1(build 13)。



请帮助我一。

干杯

解决方案

我最终避免了这个问题,应用程序WAR不包括RESTEasy。因此,我现在构建两场战争:一场是RESTEasy(根据Tomcat和Wildfly部署需要),另一场没有(为了部署Glassfish )。这似乎比要求更改Glassfish安装更好,但实现相同:避免安装两个JAX-RS实现。


I have a problem with my REST-Application using Resteasy. When I deploy the application with this dependencies

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

as described here in Chapter 3.5 sometimes the server deploys the application correctly and everything works fine.

But sometimes I get

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)
]]

In the sources of ResteasyServletInitializer line 109 is this (with context)

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());

So I assume this is a Glassfish bug and Glassfish fails to properly return the correct object. I have not found that this happens with redeployments, after clearing osgi-cache, etc. It seems to be pretty random.

This seems to be related and I tried adding

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

But it still fails sometimes although I would say it fails a little bit less often. The accepted answer from the post is deprecated as by the resteasy reference 3.9. RESTEasy as a ServletContextListener so I do not want to try this. This seems like avoiding the problem, not solving it.

My Glassfish version is GlassFish Server Open Source Edition 4.1 (build 13).

Please help me with this one.

Cheers

解决方案

I ended up avoiding this issue by ensuring the application WAR did not include RESTEasy.

So I build two wars now: one with RESTEasy (as required for deploying on Tomcat and Wildfly), another without (for deploying on Glassfish). That seems better than requiring changing the Glassfish install, but accomplishes the same: avoids having two JAX-RS implementations installed.

这篇关于在Glassfish 4.1上Resteasy部署失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆