当前位置: 首页 > 知识库问答 >
问题:

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

薛墨一
2023-03-14

使用WildFly8.1,我有几个bean,我尝试将几个EJB相互注入。假设我有三个豆子:

@Stateless 
public class A{
  @Inject
  private B b;
}

@Stateless 
public class B{
  @Inject
  private C c;
}

@Stateless 
public class C{
  @Inject
  private A a;
}

很明显,我有循环依赖。根据规格:

抱歉,如果这个问题太琐碎了。我将感谢任何良好的进一步阅读来源,将解释呈现的行为。提前道谢。

更新OK。我找到了变通办法。我使用了@EJB注释而不是@Inject,但这并不能解释@Inject的奇怪行为。这个问题仍然没有解决,但正如Mika所建议的,它可能是CDI规范和Weld RI中未解决的问题。

共有1个答案

严亦
2023-03-14

这是WildFly/JBoss CDI实现中的一个bug。问题说明https://issues.jboss.org/browse/CDI-414中提供的当前解决办法(如@MikeBraun所建议的)是使用@EJB注释而不是@Inject。

 类似资料:
  • 异常0:org.jboss.weld.exceptions.deploymentexception:weld-001443:伪作用域bean具有循环依赖关系。依赖关系路径:-托管Bean[class com.my.own.bounded_contexts.client.cache.CacheClientCommPriorizedAcceptRequestService],带有限定符[@any@de

  • 在使用@inject部署两个无状态会话bean时,我遇到了一个部署错误。 部署时,我从Glassfish/Weld得到这个异常: org.jboss.weld.exceptions.DeploymentException:WELD-001443伪作用域bean具有循环依赖关系。 首先-焊接内部发生了什么,这是不允许的? 第二(可能更重要)--这种做法在体系结构方面是不好的吗?如果是的话,你知道什么

  • 问题内容: Java中的无状态Bean不会在两次客户端调用之间保持其状态。因此,简而言之,我们可以将它们视为具有业务方法的对象。每个方法都带有参数并返回结果。调用该方法时,将在执行堆栈中创建一些局部变量。当该方法返回时,将本地对象从堆栈中删除,并且如果分配了一些临时对象,则无论如何都会对其进行垃圾回收。 在我看来,这与通过单独的线程调用同一实例的方法没有什么不同。那么,为什么容器不能使用bean的

  • 我是JavaEE的新手,我试图找出无状态和有状态会话bean之间的区别。到目前为止我所理解的: 1.)在有状态会话bean中,bean的状态与客户机绑定;因此,只要我们与同一个用户在同一个会话中,就应该有相同的bean实例状态 2.)在无状态会话bean中,没有绑定到会话和客户机的状态;事实上,bean实例可以在用户的每次调用或请求中进行交换 为了尝试这一点,我编写了一个简短的servlet,它只

  • 1)对于上面的代码,如果LogSearchRemote实现bean是有状态的,那么 没有错误,但是如果LogSearchRemote实现bean是无状态的,那么会抛出异常“$Proxy53不能强制转换为hk.gov.ehr.service.tch.als.admin.logsearch.ejb.LogSearchRemote”,为什么? 2)对于有状态会话bean,每次 返回不同的logSearc

  • Spring文档——根据经验,所有有状态bean都应该使用原型范围,而无状态bean应该使用单例范围。 因此,当您必须跨上下文一致地维护一些状态/数据时,有状态bean是必要的。说银行应用程序。您希望您的对象在各种操作(存款、取款等)中保持同步。 因此,在单例范围内,您会得到同样的事情——跨上下文的对象一致性。 那么,为什么javadoc会声明Opposite呢? 帮助!!:)