在我的 Java EE 项目中,有几个“Java EE”模块和一个 Web 模块。 Java EE 模块之一为 CDI 提供了一个类,供其他模块使用:
@ApplicationScoped
public class XFactory {
@Produces @Actual
public X create() {
return new X();
}
}
它们被注入(inject)
@SessionScoped
public class Target implements Serializable {
X x;
@Inject
public void setX(@Actual X x){
this.x = x;
}
}
但是,这仅适用于 Java EE 模块之一和 Web 模块。在所有剩余的 Java EE 模块中,注入(inject)始终失败,我对原因一无所知:我得到的只是WELD-1408,未满足的依赖性。
所有模块在适当的位置都有 beans.xml
,只要我不切换到注入(inject),它们都可以工作。大多数目标 bean 已经在 JSF 中用作注入(inject) bean。
Java EE 模块的特别之处在于,bean 被注入(inject)到 web 模块中的 servlet,而不是 JSF。
该项目在 GlassFish 3.1 中使用 Java EE 6、EJB 3.1 运行。依赖关系由 Maven 3 管理。X
本身是 Serializable
,以满足钝化范围。
你以前遇到过这个吗?我可能做错了什么?
更新:在上面添加了依赖管理备注。
更新:更正了 @Actual
在 Target
中的位置。
更新:经过一天的实验,更新了包含更多详细信息的描述。
最佳答案
这似乎是 Glassfish 3.1 中的一个问题,在它包含的库之一中,或者可能在 JDK 6 中。
我刚刚将我的系统更新到 Glassfish 3.1.1 和 JDK 7,问题不再出现。
关于java - 为什么 CDI 注入(inject)在某些模块中无法工作,而在其他模块中却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6859286/