【问题标题】:Is it safe to access EJB home object from multiple threads?从多个线程访问 EJB 主对象是否安全?
【发布时间】:2010-10-21 06:33:57
【问题描述】:

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

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

从 EJB 2.1 规范中,我发现只有 [通过本地/远程接口] 对实体 bean 的并发调用由容器在内部进行序列化。 但是,该规范并未扩展对 home 对象的并发调用。

有人有想法吗?对规范/文档中确切位置的引用也非常受欢迎。

【问题讨论】:

    标签: concurrency ejb


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      除了技术安全,还有精神安全问题。

      考虑到这一点,每次使用 EJB 2.1 的 home 对象都应该被认为是不安全的。与浪费任何时间使用 EJB 2.x 相比,您会更好地研究更明智的 EJB 3 方法。

      【讨论】:

        【解决方案3】:

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

        首先要获得EJBHome对象,我们需要借助Properties和Hashtable等同步对象

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-07
          • 1970-01-01
          • 2018-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-27
          相关资源
          最近更新 更多