WELD-001409 不明确的依赖关系
WELD-001409 Ambiguous dependencies
我想像这样将我的 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?有人可以向我解释一下吗?
非常感谢!
EJB 和 CDI 是上下文和依赖注入概念的两种不同实现。而且一起处理的时候一定要非常小心。我在错误字符串中看到 Glassfish "think",无状态 bean 也是 CDI bean,但将它们的定义保存在两个分开的篮子中。
尝试将 @Inject
注释替换为 @EJB
。我想它解决了问题。
对于将来寻找解决方案的任何人:从 Glassfish 4.0 迁移到 4.1 解决了这个问题。不要问我为什么
我想像这样将我的 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?有人可以向我解释一下吗? 非常感谢!
EJB 和 CDI 是上下文和依赖注入概念的两种不同实现。而且一起处理的时候一定要非常小心。我在错误字符串中看到 Glassfish "think",无状态 bean 也是 CDI bean,但将它们的定义保存在两个分开的篮子中。
尝试将 @Inject
注释替换为 @EJB
。我想它解决了问题。
对于将来寻找解决方案的任何人:从 Glassfish 4.0 迁移到 4.1 解决了这个问题。不要问我为什么