随笔 - 0, 文章 - 75, 评论 - 0, 引用 - 0
数据加载中……

开发有状态session bean

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



Bean实例的两种管理技术:


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


bean" name="image_operate_57701323526900703" alt="开发有状态session bean" src="http://s11.sinaimg.cn/middle/8020e411tb3bd6f63049a&690" real_src="http://s11.sinaimg.cn/middle/8020e411tb3bd6f63049a&690">
实例池技术会被多个用户所共享(和数据源技术是相同的)
当用户从实例池取出一个对象后,这个对象是不能被其他用户使用的
当用户使用完这个对象后,这个对象还会被后面的对象所使用
这样可以大大减少对象的数量,来提高系统性能



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


bean" name="image_operate_95751323526907265" alt="开发有状态session bean" src="http://s15.sinaimg.cn/middle/8020e411tb3bd9efa3cde&690" real_src="http://s15.sinaimg.cn/middle/8020e411tb3bd9efa3cde&690">
有许多个用户来访问,生成多个有状态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+"说:你好,世界!";
}



}


 

 

posted on 2012-04-22 16:11 hantai 阅读(71) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: