【发布时间】:2011-07-28 12:55:10
【问题描述】:
在我的 Java EE 项目中,有几个“Java EE”模块和一个 Web 模块。 其中一个 Java EE 模块为 CDI 提供了一个类,供其他模块使用:
@ApplicationScoped
public class XFactory {
@Produces @Actual
public X create() {
return new X();
}
}
它们被注入
@SessionScoped
public class Target implements Serializable {
X x;
@Inject
public void setX(@Actual X x){
this.x = x;
}
}
但是,这只适用于其中一个 Java EE 模块和 web 模块。在所有剩余的 Java EE 模块中,注入始终失败,我不知道为什么:我得到的只是 WELD-1408,不满足的依赖项。
所有模块在适当的位置都有beans.xml,只要我不切换到注入,它们都可以工作。大多数目标 bean 已经作为 JSF 中的注入 bean 使用。
Java EE 模块的特别之处在于,bean 被注入到 web 模块中的 servlet,而不是 JSF。
该项目在 GlassFish 3.1 中使用 Java EE 6、EJB 3.1 运行。依赖关系由 Maven 3 管理。X 本身就是Serializable,以满足钝化范围。
您以前遇到过这种情况吗?我做错了什么?
更新:上面添加了依赖管理备注。
更新:更正了@Actual在Target中的位置。
更新:经过一天的实验,更新了描述,提供了更多细节。
【问题讨论】:
-
目前还没有答案。我将一步一步地重写模块,看看在什么时候注入失败。不过,仍然感谢您的意见。
-
似乎比我最初想的要多。我关于在该单个项目之外一切正常的说法可能是错误的:即使在最简单的模块中,注入也会失败。我开始想知道为什么它在其中一个中起作用。
标签: java jakarta-ee dependency-injection cdi jboss-weld