我对Java EE 6的读一本书,我会见了以下几个部分:会话状态
“无状态:会话bean包含方法之间没有会话状态,任何 实例可以用于任何客户端。“
“有状态:会话Bean包含会话状态,必须跨单个用户的方法保留 。”
什么是 “会话状态” 是什么意思?有人用真实世界的例子来解释它吗?
在此先感谢。
二,为什么豆类的分类如此重要?它无论是对于初学者还是对初学者都没有提供正确的解释 非常感谢你,我得到了逻辑上的区别,但是为什么这种行为如此重要?
我对Java EE 6的读一本书,我会见了以下几个部分:会话状态
“无状态:会话bean包含方法之间没有会话状态,任何 实例可以用于任何客户端。“
“有状态:会话Bean包含会话状态,必须跨单个用户的方法保留 。”
什么是 “会话状态” 是什么意思?有人用真实世界的例子来解释它吗?
在此先感谢。
二,为什么豆类的分类如此重要?它无论是对于初学者还是对初学者都没有提供正确的解释 非常感谢你,我得到了逻辑上的区别,但是为什么这种行为如此重要?
最基本的,“会话状态”是指实例字段的值。
对于无状态会话bean,容器并不能保证以后的方法调用将使用相同的EJB实例(从池),因此你不能想当然地认为,当你调用一个bean的方法,你放置的价值观,仍然会在那里当你再次调用该方法(或bean的另一种方法)时。
对于有状态会话Bean,后续调用将使用相同的EJB实例容器担保,因此可以保持实例字段的值。
举一个例子起见,假设你有一个具有增量()和检索()方法的bean。增量增加存储值,并检索获取当前存储值。
对于一个无状态会话bean,如果你调用increment()方法5次,不能保证当你做一个retrieve()时,你会得到一个5.它取决于EJB的容器将分配给您的电话。所以如果你被分配了一个新的EJB实例,那么你会得到一个零。容器还没有清理你的EJB实例也是可能的,所以有可能得到一个5,但不能保证。
对于有状态会话bean,如果您调用increment方法5次,当您检索值时,您将得到一个5.容器保证第一次调用时使用的EJB将用于所有随后的调用。
一个会话状态的一个真实世界的例子就是购物车。用户可以逐个添加多个商品到购物车,然后致电结帐。所有增加的时间会在那里
假设车是有状态的,即它会保持会话状态。
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那样可伸缩。
至于问题的第二部分,从Java EE 6教程中,你可以阅读以下内容:
当toUse会话Bean
如有以下状态会话bean是适当的条件是真的。
- bean的状态表示bean和特定客户端之间的交互。
- bean需要在方法调用中保存有关客户端的信息。
- bean在客户端和应用程序的其他组件之间进行调解,向客户端呈现简化的视图。
- 在幕后,bean管理几个企业bean的工作流程。
要提高性能,可以选择无状态会话bean,如果它具有任何这些特性。
- 该bean的状态没有针对特定客户端的数据。
- 在单个方法调用中,bean为所有客户端执行通用任务。例如,您可以使用无状态会话bean发送确认在线订单的电子邮件。
- 这个bean实现了一个web服务。
感谢您的时间和精力,如果你有时间你能解释一下我的第二个II。题 ? – cscsaba 2011-03-01 14:08:23