WELD-001409不明确的依赖关系



我想将我的ejb"ProfileEJB"注入到我的jsf托管bean"SampleController"中,如下所示:

@Stateless
@LocalBean
public class ProfileEJB {
    @PersistenceContext
    private EntityManager em;
    public Profile create(Profile p) {
        em.persist(p);
        return p;
    }
}

采样器控制器:

@Named(value = "sampleController")
@ViewScoped
public class SampleController {
    @Inject
    private ProfileEJB profileBean;
    public SampleController() {
    }
}

问题是我得到以下错误:

CDI deployment failure:WELD-001409 Ambiguous dependencies for type [ProfileEJB] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private com.example.controller.SampleController.profileBean]. Possible dependencies [[Session bean [class com.example.ejb.ProfileEJB with qualifiers [@Any @Default]; local interfaces are [ProfileEJB], Session bean [class com.example.ejb.ProfileEJB with qualifiers [@Any @Default]; local interfaces are [ProfileEJB]]]

我可以从消息中理解有两个相同的bean,它无法决定注入哪个bean,但我不知道为什么有两个同样的bean?有人能给我解释一下吗?非常感谢!

EJB和CDI是上下文和依赖注入概念的两种不同实现。在一起处理的时候你必须非常小心。我在错误字符串中看到Glassfish"认为",Stateless bean也是CDI bean,但将它们的定义保存在两个独立的篮子中。

尝试将@Inject注释替换为@EJB。我想它解决了问题。

对于未来寻找解决方案的任何人来说:从Glassfish 4.0迁移到4.1解决了问题。不要问我为什么

最新更新