【Java】有状态会话bean和无状态会话bean

上篇博客中介绍了EJB第一个简单实例的实现。接下来小编计划为大家介绍SessionBean的两种状态:

1)无状态会话bean(Stateless)

·基本原理:

服务端会维持一个实例池,创建好若干个实例对象共客户端调用。当从客户端发送创建会话bean的请求是,并不一定会真的创建EJB,大多数情况下是从实力吃中得到一个实例,用完之后从新放回实例池。如果下次再访问,再从实例池中取出一个实例使用,并不一定是上次的实例。即使两次访问使用的是同一个实例,在两次访问之间也有可能在其他的客户端访问了该实例。所以,并不能保证在多次访问之间的信息会被保存。所以,无状态会话bean不会专门保存客户端的信息。

·优缺点:

当客户端发送对无状态的会话bean的请求时,可以随便取一个空闲的实例为客户端服务,效率比较高。

·使用@Stateless注解标识。

2)有状态会话bean(Stateful)

·基本原理:

只有客户端发送对有状态会话bean的访问,服务器都会创建一个会话bean实例与该客户端对应,这样这个实例与这个客户端就是一一对应的。如果客户端在bean实例中保存了信息,之后还可以使用。

·优缺点:

有状态的会话bean会保存客户端信息,一个客户端对应一个实例,这样随着客户端的增加,服务器需要创建的实例的数量也在增加,这样会对服务端造成一定的负担,当在服务端进行优化时,可以考虑使用共享实例的方式,保存实例状态,把暂时不用的实例可以挂起。如果再次请求时,进行激活操作。同时,这样的话,效率就比较低了。

有状态的会话bean好的地方是:可以保存客户端信息,在客户端后续访问的时候就可以少传递一些参数。

·使用@Stateful注解标识。


·小结:

根据上面分析,如果需要频繁的访问,并且多次访问之间会共享一些信息,这时候应该使用有状态的会话bean,对于不经常使用的功能,可以使用无状态会话bean。

你可能感兴趣的:(【Java】有状态会话bean和无状态会话bean)