当前位置: 首页 > 知识库问答 >
问题:

EJB:单例会话bean或更像应用程序bean

齐锐进
2023-03-14

我正在再次浏览Javaee7 oracle文档,下面是所述内容。

“单个会话bean在每个应用程序中实例化一次,并在应用程序的生命周期内存在。单个会话bean是为单个企业bean实例在客户端之间共享并由客户端并发访问的情况而设计的。”

我完全明白它在说什么。然而,仔细想想,session这个词在这里是非常误导人的。由于它存在于应用程序级别,“会话”一词在这里似乎不适用。

当我想到会话这个词时,我认为每个用户都是一个会话。如果单例会话bean用于跨应用程序,那么它不应该被称为会话bean(相反,应用程序bean可能会更好地理解)。

有什么意见吗?

共有2个答案

叶鸿煊
2023-03-14

当我想到会话这个词时,我认为每个用户都是一个会话

本上下文中的术语“会话”是指工作单元或业务事务。

在无状态和单例bean中,新的会话/业务事务在新请求到达时打开,并一直存在到将响应发送回客户机为止。(每个请求的会话模式)

对于有状态会话bean,业务事务可能意味着多个客户端请求。从有状态bean的角度来看,客户机是一个将请求发送到同一个有状态实例的代理。

编辑(评论太长)

我认为applicationbean可能是一个很好的名字,事实上,它们很适合存储应用程序设置,但关键是为什么它们被称为会话Bean。

在此上下文中,“会话”是业务事务执行的时间段。对于无状态和单例,此周期与请求/响应周期匹配。

...如果单例会话bean是跨应用程序的,那么它不应该被称为会话bean吗

Singleton在客户端调用之间保持其状态的事实并不意味着每个请求的会话模型不适用。应用程序中使用的每个Singleton引用都是一个客户端,当客户端发出请求时,将创建一个新会话。

薛保臣
2023-03-14
  • 无状态-会话持续一个客户端操作
  • 有状态-会话在客户端的整个操作中持续
  • 单例-会话在应用程序的客户端之间持续
 类似资料:
  • > 在EJB3.0及其之前的版本中,该问题是如何处理的? 如果它保留了客户端特定的会话状态,那么单个实例将拥有所有客户端(试图并发访问)的特定数据?它会安全吗?? 如果我们可以在其他会话bean中使用静态最终变量和静态初始值设定项块或静态方法来初始化它们(因为静态变量也是每个类的数据,而不是每个实例的数据),以便跨bean共享公共数据,那么单例会话bean需要什么呢? 在singleton中使用业

  • 问题内容: 我编写的应用程序的唯一目的是执行CRUD操作以维护数据库中的记录。在某些表/实体之间存在关系。我在创建会话Bean时看到的大多数示例都涉及与许多我没有的实体进行交互的复杂的业务逻辑/操作。 由于我的应用程序非常基础,因此会话bean的最佳设计是什么? 我当时在考虑每个实体有一个会话bean,而CRUD定义了这些实体。然后,我想到了将所有这些会话bean合并到一个会话bean中的想法。然

  • 如果使用EJB3单例会话Bean,那么让ConcurrentHashMap状态变量-correct没有意义?我可以只使用一个由容器并发管理器管理的常规HashMap?

  • 对于有状态会话bean(SFSB)和无状态会话bean(SLSB)的用法,我有点困惑。 我知道SFSB与客户保持状态。这很有帮助:什么时候使用有状态会话bean而不是无状态会话bean? 这里和许多其他地方提供的示例是SFSB的购物车。 “如果一个任务需要一系列方法调用(不止一次),并且您需要保留以前的结果以在下一次调用中使用它们,那么就可以使用SFSB”--Source。这将更像是签出(页面之间

  • 我有一个会话作用域bean,它使用代理注入到单例bean中。 从单例bean中,我需要调用会话作用域bean的某个初始化方法,它需要单例bean作为参数。此外,我不能改变会话范围bean的来源。 为了详细说明这个情况: 单例bean是一个服务,会话范围bean是一个Vaadin4Spring事件总线,为此我需要调用方法。 似乎没有办法检查,如果我已经订阅,并且我不能在某个实例上两次调用订阅。 有没

  • 有人能解释这两个SpringBean作用域之间的区别吗?我熟悉单例模式。 这是唯一的区别吗?使用application scope,您可以在Spring容器中拥有一个beans列表。 此外,您是否能够在一个Spring容器中运行多个Web服务器?如果是,那将是使用应用程序范围而不是单例范围的原因,因为否则bean将在两个服务器上共享。