在我的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
的位置。
更新:经过一天的实验后,更新了详细说明。
答案 0 :(得分:1)
这似乎是Glassfish 3.1,其中一个包含的库或JDK 6中的问题。
我刚刚将系统更新为Glassfish 3.1.1和JDK 7,问题不再发生。
答案 1 :(得分:0)
根据我最近在Weblogic上的经验,我发现包含下划线的名称空间会阻止EJB模块注入任何bean。
我建议您也尝试使用Glassfish。
致谢!