将RESTEasy JAX-RS应用程序部署到JBoss - JBAS018040:无法启动上下文

时间:2016-12-28 19:43:57

标签: jboss resteasy jboss6.x

我正在尝试将JAX-RS应用程序部署到JBoss EAP 6.2。我的web.xml包含以下内容:

<servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>
        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>resteasy-servlet</servlet-name>
    <url-pattern>/jax-rs/*</url-pattern>
</servlet-mapping>


<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/jax-rs</param-value>
</context-param>

<listener>
    <listener-class>
        org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
    </listener-class>
</listener>

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>

...我将以下内容包含在部署依赖项中:

<dependency org="org.jboss.resteasy" name="resteasy-jaxrs" rev="3.0.5.Final"/>

...所以我在WAR中有以下JAR:

WEB-INF/lib/resteasy-jaxrs-3.0.5.Final.jar

但是,当我将WAR部署到JBoss时,我得到以下跟踪:

  

14:32:42,537 ERROR [org.jboss.msc.service.fail](ServerService线程池 - 316)MSC000001:无法启动服务jboss.web.deployment.default-host./search-rest:org服务中的.jboss.msc.service.StartException。匿名服务中的jboss.web.deployment.default-host./search-rest:org.jboss.msc.service.StartException:JBAS018040:无法启动上下文       在org.jboss.as.web.deployment.WebDeploymentService $ 1.run(WebDeploymentService.java:96)       at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)[rt.jar:1.8.0_111]       at java.util.concurrent.FutureTask.run(FutureTask.java:266)[rt.jar:1.8.0_111]       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[rt.jar:1.8.0_111]       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[rt.jar:1.8.0_111]       在java.lang.Thread.run(Thread.java:745)[rt.jar:1.8.0_111]       在org.jboss.threads.JBossThread.run(JBossThread.java:122)

     

由以下内容引起:匿名服务中的org.jboss.msc.service.StartException:JBAS018040:无法启动上下文       在org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:161)       在org.jboss.as.web.deployment.WebDeploymentService.access $ 000(WebDeploymentService.java:60)       在org.jboss.as.web.deployment.WebDeploymentService $ 1.run(WebDeploymentService.java:93)       ......还有6个

发生了什么以及如何调试?

1 个答案:

答案 0 :(得分:1)

好的,所以罪魁祸首就是以下的jar:

WEB-INF/lib/resteasy-jaxrs-3.0.5.Final.jar

一旦我删除了这种依赖,它就有效了。这是有道理的,因为RESTEasy与JBoss EAP捆绑在一起,因此不需要将它放在WAR的WEB-INF / lib中。

另外,我发现了web.xml中的以下元素:

<listener>
   <listener-class>
       org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
   </listener-class>
</listener>

......没有必要。一切都有效,没有它。

最后一个有效的附加配置是删除扫描仪元素:

<context-param>
   <param-name>resteasy.scan</param-name>
   <param-value>true</param-value>
</context-param>

...在这种情况下,必须提供一个javax.ws.rs.core.Application子类:

import java.util.Set;
import java.util.HashSet;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

public class JaxRsApplication extends Application { 

 private Set<Object> singletons = new HashSet<Object>();

 public JaxRsApplication() {
     singletons.add( new SearchResource() );
 }

 @Override
 public Set<Object> getSingletons() {
     return singletons;        
 }
}

...并将其注册到RESTEasy servlet:

<servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>
        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>mjb44.searchapp.rest.JaxRsApplication</param-value>
    </init-param>
</servlet>