我想我在这里有一个基本的理解问题,我希望有人能向我解释一下。
假设我们有一个有状态的 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/