0

我有一个包含一些 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
4

1 回答 1

0

不幸的是,使用JBoss 6.1.0 ASpackaged withWeld 1.1.Beta2真的不起作用。作为测试,尝试了相同的实现,Glassfish 3.1.2注入CDI就像一个魅力。

于 2013-07-25T11:32:00.433 回答