EJBObject在客户端之间共享?

时间:2016-03-05 15:02:37

标签: java ejb ejb-3.0 ejb-2.x

Head first EJB声明在无状态会话bean的情况下:

  

客户端不共享EJBObject,但同一个bean可以提供多个服务   EJBObjects

我没有看到任何理由说明单个EJBObject无法为多个客户端提供服务 此外,如果本书所述的内容是正确的,那么如果我们必须为每个客户端创建一个EJBObject,那么从合并bean中获得的优势是什么?

1 个答案:

答案 0 :(得分:1)

首先,必须了解EJBObject是什么:

  

EJBObject 接口由所有企业bean的远程接口扩展。企业bean的远程接口提供EJB对象的远程客户端视图。企业bean的远程接口定义了远程客户端可调用的业务方法。

清除它后,请考虑以下本地EJB示例:

public class SomeClass {

    @EJB
    private SomeBean someBean;
    ...
}

基本上,我们的EJBObject只不过是引用EJB SomeClass的类SomeBean的属性。

正在发生的事情是,从容器的角度来看,他并没有真正创建和注入EJB SomeBean的专用实例。相反,他正在实例化EJB SomeBean,将其存储在他的EJB池中,为此实例创建代理并将代理注入我们的类SomeClass

因此,对于每个客户端,您只有一个EJBObject代理,但是,在 Head First 状态下,同一个bean可以提供多个EJBObjects

  

...如果我们必须为每个客户端创建一个EJBObject,我们从池中获得的优势是什么?

嗯,例如,线程安全:如果您有多个SomeClass实例,同时调用someBean的方法,则保证这些调用将会永远不会委托给同一个实例,因为无状态会话实例仅在单个方法调用的持续时间内专用于EJB对象

this answer可以在Will Hartung上找到EJB池的其他优点。 :)