she*_*aei 78 java spring ejb stateless-session-bean stateful-session-bean
有状态会话bean定义如下:
有状态会话Bean对象的状态由其实例变量的值组成.在有状态会话bean中,实例变量表示唯一的客户端bean会话的状态.因为客户端与其bean交互("会话"),所以这种状态通常称为会话状态.
无状态会话bean定义如下:
无状态会话Bean无状态会话Bean不与客户端保持会话状态.当客户端调用无状态bean的方法时,bean的实例变量可能包含特定于该客户端的状态,但仅限于调用期间.方法完成后,不应保留特定于客户端的状态.但是,客户端可以更改池化无状态bean中的实例变量的状态,并且此状态将保留到池化无状态bean的下一次调用.除了在方法调用期间,无状态bean的所有实例都是等效的,允许EJB容器将实例分配给任何客户端.也就是说,无状态会话bean的状态应该适用于所有客户端.
使用无状态会话bean而不是有状态会话bean的优点如下:
由于无状态会话bean可以支持多个客户端,因此它们可以为需要大量客户端的应用程序提供更好的可伸缩性.通常,应用程序比有状态会话bean需要更少的无状态会话Bean,以支持相同数量的客户端.
所以我想到的问题是,何时应该使用有状态会话bean?为了我对这个问题的天真理解,我应该坚持使用无状态会话bean.
应该使用有状态会话bean的候选者是什么?有什么好例子吗?
tob*_*ler 139
首先,您必须了解如何在服务器上创建和处理bean.
对于无状态会话Bean,服务器可以在池中维护可变数量的实例.每次客户端请求这样的无状态bean时(例如通过方法),选择随机实例来服务该请求.这意味着如果客户端执行两个后续请求,则无状态bean的两个不同实例可能会为请求提供服务.事实上,两个请求之间没有会话状态.此外,如果客户端消失,则无状态bean不会被销毁,并且可以提供来自另一个客户端的下一个请求.
另一方面,有状态会话bean与客户端紧密相连.每个实例都创建并绑定到单个客户端,并仅提供来自该特定客户端的请求.碰巧,如果你对有状态bean做两个后续请求,你的请求将始终从bean的同一个实例提供.这意味着您可以在请求之间保持对话状态.在生命周期结束时,客户端调用remove方法,bean被销毁/准备好进行垃圾收集.
何时使用无国籍或有状态?
这主要取决于您是否想要维持会话状态.例如,如果您有一个方法可以将两个数字相加并返回结果,则使用无状态bean,因为它是一次性操作.如果您第二次使用其他数字调用此方法,则不再对之前添加的结果感兴趣.
但是,如果您想要计算客户端已完成的请求数,则必须使用有状态bean.在这种情况下,了解客户端之前请求bean方法的频率非常重要,因此您必须在bean中维护会话状态(例如,使用变量).如果你在这里使用无状态bean,那么客户端的请求每次都会从不同的bean中提供,这会影响你的结果.
| 归档时间: |
|
| 查看次数: |
72003 次 |
| 最近记录: |