我想知道......假设我在ejb 3.1中有两个无状态bean:
@Stateless 的Class1
@EJB MyUniqueInstanceBean uniqueBean1;
2
@Stateless
Class2
@EJB MyUniqueInstanceBean uniqueBean2;
uniqueBean1和uniqueBean2是否保证是MyUniqueInstanceBean的唯一实例?
答案 0 :(得分:2)
如果MyUniqueInstanceBean是无状态,那么您手中没有对uniquebean1的调用,而uniquebean2实际上是对同一实例的调用。在EJB 3.1规范中,这用以下词语告知:
因为无状态会话bean的所有实例都是等效的, 容器可以选择将客户端调用的方法委托给任何方法 可用实例。这意味着,例如,容器可以 在同一事务中委托来自同一客户端的请求 到不同的实例,并且容器可以交错请求 从多个事务到同一个实例。
如果MyUniqueInstanceBean是有状态,则保证uniquebean1和uniquebean2不引用同一个实例。再次来自规范:
会话bean实例的生命在客户端获取时开始 通过依赖引用有状态会话bean实例 注入或JNDI查找,或者当客户端在会话bean的home接口上调用create方法时。这导致 用于在会话bean类上调用newInstance的容器 创建一个新的会话bean实例。
如果您使用 Singleton ,那么两者都引用相同的实例,因为只有一个实例:
Singleton会话bean是一个会话bean组件 每个应用程序实例化一次。在容器是的情况下 分布在许多虚拟机上,每个应用程序都有一个 每个JVM的Singleton的bean实例。