Concurrency 从多个线程访问EJB主对象安全吗?

Concurrency 从多个线程访问EJB主对象安全吗?,concurrency,ejb,Concurrency,Ejb,我读过这篇文章: 我使用相同的方法,即获取实体bean的EJB主对象,并将其缓存在servlet中 我的问题是:在多个线程之间共享此对象安全吗 从EJB2.1规范中,我发现只有[通过本地/远程接口]对实体bean的并发调用由容器内部序列化。 但是,该规范不会扩展对主对象的并发调用 有人有主意吗?在spec/doc中引用确切的位置也是非常受欢迎的。EJBHome和EJBObject同样是线程安全的。容器对这些实现的线程安全承担全部责任 应用服务器通常会创建bean的EJBHome或EJBLocal

我读过这篇文章: 我使用相同的方法,即获取实体bean的EJB主对象,并将其缓存在servlet中

我的问题是:在多个线程之间共享此对象安全吗

从EJB2.1规范中,我发现只有[通过本地/远程接口]对实体bean的并发调用由容器内部序列化。 但是,该规范不会扩展对主对象的并发调用


有人有主意吗?在spec/doc中引用确切的位置也是非常受欢迎的。

EJBHome和EJBObject同样是线程安全的。容器对这些实现的线程安全承担全部责任


应用服务器通常会创建bean的EJBHome或EJBLocalHome的一个实例,并将其直接绑定到JNDI中,以便所有应用程序共享。我敢打赌,如果您从servlet内部查找EJBLocalHome两次,并对这两个实例进行==比较,很有可能它是完全相同的实例。

我认为EJBHome不是线程安全的,因为

首先要获得EJBHOme对象,我们需要同步对象的帮助,比如属性和哈希表


第二,如果我们实现BusinessDelegate设计模式来缓存EJBHome对象,我们将使用同步映射来存储EJBHome。所以一次只有一个线程可以访问EJBHome。

除了技术安全,还有心理安全问题

考虑到这一点,每次使用EJB2.1的主对象都应该被认为是不安全的。与在EJB2.x上浪费时间相比,研究更理智的EJB3方法会更好