首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话bean的会话状态

会话bean的会话状态
EN

Stack Overflow用户
提问于 2011-03-01 10:06:46
回答 3查看 4.1K关注 0票数 9

我正在读一本关于Java 6的书,我看到了以下几部分:

“无状态:会话bean不包含方法之间的会话状态,任何实例都可以用于任何客户端。”

“状态:会话bean包含会话状态,必须为单个用户跨方法保留会话状态。”

“会话状态”是什么意思?有没有现实世界的例子来解释呢?

提前谢谢。

II.为什么这种豆类分类如此重要?对于初学者(一见钟情)都没有正确的解释,所以多亏了你,我得到了逻辑上的区别,但为什么这种行为如此重要?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-01 10:51:13

在最基本的情况下,“会话状态”是指实例字段的值。

对于无状态会话bean,容器并不保证后续的方法调用将使用相同的EJB实例(来自池),因此您不能假设在调用bean方法时放置的值在再次调用该方法(或bean的另一种方法)时仍然存在。

对于有状态会话bean,容器保证后续调用将使用相同的EJB实例,因此可以保留实例字段值。

为了举个例子,假设您有一个bean,它有一个增量()和一个检索()方法。增量将增加存储值,并检索当前存储值。

对于无状态会话bean,如果您5次调用增量()方法,就不能保证当您执行检索()时,您将得到一个5,这取决于它将分配给您调用的容器。因此,如果为您分配了一个新的EJB实例,那么您将得到一个零。容器也可能没有清理您的EJB实例,因此可能会得到一个5 --但它不能保证。

对于有状态会话bean,如果您5次调用增量方法,当您检索值时,将得到一个5。容器保证第一次调用时使用的EJB将用于所有后续调用。

票数 17
EN

Stack Overflow用户

发布于 2011-03-01 11:08:28

一个真实的对话状态的例子就是购物车。用户可以一个一个地向购物车中添加几个项目,然后调用结帐。所有增加的时间都会在那里

假设购物车是有状态的,即它将保持会话状态。

代码语言:javascript
复制
cart.add(item1);  // suppose cart keep tracks of item by adding it to ArrayList
cart.add(item2);

cart.checkOut();    // at this stage both item1 and item2 would be there in ArrayList.

如果购物车是无状态的,那么每个调用都将独立于以前的调用,并且在结帐时它什么也不能拥有。

对于第二点,区分是必要的,因为两个bean的行为不同。因此,维护状态需要资源,因此有状态bean不像无状态bean那样可伸缩。

票数 5
EN

Stack Overflow用户

发布于 2013-08-04 21:43:43

关于问题的第二部分,您可以从java 6教程中阅读以下内容:

时toUse会话Beans 如果下列任何条件为真,则有状态会话bean是适当的。

  • bean的状态表示bean与特定客户端之间的交互。
  • bean需要跨方法调用保存有关客户端的信息。
  • bean在客户端和应用程序的其他组件之间进行中介,向客户端呈现一个简化的视图。
  • 在幕后,bean管理几个企业bean的工作流。

为了提高性能,您可以选择一个无状态会话bean,如果它有这些特性的话。

  • bean的状态没有特定客户端的数据。
  • 在单个方法调用中,bean为所有客户端执行一个通用任务。例如,您可以使用无状态会话bean发送确认在线订单的电子邮件。
  • bean实现了一个web服务。

Java 6教程

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5153012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档