状态会话Bean的定义如下:
状态会话Bean对象的状态由其实例变量的值组成。在状态会话Bean中,实例变量表示唯一客户端Bean会话的状态。因为客户端与其Bean交互(“交谈”),所以该状态通常称为会话状态。
无状态会话Bean的定义如下:
无状态会话Bean与客户端不维护会话状态。当客户端调用状态Bean的方法时,Bean的实例变量可能包含特定于该客户端的状态,但仅在调用持续时间内有效。当方法完成时,不应保留客户端特定状态。但是,客户可以更改池化无状态Bean的实例变量的状态,并且这个状态会一直保存到下一个调用池化无状态Bean的时候。除了方法调用期间,所有无状态Bean的实例都是等效的,允许EJB容器将一个实例分配给任何客户端。也就是说,无状态会话Bean的状态应适用于所有客户端。
使用无状态会话Bean(stateless session bean)而不是有状态会话Bean(stateful session bean)的优点如下:
因为无状态会话Bean可以支持多个客户端,所以对于需要大量客户端的应用程序,它们可以提供更好的可扩展性。通常情况下,相比于有状态会话Bean,应用程序需要更少的无状态会话Bean来支持相同数量的客户端。
那么接下来的问题是,什么时候应该使用有状态会话Bean呢?在我尚浅的理解中,只要能使用无状态会话Bean就应该优先考虑使用。
什么情况下适合使用有状态会话Bean呢?有没有好的例子?