关于java:resteasy-cdi中断了对Tomcat 7的部署

resteasy-cdi breaks deployment to Tomcat 7

我正在使用resteasy 3.0.6.Final开发一个简单的REST服务器,该服务器已部署到tomcat 7.0.50。

根据官方文档,基本上有两种方法可以做到:

  • 使用ServletContainerInitializer,该实现在包resteasy-servlet-initializer中实现。

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

  • 我尝试了这些方法,它们都对我有用。

    现在我想使用WELD添加CDI支持,为此,我需要添加依赖项

    1
    2
    3
    4
    5
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        resteasy-cdi</artifactId>
        <version>3.0.6.Final</version>
    </dependency>

    转到我的war / WEB-INF / lib。

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

    1
    2
    3
    4
    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的建议。所以

  • 为什么resteasy-cdi中断了部署?是否有记录该问题的票证?
  • 否则如何将resteasy与WELD集成?
  • 感谢您的帮助。

    更新1

    在进行了一次调试之后,问题很简单:resteasy-cdi需要一个具体的CDI实现才能工作,这意味着我应该包含

    1
    2
    3
    4
        <dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            weld-servlet</artifactId>
        </dependency>

    在我的作品中。

    另一个说明是关于配置官方文档中提到的WELD的。当我在web.xml中包含这两个侦听器时,

    1
    2
    3
    4
    5
    6
    <listener>
       <listener-class>org.jboss.weld.servlet.WeldInitialListener</listener-class>
    </listener>
    <listener>
       <listener-class>org.jboss.weld.servlet.WeldTerminalListener</listener-class>
    </listener>

    我的localhost.log中出现以下错误

    1
    2
    3
    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?

    我不确定文档是否有误,但是用

    替换了侦听器

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

    成功完成了把戏和战争文件的部署。


    我已经在官方焊接论坛中提出了Singleton is not set例外,这是文档中的错误。就像您所做的那样,您应该使用\\'original \\'org.jboss.weld.environment.servlet.Listener