使用 Wildfly 8.1 我有几个 bean,我尝试将几个 EJB 相互注入(inject)。假设我有 3 个 bean :
@Stateless
public class A{
@Inject
private B b;
}
@Stateless
public class B{
@Inject
private C c;
}
@Stateless
public class C{
@Inject
private A a;
}
显然,我有循环依赖。根据规范:The container is required to support circularities in the bean dependency graph where at least one bean participating in every circular chain of dependencies has a normal scope
在容器中运行上述代码会导致以下形式的错误:
org.jboss.weld.exceptions.DeploymentException: WELD-001443: Pseudo scoped bean has circular dependencies. Dependency path:
-Session bean [class A with qualifiers [@Default @Any]; local interfaces are [A] BackedAnnotatedField] @Inject private B,
[..]
我的问题是:@Stateless bean 的范围是什么?默认情况下是@Dependent吗?最重要的是如何启用无状态 session bean 之间的循环依赖关系?
对不起,如果问题太琐碎。我将感谢任何可以解释所呈现行为的好的进一步阅读资源。提前致谢。
更新
行。我找到了解决方法。我使用了@EJB 注释而不是@Inject,但这并不能解释@Inject 的奇怪行为。这个问题仍然悬而未决,但正如 Mika 所说,这可能是 CDI 规范和 Weld RI 中 Unresolved 问题。
最佳答案
这是 wildfly/jboss CDI 实现中的一个错误。当前解决方法(由@MikeBraun 建议),在问题描述https://issues.jboss.org/browse/CDI-414 中提供,就是用@EJB注解代替@Inject。
关于jakarta-ee - 为什么无状态 bean 被视为伪作用域并且不能具有循环依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26467608/