当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>J2EE

一步一步学EJB 3.0(三):悟透会话Bean(上)

    会话 Bean 用于管理实体 Bean 和其它会话 Bean 的交互、访问资源,它们通常代表客户机执行任务。会话 Bean 对应于“模型-视图-控制器”体系结构中的控制器,因为它们都封装三层体系结构中的商业逻辑。会话Bean也叫会话组件(session bean),又可分为无状态会话组件和有状态会话组件两类。

    无状态 Bean 之所以称作无状态是因为它们是过渡的;他们不维护方法调用之间的商业状态。有状态会话 Bean 封装商业逻辑和特定于某个客户机的状态。有状态 bean 之所以称作“有状态”是因为它们维护方法调用之间的商业状态,状态保留在内存中,并不持久。

    一、无状态(stateless)会话Bean

    无状态(stateless)会话组件不保留客户程序调用的状态,这意味着客户程序对这类组件的两次方法调用之间是没有关联的。由于无状态会话组件无须维持与客户程序的会话状态,针对这类组件采用的实例池机制具有较高的性能与可伸缩性,非常适合以一定数量的实例支持大量并发客户程序的调用请求。(由于不含任何客户程序可见的状态,无状态会话组件实例池中的每一实例均被认为是等同的。)

    无状态会话Bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,Bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态Bean.但无状态会话Bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。

    二、有状态(statlful)会话Bean

    有状态会话组件比较特殊,因为这类组件必须维持与客户程序的会话状态,并且这些状态又不是持久的,从而在有状态会话组件的实例池中不同的实例之间是有区别的。因而针对有状态会话组件使用的实例池机制主要目标是实现缓存(caching),而不是像实体组件或无状态会话组件那样强调以少量实例为大量的并发客户请求服务。

    有状态会话Bean ,每个用户有自己特有的一个实例,在用户的生存期内,   Bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),Bean的生命期也告结束。即每个用户最初都会得到一个初始的Bean.

相关内容
赞助商链接