Java 为什么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

在我的JavaEE项目中,有几个“JavaEE”模块和一个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;
      }
   }
但是,这只适用于一个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年前得到了回答吗?你意识到我的答案在将来可能对其他人有用吗?