java - 使用weld-se-core 和weld-servlet-core 时CDI 停止工作?

标签 java cdi jboss-weld

我正在玩 Weld-SE。我有一个具有可插入模块的项目。只需一个模块,即可进行焊接。当其他模块使用weld-servlet-core时,放在类路径上(及其依赖项),CDI 停止工作,给出诸如“无法解析依赖项 XY”之类的错误或(删除 @Inject 后):

Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001417 Enabled interceptor class <class>org.jboss.weld.environment.se.jpa.JpaTransactionInterceptor</class> in jar:file:/mnt/ssd1/data/.m2/repository/org/jboss/jawabot/JawaBot-core/2.0.0-SNAPSHOT/JawaBot-core-2.0.0-SNAPSHOT.jar!/META-INF/beans.xml@11 is neither annotated @Interceptor nor registered through a portable extension
    at org.jboss.weld.bootstrap.Validator.validateEnabledInterceptorClasses(Validator.java:466)
    ...

虽然类(class)有@Interceptor (同一个类可以与其他模块一起正常工作)。

当我调试WeldBootstrap#startContainer(Environment environment, Deployment deployment)时, deployment.beanDeploymentArchive.beanClasses包含拦截器 ("org.jboss.weld.environment.se.jpa.JpaTransactionInterceptor")。

我检查了依赖项和 TattleTale 报告,它们看起来都很好。

有什么想法我下一步应该看看/尝试什么吗?

该项目位于http://ondrazizka.googlecode.com/svn/trunk/bots/JawaBot/branches/2.0/要查看错误,请运行 mvn dependency:copy-dependency java -cp ... org.jboss.jawabot.JawaBotApp 或者直接在 NetBeans 中运行 Web 模块。

谢谢,昂德拉

更新: JIRA:https://issues.jboss.org/browse/WELD-940
另外,我发现这可能是由 Weld 的扫描扩展中的错误引起的,<weld:scan> .

最佳答案

这是由于使用Weld的扫描扩展<weld:scan>引起的:

<includes>元素包含包通配符,这导致两个“包”中的类匹配(在 CDI/Weld 的术语 IIUC 中为 .jar)。

我不确定是否我使用不当或者这是一个错误。
请参阅 JIRA:https://issues.jboss.org/browse/WELD-940

关于java - 使用weld-se-core 和weld-servlet-core 时CDI 停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6632556/

相关文章:

java - 如何在 JComboBox 中显示自定义对象(使用 toString)

java - CDI 缺少@ViewScoped 和@FlashScoped

java-ee-6 - 有状态 session Bean 的钝化问题

Java Weld CDI 替代工厂

jakarta-ee - 如果通过 Provider.get() 获取 @Dependent 作用域的 CDI bean,何时会销毁该 bean?

java - Spring未初始化bean

java - Android:如何在quickblox中获取在线或离线用户状态?

java - 如何将字符串数组翻译为另一种语言?

java - beans xml是如何合并的?

java - 由于公私字段悖论,无法使用 Junit @Rule 进行 CdiUnit 测试