EJB无状态会话bean和有状态会话bean

时间:2010-08-27 18:58:51

标签: ejb-3.0

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

4 个答案:

答案 0 :(得分:10)

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

EJB3无状态bean和有状态bean实际上是POJO(带有一些注释),它们与普通类没有任何重大差别。

但就使用而言,他们有一些在普通课程中找不到的能力,如:

  • 可以远程调用它们(例如RMI协议)。
  • 他们可以使用应用服务器上下文资源,如DB Connection和Transactions。

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

http会话还是有状态的?

ejbs可以在应用程序服务器中提供,它们可能有不同类型的客户端,如普通的swing应用程序或......,因此在这些情况下你无法在http会话中进行转发。

如果您的appserver和Web服务器不同(分布式),那么将数据保存在http会话中并将数据传递给应用服务器(网络开销)是非常好的主意。

答案 1 :(得分:1)

  • 无状态会话bean是轻量级的:它们不存储有关特定用户的信息。它们通常以静态方式使用。例如,客户端要求产品信息将与无状态会话bean通信。 (“你想要产品'YXZ'的价格,在这里你去!”)

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


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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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