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

use*_*072 5 java java-ee-6 ejb-3.1

我想我在这里有一个基本的理解问题,我希望有人可以向我解释.

假设我们有一个有状态的EJB_A和一个有状态的EJB_B和一个有会话的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;
}
Run Code Online (Sandbox Code Playgroud)

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

我不明白,因为我认为有状态EJB的重点是,每个客户端只有一个实例由EJB-Container创建和共享和管理.有人可以向我解释一下吗?还请解释我如何实现EJB的同一个实例由多个其他EJB共享?

谢谢

Car*_*ini 9

是的,你混淆了不同的概念和不同的APIS ......我宁愿在@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;
}
Run Code Online (Sandbox Code Playgroud)