Java 为什么CDI注入在某些模块中无法工作,而在其他模块中却无法工作?
在我的JavaEE项目中,有几个“JavaEE”模块和一个web模块。 其中一个Java EE模块为CDI提供了一个类,其他模块将使用该类:Java 为什么CDI注入在某些模块中无法工作,而在其他模块中却无法工作?,java,jakarta-ee,dependency-injection,cdi,jboss-weld,Java,Jakarta Ee,Dependency Injection,Cdi,Jboss Weld,在我的JavaEE项目中,有几个“JavaEE”模块和一个web模块。 其中一个Java EE模块为CDI提供了一个类,其他模块将使用该类: @ApplicationScoped public class XFactory { @Produces @Actual public X create() { return new X(); } } 它们被注射到 @SessionScoped public class Target implements Serial
@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;
}
}
但是,这只适用于一个JavaEE模块和web模块。在剩下的所有JavaEE模块中,注入总是失败的,我不知道为什么:我得到的只是WELD-1408,不满意的依赖关系
所有模块在适当的位置都有beans.xml
,只要我不切换到注入,它们都可以工作。大多数目标bean已经作为JSF中的注入bean使用。
工作的JavaEE模块的特殊之处在于,bean被注入到web模块中的servlet中,而不是JSF中
该项目使用GlassFish 3.1中的JavaEE6和EJB3.1运行。依赖项由Maven 3管理X
本身是可序列化的,以满足钝化范围
你以前见过这个吗?我会做错什么
更新:在上面添加了依赖关系管理备注
更新:更正了@Actual
在目标中的位置
更新:经过一天的实验后,更新了描述的更多细节。这似乎是Glassfish 3.1、其中一个包含的库或JDK 6中的一个问题
我刚刚将我的系统更新为Glassfish 3.1.1和JDK 7,问题不再出现。在我最近的Weblogic体验中,我发现包含下划线的名称空间阻止EJB模块注入任何bean
我建议你也试试玻璃鱼
问候 目前还没有答案。我将一步一步地重新编写模块,看看注入在哪一点失败。尽管如此,我还是很感激你的意见。这里似乎有比我最初想象的更多的问题。我所说的在单个项目之外一切正常的说法可能是错误的:注入即使在最简单的模块中也会失败。我开始想知道为什么它会在其中一个中起作用。在接受答案之前,我会在用生产代码替换X
s的过程中进行更多的调查。你知道这已经在9年前得到了回答吗?你意识到我的答案在将来可能对其他人有用吗?