【问题标题】:EJB stateless session beans and stateful session beanEJB 无状态会话 bean 和有状态会话 bean
【发布时间】:2010-08-27 18:58:50
【问题描述】:

我已经阅读了有关有状态和无状态会话 bean 以及它们如何工作的各种书籍。我想知道这些 ejb 的真正用法以及使用普通 java 类的优势。基本上你什么时候选择无状态 ejb,什么时候选择有状态 ejb。我想要一个实时应用程序。

【问题讨论】:

标签: ejb-3.0


【解决方案1】:

这些类型的ejb的使用通常在服务层作为服务类。

EJB3 无状态和有状态 bean 实际上是 POJO(带有一些注解),它们与普通类没有什么大的区别。

但在使用方面,它们具有一些您在普通课程中找不到的能力,例如:

  • 可以远程调用它们(例如 RMI 协议)。
  • 他们可以使用数据库连接和事务等应用服务器上下文资源。

无状态或有状态: - 如果一个任务或流程可以在一个步骤中完成(通过一个方法调用)无状态是正确的选择 就像一个认证过程 - 如果一个任务需要一系列方法调用(不止一个),并且您需要保留以前的结果以便在下次调用中使用它们,那么就选择有状态的。 就像一个运输过程(选择项目,添加/删除然后进行交易)

http 会话还是有状态的?

ejb 可以在应用服务器中提供服务,并且它们可能具有不同类型的客户端,例如普通的 Swing 应用程序或...,因此在这些情况下您不能中继 http 会话。

如果您的应用服务器和网络服务器不同(分布式),则将数据保存在 http 会话中并将其传递/取回应用服务器(网络开销)是不好的。

【讨论】:

  • 为了保持状态我们可以使用http会话
  • @Suresh:是的,这也是正确的,这取决于您选择正确的位置来保持状态。
  • 你什么时候去 http 会话 vs 有状态也无状态
  • @Suresh 看看我回答的最后一部分
【解决方案2】:
  • 无状态会话 bean 是轻量级的:它们不存储有关特定用户的信息。它们通常以静态方式使用。例如,客户请求产品信息将与无状态会话 bean 进行通信。 (“你想要产品'YXZ'的价格,给你!”)

  • 有状态会话 bean 但是记住客户端信息。它们包含有关用户操作的数据。例如,假设用户浏览购物车。这些步骤将存储在有状态会话 bean 中(例如,在付款步骤中使用它)。


您确实需要在任何网站中使用这两种类型的会话 bean。除非您的网站是如此基础,以至于可以使用无状态会话 bean 来完成任何事情(实际上是一个只读网站)。

任何通过 cookie 跟踪用户的网站都需要有状态会话 bean。但是请注意,您可以决定将很少的会话信息放入会话 bean 并将该信息存储在数据库中。但是您仍然需要一些会话管理。

【讨论】:

  • 我到处都读过。但我想知道你什么时候喜欢,你使用它们的经验。
  • 我们可以使用httpsession来维护客户端状态。
【解决方案3】:

开发人员更喜欢在现代企业应用程序的 Web 层中维护状态。我从未见过使用有状态会话 Bean 的真实世界 Web 应用程序。这也是一个可扩展性问题。

【讨论】:

    【解决方案4】:

    一个例子是一个购物车状态会话 bean,它跟踪客户的产品选择并可以在请求时执行销售。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多