无状态会话Bean与有状态会话Bean的区别以及实例池

 

1 、有状态会话Bean 和无状态会话Bean 的区别?
从编写方面来说:接口没有区别,Bean 类使用Stateless Statefull
从客户端来说:没有任何区别。
从容器方面来说:对于无状态会话Bean 来说,当有客户端发送请求的时候,不一定创建实例,所以多个客户端可能共享实例,实例的成员变量保存的信息不是专门为某个客户保存的,这些信息是所有客户端共享的,有点类似于Java 的静态成员。客户端不能期望服务器端为你保存信息。处理过程需要的信息通过方法的参数传递。如果是有状态会话Bean ,服务器会为每个客户端创建独立实例(要保存信息),每个客户端的信息由相应的实例来保存,客户端的多次方法调用(initialize addbook removebook )之间可以共享信息,每次方法调用只需要传递额外的信息。
 
2 、实例池的应用
通过实例的共享,减少实例的创建和释放所花费的时间,从而提高性能,因为作为企业级一应用,创建和释放的次数会非常多。
服务器可以提前创建若干Bean 的实例,当有客户端访问的时候,可以快速的为客户端分配一个实例,用完之后再放回。
对于无状态会话Bean 来说,当请求发生的时候,可以从实例池中任意挑选一个实例。
对于有状态会话Bean 来说:
如果是新的请求
    如果有空闲实例(没有与客户端关联),从实例池中挑选空闲实例;
    如果没有空闲实例,查找与客户端(假设为C2 )关联了但是没有使用的实例,首先为C2 保存状态信息(挂起C2 或者钝化C2 );
  如果没有空闲实例,也没有可以挂起的客户端,则等待.
如果不是新的请求(可以认为是第二次或者之后的方法调用)
    首先查找与它关联的实例是否存在,如果在,直接调用方法;
    如果关联的实例已经不可用,查找空闲实例使用,并且使用服务器为当前客户保存的信息来初始化这个实例(激活);
    如果没有空闲实例可用,先挂起另外一个客户,然后再激活当前客户。
  如果没有空闲实例,也没有可以挂起的客户端,则等待.
李绪成 CSDN Blog http://blog.csdn.net/javaeeteacher
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值