2014-01-20 72 views
2

我正在开发一个简单的REST服务器,使用resteasy 3.0.6.Final,它被部署到tomcat 7.0.50。resteasy-cdi休息部署到Tomcat 7

按照official doc,基本上有两种方法可以做到这一点:

  1. 使用ServletContainerInitializer,这是在包resteasy-servlet-initializer实现。

  2. 使用web.xml和servlet调度程序。

我试过这些方法,他们都为我工作。

现在我想用WELD添加CDI的支持,要做到这一点,我需要

<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-cdi</artifactId> 
    <version>3.0.6.Final</version> 
</dependency> 

添加依赖我的战争/ WEB-INF/lib目录下。

但是,这会中断部署。 Tomcat在catalina.out中只显示以下错误消息:

Jan 20, 2014 10:24:06 PM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Error filterStart 
Jan 20, 2014 10:24:06 PM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Context [/storage] startup failed due to previous errors 

网上有很多关于删除resteasy-cdi的建议。所以

  1. 为什么resteasy-cdi会破坏部署?有没有记录问题的票据?
  2. 我该如何将WELD与WELD整合?

感谢您的帮助。

更新1

调试会话后,这个问题原来是非常简单的:RestEasy的-CDI需要一个具体的CDI落实工作,这意味着我应该包括

<dependency> 
     <groupId>org.jboss.weld.servlet</groupId> 
     <artifactId>weld-servlet</artifactId> 
    </dependency> 

在我的身材。

另一个注意事项是配置official doc中提到的WELD。当我包括我的web.xml这两个听众,

<listener> 
    <listener-class>org.jboss.weld.servlet.WeldInitialListener</listener-class> 
</listener> 
<listener> 
    <listener-class>org.jboss.weld.servlet.WeldTerminalListener</listener-class> 
</listener> 

我得到了下面的错误在我localhost.log

Jan 20, 2014 11:55:40 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class org.jboss.weld.servlet.WeldInitialListener 
java.lang.IllegalStateException: Singleton is not set. Is your Thread.currentThread().getContextClassLoader() set correctly? 

我不知道,如果文档是错误的,但用监听器与

<listener> 
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> 
</listener> 

诀窍和战争文件部署成功。

+0

您的问题的解释可能会在“以前的错误”。在日志中检查它们。如果它们不在那里,请检查您的日志配置是否禁止它们和/或暂时增加日志记录级别。 –

+0

好吧,我终于通过添加和配置weld-servlet到我的项目中来完成所有工作。似乎resteasy-cdi需要一个实际的CDI实现才能工作(这是可以理解的,因为它只是一个桥梁)。 – stackoverflower

+0

@stackoverflower你介意发布一个链接到工作代码吗?我使用完全相同的组合(RESTEasy + Weld),我的注入bean始终为空。我的代码与使用Gradle构建并部署到Jetty的Groovy略有不同,但如果这是我的问题,我们又回到了供应商依赖的黑暗时代。 –

回答

1

我问了official weld forum中的Singleton is not set异常,这是文档中的一个错误。正如你所做的那样,你应该使用'原始'org.jboss.weld.environment.servlet.Listener