【问题标题】:why pool stateless bean?为什么池化无状态bean?
【发布时间】:2010-12-16 06:04:48
【问题描述】:

通常我们将单例实例用于业务/道层。在 EJB 的情况下池化无状态会话 bean 的原因是什么?

【问题讨论】:

标签: java ejb-3.0 ejb stateless-session-bean


【解决方案1】:

名称中的“无状态”是指会话会话状态,即在 bean 调用之间持续存在的状态,在会话期间保留。但是,仍然允许无状态会话 bean 具有实例变量。这些实例变量不应与会话状态相关,而是在客户端之间“共享”。

换句话说,无状态会话 bean 不能保证线程安全。

因此,容器应确保一次只有一个线程在执行给定的无状态会话 bean 实例,因此需要一个线程池。

【讨论】:

  • 我认为实例变量在调用之间确实保留了它们的值——实例只是存在于池中。它们可用于缓存非会话资源。同意 Session Beans 显然不是线程安全的,并且当根据 EJB 编程模型使用时,容器确实确保一个线程/请求一次由一个实例提供服务。
  • 注意,这里不能保证变量仍然有值,所以不要依赖它。在对 bean 的方法调用之间的任何时间,容器确实可能将 bean 从可用 bean 池中抛出并销毁它。
【解决方案2】:
  • 因为它们的构建成本很高,通常需要访问数据库、消息队列等外部资源。
  • 因为您不希望创建无限数量的它们,否则您将耗尽资源
  • 这样容器就可以为你管理线程安全

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2012-10-06
    • 2016-04-14
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多