【问题标题】:CDI Injection raises "WELD-001408" for multimodule projectCDI Injection 为多模块项目提出“WELD-001408”
【发布时间】:2013-07-23 17:30:10
【问题描述】:

我有一个包含一些 Web 工件 (.war) 的项目,但我在注入简单 POJO 时遇到了问题。以下代码代表最简单的工作案例:

.war (WAR1)

public class MyManagedBean {
    @Inject
    private MyPojo myPojo;   
}

.war 中的 POJO (WAR1)

public class MyPojo {
    public void doSomething() {}
}

当我添加一个带有相同 POJO (MyPojo) 打包的 Web 工件 (.war --> WAR2) 时,会出现问题。从语义上讲,我希望我的 POJO 在每个 Web 工件中,而不是外部存档 (.jar)。基本上,最新添加的组件(WAR2)与 WAR1 相同,即它模拟就好像它存在一个多模块项目一样。在运行时,容器在尝试使用模块时会引发以下错误:

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [MyPojo] with qualifiers [@Default] at injection point [[field] @Inject private com.projectx.MyManagedBean.myPojo]
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:270) [:6.1.0.Final]
at org.jboss.weld.bootstrap.Validator.validateInjectionTarget(Validator.java:299) [:6.1.0.Final]
at org.jboss.weld.manager.InjectionTargetValidator.addInjectionTarget(InjectionTargetValidator.java:34) [:6.1.0.Final]
at org.jboss.weld.manager.BeanManagerImpl.createInjectionTarget(BeanManagerImpl.java:1055) [:6.1.0.Final]
at org.jboss.weld.manager.BeanManagerImpl.fireProcessInjectionTarget(BeanManagerImpl.java:1249) [:6.1.0.Final]
at org.jboss.weld.integration.injection.Jsr299SimpleNonContextualInjector.inject(Jsr299SimpleNonContextualInjector.java:66) [:6.1.0.Final]
at org.jboss.injection.manager.core.DefaultInjectionContext.proceed(DefaultInjectionContext.java:58) [:1.0.0-alpha-7]
at org.jboss.injection.manager.core.DefaultInjectionManager.inject(DefaultInjectionManager.java:58) [:1.0.0-alpha-7]
at org.jboss.injection.manager.core.DefaultInjectionManager.inject(DefaultInjectionManager.java:64) [:1.0.0-alpha-7]
at org.jboss.web.tomcat.service.TomcatInjectionContainer.processInjectors(TomcatInjectionContainer.java:410) [:6.1.0.Final]
at org.jboss.web.jsf.integration.injection.JBossDelegatingInjectionProvider.inject(JBossDelegatingInjectionProvider.java:77) [:1.0.3]
... 66 more

一些场景细节:

  1. 如果我删除 WAR2,则 WAR1 进行的注入开始起作用。
  2. 两个工件(WAR1 和 WAR2)具有相同的 POJO 和 beans.xml (/WEB-INF)。

我有什么遗漏吗?我所需要的只是注入一个类的可能性,例如“*.Helper”。据我所知,CDI 甚至允许注入原始类型。

  • JDK 1.7
  • JBoss 6.1.0
  • 焊接 1.1.Beta2

【问题讨论】:

  • 哪些依赖没有得到满足?
  • @RobertHarvey 它是“MyManagedBean”中的“myPojo”属性。
  • 您是直接在服务器上部署您的战争还是将它们打包在 EAR 中?
  • @AntoineSabot-Durand 它被部署在扩展的 EAR 中。
  • 我没有关注您的技术栈,但是当您编写 JBoss 6.1.0 时,它是 JBoss AS 而不是 EAP?如果是 AS,请迁移到 JBoss 7.1.1,因为版本 6 有很多错误(尤其是关于类加载,这肯定与您的问题有关)并且被放弃以支持 AS 7.x。

标签: java-ee-6 cdi jboss6.x weld


【解决方案1】:

不幸的是,使用与Weld 1.1.Beta2 打包的JBoss 6.1.0 AS 真的不起作用。作为测试,使用Glassfish 3.1.2CDI 注入尝试了相同的实现,效果很好。

【讨论】:

  • 对 JBoss AS 7.1.1 也是如此
  • @AntoineSabot-Durand 当然!
猜你喜欢
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 2013-08-09
  • 2015-02-16
  • 2014-07-15
相关资源
最近更新 更多