【发布时间】: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
一些场景细节:
- 如果我删除 WAR2,则 WAR1 进行的注入开始起作用。
- 两个工件(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