jakarta-ee - 为什么无状态 bean 被视为伪作用域并且不能具有循环依赖关系?

标签 jakarta-ee ejb ejb-3.0 cdi wildfly

使用 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/

相关文章:

ejb-3.0 - EJB3 中的嵌入式对象继承

java - 使用反射调用EJB3

java - 使用@Resource加载环境条目

java - 从 JBoss 中的 servlet 访问 Spring bean

ejb - 无状态 session bean 仅在普通类上提供什么?

java - JPA实体: How to establish relationship between Parent and multiple Child classes

mysql - Jboss mysql - 找不到适合 jdbc 的驱动程序

java - HQL从方法中获取值

java - Wildfly - 如何启用事务以启用延迟加载

html - 动态创建 HTML 和 CSS 元素