Implantação Resteasy falha aleatoriamente no glassfish 4.1

Eu tenho um problema com meu aplicativo REST usando o Resteasy. Quando eu implantar o aplicativo com essas dependencies

 org.jboss.resteasy resteasy-servlet-initializer 3.0.11.Final  

como descrito aqui no Capítulo 3.5, às vezes, o servidor implanta o aplicativo corretamente e tudo funciona bem.

Mas às vezes eu fico

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

Nas fonts de ResteasyServletInitializer, a linha 109 é esta (com contexto)

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

Então eu suponho que este é um bug Glassfish e Glassfish não retorna corretamente o object correto. Eu não achei que isso acontece com reimplementações, depois de limpar osgi-cache, etc. Parece ser bastante random.

Isso parece estar relacionado e eu tentei adicionar

  javax.servlet javax.servlet-api 3.1.0 provided  

Mas ainda assim, às vezes, falha, embora eu diria que falha um pouco com menos frequência. A resposta aceita do post é depreciado como pela referência restalhável 3.9. RESTAasy como um ServletContextListener, então eu não quero tentar isso. Isso parece evitar o problema, não resolvê-lo.

A versão do meu Glassfish é o GlassFish Server Open Source Edition 4.1 (build 13).

Por favor me ajude com isso.

Felicidades

Acabei evitando esse problema, garantindo que o aplicativo WAR não inclua o RESTEasy.

Então eu construo duas guerras agora: uma com o RESTEasy (como requerido para implementar no Tomcat e o Wildfly), outra sem (para implementar no Glassfish). Isso parece ser melhor do que exigir a alteração da instalação do Glassfish, mas faz o mesmo: evita a instalação de duas implementações JAX-RS.

    Intereting Posts