有状态会话Bean定义如下:
有状态会话Bean对象的状态由其实例变量的值组成。在有状态会话Bean中,实例变量代表唯一的客户端Bean会话的状态。因为客户端与其bean进行交互(“交谈”),所以这种状态通常称为对话状态。
无状态会话Bean定义如下:
无状态会话Bean无状态会话Bean不会与客户端保持对话状态。当客户端调用无状态Bean的方法时,该Bean的实例变量可能包含特定于该客户端的状态,但仅限于调用期间。该方法完成后,不应保留特定于客户端的状态。但是,客户端可以更改池化的无状态Bean中实例变量的状态,并且此状态将保留到池化的无状态Bean的下一次调用中。除了方法调用期间,无状态bean的所有实例都是等效的,从而允许EJB容器将实例分配给任何客户端。也就是说,无状态会话Bean的状态应适用于所有客户端。
与有状态会话Bean相比,使用无状态会话Bean的优势如下:
因为无状态会话Bean可以支持多个客户端,所以它们可以为需要大量客户端的应用程序提供更好的可伸缩性。通常,与支持相同数量的客户端的有状态会话Bean相比,应用程序需要的无状态会话Bean更少。
因此想到的问题是何时应该使用有状态会话Bean?就我对此事的幼稚理解而言,应该坚持使用无状态会话bean。
应该使用有状态会话bean的候选对象是什么?有什么好的例子吗?