@EJB的@Stateless bean保证是一个独特的ejb实例?

时间:2012-05-10 17:04:40

标签: ejb unique ejb-3.1 stateless

我想知道......假设我在ejb 3.1中有两个无状态bean:

  1. @Stateless 的Class1

    @EJB MyUniqueInstanceBean uniqueBean1;

  2. 2

    @Stateless
    Class2
    
    @EJB MyUniqueInstanceBean uniqueBean2;
    

    uniqueBean1和uniqueBean2是否保证是MyUniqueInstanceBean的唯一实例?

1 个答案:

答案 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实例。