Tomcat,WELD 3,CDI 2,WeldTerminalListener

时间:2018-04-05 12:55:07

标签: tomcat listener cdi weld

尝试使用CDI 2.0设置maven web项目,该项目应该在Tomcat 8.5上运行。所以我必须安装jboss WELD 3.

What is the relation between Weld, CDI and Java EE versions?

POM声明离开这里(只有“weld-servlet-core”)......

WELD - POM declaration (docs.jboss.org)

我在web.xml中声明的“WeldTerminalListener”出现错误:

<!-- This listener should always be the last registered listener -->
<listener>
    <listener-class>org.jboss.weld.servlet.WeldTerminalListener</listener-class>
</listener>

错误:java.lang.ClassNotFoundException:org.jboss.weld.servlet.WeldTerminalListener

如果我使用以下POM声明,它可以正常工作:

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

weld-servlet(不带“-core”)3仅作为alpha使用。版本2不支持CDI 2.0。

为了让它运行,我需要在POM中使用哪种依赖?

2 个答案:

答案 0 :(得分:0)

关于 weld-servlet-core 库的3.x版本,似乎该类的实际位置不同。在浏览了库 jar 文件之后,我发现该类的全名如下:

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

答案 1 :(得分:0)

Weld 3更改了一些工件名称。这是已更改的library(tcltk2) mydata <- data.frame() string_val <- "Hello World" fupdate <- function(){ rbind(mydata , string_val) } tclTaskSchedule(5000, fupdate(), id = "fupdate", redo = TRUE) 工件,请参阅this part of documentation

即,在Weld 2中shaded是此JAR的着色版本,因此Weld 3中的等效项为weld-servlet-shaded

在您的情况下,您可以使用此着色版本(weld-servlet)或核心版本(org.jboss.weld.servlet:weld-servlet-shaded)。

至于监听器的类,你可以check yourself on GH,但故事也被改变了(在JDK 9+中打包冲突问好)。 现在是:

org.jboss.weld.servlet:weld-servlet-core

焊接文档(适用于3.0.3.Final)有关于此的错误信息。 我会确保它已经针对下一个版本进行了更正(感谢您指出这一点)。