从多个线程访问EJB主对象是否安全?

时间:2010-10-21 06:33:57

标签: concurrency ejb

我已阅读此主题:J2EE/EJB + service locator: is it safe to cache EJB Home lookup result ? 我使用相同的方法,即我为我的实体bean获取EJB home对象并将其缓存在servlet中。

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

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

有人有想法吗?对spec / doc中确切位置的引用也是非常受欢迎的。

3 个答案:

答案 0 :(得分:3)

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

应用服务器通常会创建bean的EJBHome或EJBLocalHome的一个实例,并将其直接绑定到JNDI以供所有要共享的应用程序使用。我敢打赌,如果你从一个servlet里面查看你的EJBLocalHome两次并且在两者上做了==比较,那么它就是完全相同的实例。

答案 1 :(得分:-1)

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

考虑到这一点, EJB 2.1主页对象的每次使用都应被视为不安全。你可以更好地研究更加理智的EJB 3方法,而不是浪费任何时间使用EJB 2.x.

答案 2 :(得分:-2)

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

首先获取EJBHOme对象,我们获得了同步对象的帮助,例如Properties和Hashtable

其次,如果我们实现BusinessDeleigate Design Pattern来缓存EJBHome对象,我们使用Synchronized Map来存储EJBHome。所以一次只有一个线程可以访问EJBHome。