开发有状态session bean

尽管有状态bean和无状态bean在代码上的区别不是很大
但两者才用的对bean的管理的技术是不一样的

 

Bean实例的两种管理技术:

1.无状态bean使用实例池技术管理bean

开发有状态session <wbr>bean
实例池技术会被多个用户所共享(和数据源技术是相同的)
当用户从实例池取出一个对象后,这个对象是不能被其他用户使用的
当用户使用完这个对象后,这个对象还会被后面的对象所使用
这样可以大大减少对象的数量,来提高系统性能


2.有状态bean使用激活(activation)管理bean

开发有状态session <wbr>bean
有许多个用户来访问,生成多个有状态bean
将这些有状态bean缓存起来
当一个用户访问过bean后,可能过段时间才继续访问,也可能不访问了
可以去优化这些有状态bean:
如果这个有状态bean一段时间内没有被用户访问,则容器把有状态bean用户会话信息,序列化到硬盘上,并释放内存(钝化) 从内存到硬盘上
如果在总的缓存时间之内,用户又发起了请求,这时EJB容器会把保存在硬盘上信息的bean又还原到内存中,为用户服务;(激活) 从硬盘到内存中
如果在缓存时间内用户没有访问(访问超时),EJB容器有个线程,会把保存在硬盘上的bean信息清除掉;在总的缓存时间过后,再去访问bean,会得到一个例外(异常),说这个bean已经超时了
采用激活技术,大大提高了系统性能

 

显然,无状态bean的性能是比有状态bean的性能高
无状态bean用最少的对象,来为更多的用户服务
有状态bean要为每一个用户创建对象去服务

 

如果不需要保存用户状态时,优先选用无状态bean
如果要为每个用户保存他的会话信息时,使用有状态bean
最经典的有状态bean的例子:购物车

-----------------------------------------------------------------

 

有状态bean的开发步骤和无状态bean的开发步骤是比较相似的
只需把@Stateless用于标注无状态bean的注解
更换为:@Stateful 有状态bean
即可完成有状态bean的开发,之后通过ant部署到jboss上

 

代码:

@Stateful //有状态bean
@Remote(HelloWorld.class)//指定HelloWorld接口为远程接口、默认是本地接口
@Local(HelloWorldLocal.class) //使用本地接口
public class HelloWorldBean implements HelloWorld,HelloWorldLocal {

 @Override
 public String sayHello(String name) {
  return name+"说:你好,世界!";
 }

}

猜你喜欢

转载自leon-s-kennedy.iteye.com/blog/1538315