4

在我的 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, unsatisfied dependency

所有模块都beans.xml在适当的位置,只要我不切换到注入,它们都可以工作。大多数目标 bean 已经作为 JSF 中的注入 bean 使用。有效的 Java EE 模块的特别之处在于 bean 被注入到 web 模块中的 servlet,而不是 JSF。

该项目在 GlassFish 3.1 中使用 Java EE 6、EJB 3.1 运行。依赖项由 Maven 3 管理。X它本身就是Serializable,以满足钝化范围。

你以前遇到过这个吗?我做错了什么?

更新:在上面添加了依赖管理备注。

更新:更正了@Actualin的位置Target

更新:经过一天的实验,更新了描述,提供了更多细节。

4

2 回答 2

1

这似乎是 Glassfish 3.1、其包含的库之一或 JDK 6 中的问题。

我刚刚将我的系统更新到 Glassfish 3.1.1 和 JDK 7,并且不再出现问题。

于 2011-07-29T10:03:21.457 回答
0

在我最近对 ​​Weblogic 的体验中,我发现包含下划线的名称空间会阻止 EJB 模块注入任何 bean。

我建议你也试试 Glassfish。

问候!

于 2020-10-08T07:22:47.313 回答