我已阅读此主题:J2EE/EJB + service locator: is it safe to cache EJB Home lookup result ? 我使用相同的方法,即我为我的实体bean获取EJB home对象并将其缓存在servlet中。
我的问题是:在多个线程之间共享此对象是否安全?
从EJB 2.1规范我发现只有对实体bean的并发调用[通过本地/远程接口]由容器内部序列化。 但是,规范不会扩展到对主目标的并发调用。
有人有想法吗?对spec / doc中确切位置的引用也是非常受欢迎的。
答案 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。