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

时间:2011-07-09 03:39:20

标签: java cdi jboss-weld

我在玩Weld-SE。我有一个可插拔模块的项目。使用一个模块,焊接工作。当使用weld-servlet-core的其他模块放在类路径上(带有它的deps)时,CDI停止工作,出现“无法解析依赖关系XY”或(在删除@Inject之后)这样的错误:< / p>

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)
    ...

虽然该类有@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依赖项:copy-dependencies java -cp ... org.jboss.jawabot.JawaBotApp或者只是在NetBeans中运行Web模块。

谢谢,Ondra

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

1 个答案:

答案 0 :(得分:1)

这是因为使用了Weld的扫描扩展程序<weld:scan>

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

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