JAVA EE 6 在有状态 EJB 之间共享实例

标签 java java-ee-6 ejb-3.1

我想我在这里有一个基本的理解问题,我希望有人能向我解释一下。

假设我们有一个有状态的 EJB_A 和一个有状态的 EJB_B 以及一个 session 范围的 ManagedbeanA:

@Stateful
@LocalBean
public class EJB_A {
}

@Stateful
@LocalBean
public class EJB_B {
  @EJB
  EJB_A ejb;
}
@ManagedBean
@SessionScoped
public class ManagedBeanA {
   @EJB
   EJB_A ejb;
}

在 ManagedBeanA 中,创建了 EJB_A。现在,当我使用将 EJB_A 作为属性的 EJB_B 时,会在 EJB_B 中创建 EJB_A 的新实例。它与之前在 ManagedBeanA 中创建的 EJB_A 实例不同。

我不明白这一点,因为我认为有状态 EJB 的全部要点是,对于每个客户端,只有一个实例由 EJB 容器创建、共享和管理。有人可以向我解释一下吗?并且请解释我如何才能实现一个 EJB 的同一个实例被多个其他 EJB 共享?

谢谢

最佳答案

是的,您混淆了不同的概念和不同的 APIS... 我宁愿使用 @Inject 而不是 @EJB 并指定注入(inject)实例的范围..

@Stateful
@LocalBean
public class EJB_A {
}

@Stateful
@LocalBean
public class EJB_B {
  @Inject @SessionScoped
  EJB_A ejb;
}
@ManagedBean
@SessionScoped
public class ManagedBeanA {
   @Inject @SessionScoped
   EJB_A ejb;
}

关于JAVA EE 6 在有状态 EJB 之间共享实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634318/

相关文章:

java - 在派生类中哪里调用基类的实现?

java - Broadleaf Commerce - 动态定价

java - 覆盖 xml 文件中的 CDI 配置

maven-2 - @WebServices 作为 ejb jar 中的 @Stateless session bean

java - Swing 中的统一工具栏无法正常工作

java - 同步 ArrayList

ejb-3.0 - EJB3 + JEE6 : What is a persistent Timer?

java - @Resource 未注入(inject)到作为 CDI 托管 bean 的 JAX-WS SE 中

ejb - 如何解决 - JBAS014516 : Failed to acquire a permit within 5 MINUTES

java-ee-6 - 运行时 EJB 查找的配置