什么时候用有状态session bean,什么时候用无状态session bean
1个回答
展开全部
1.使用stateless bean,EJB容器能容易的pooling和重用bean,
允许少量的bean去服务很多客户端。用stateful bean去做同样
的事情时,bean的状态在方法调用之间必需要钝化和活化,可
能导致I/O瓶颈。所以无状态的一个实际的好处是使用很小的
开销来容易的pool和重用组件。
2.因为一个stateful session bean在内存中缓冲一个客户端
的对话,一个bean失败可能导致失去你的对话。这能导致严重
的反响,如果你不在写bean时考虑到这一点,或者你不使用一
个提供有状态恢复的EJB产品。在一个无状态模型里面,请求
能被透明的重路由到一个不同的组件,因为任何组件都能为
客户端的需要提供服务。
最大的无状态的缺点是你需要在每个方法调用中把客户相关的
的数据推到stateless bean。大多数stateless session bean
将需要接收对一个客户端特定的一些信息,如对banking bean的
银行帐户号码。这些信息要每次一个客户端请求到达时被提供到
stateless bean,因为bean不能对一个特定的客户端保持状态。
一种向bean提供客户相关的数据的方法是把数据作为参数传到
bean的方法中。这可能导致性能下降,然而,只是发生在传递的
数据量很大的情况下。这也阻塞了网络,降低了其他进程的带宽。
另一种为stateless bean提供客户相关的数据的方法,为那个
bean为一个客户端持久性的存储数据。客户端不需要在一个方法
调用中传递所有的状态,而只简单的需要从持久化的storage得到
数据。这里的trade-off又是性能:存储对话持久化的能得到存储
I/O瓶颈,而不是网络I/O瓶颈。
允许少量的bean去服务很多客户端。用stateful bean去做同样
的事情时,bean的状态在方法调用之间必需要钝化和活化,可
能导致I/O瓶颈。所以无状态的一个实际的好处是使用很小的
开销来容易的pool和重用组件。
2.因为一个stateful session bean在内存中缓冲一个客户端
的对话,一个bean失败可能导致失去你的对话。这能导致严重
的反响,如果你不在写bean时考虑到这一点,或者你不使用一
个提供有状态恢复的EJB产品。在一个无状态模型里面,请求
能被透明的重路由到一个不同的组件,因为任何组件都能为
客户端的需要提供服务。
最大的无状态的缺点是你需要在每个方法调用中把客户相关的
的数据推到stateless bean。大多数stateless session bean
将需要接收对一个客户端特定的一些信息,如对banking bean的
银行帐户号码。这些信息要每次一个客户端请求到达时被提供到
stateless bean,因为bean不能对一个特定的客户端保持状态。
一种向bean提供客户相关的数据的方法是把数据作为参数传到
bean的方法中。这可能导致性能下降,然而,只是发生在传递的
数据量很大的情况下。这也阻塞了网络,降低了其他进程的带宽。
另一种为stateless bean提供客户相关的数据的方法,为那个
bean为一个客户端持久性的存储数据。客户端不需要在一个方法
调用中传递所有的状态,而只简单的需要从持久化的storage得到
数据。这里的trade-off又是性能:存储对话持久化的能得到存储
I/O瓶颈,而不是网络I/O瓶颈。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询