Head first EJB声明在无状态会话bean的情况下:
客户端不共享
EJBObject
,但同一个bean可以提供多个服务EJBObjects
我没有看到任何理由说明单个EJBObject无法为多个客户端提供服务 此外,如果本书所述的内容是正确的,那么如果我们必须为每个客户端创建一个EJBObject,那么从合并bean中获得的优势是什么?
答案 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池的其他优点。 :)