高校平台--环境理解之有状态和无状态会话bean

        在以前的学习中,也接触到过一点关于会话bean的内容,但是因为没有详细的研究,总是处于一种模棱两可的状态,只知道概念不知道其中的道理。今天,再次看到Stateless,那么,就顺便总结一下会话bean的状态问题。

        会话bean分为Session Bean与Stateless Session Bean,他们的本质区别是它们的生命期。

        首先解释一个下面要用到的概念--用户:session bean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。

        1)有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。生命周期我们可以用web中context去简单认识,比如session、request等。在这个生命周期内,用户只会得到一个特定的stateful会话bean。

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

两种bean的使用场合
        1)有状态会话bean:用于跟踪用户数据,它可以在分布式中被缓存和传递,只要生命周期未被销毁(如session会话,前提是此会话bean被session会话管理),那么此bean可以在应用中随时获取,且数据时被同步更新的。

        2)无状态会话bean:这里你需要用servlet的思想去认识它。它就想servlet一样,为上层调用提供服务,并且是线程池的形式存在(有待理解)。当服务调用结束(如:获取web 服务,查询站点数据统计),无状态会话bean可能被销毁但也能继续存在,取决于线程池饱和度,但它不会为你保存任何和你的调用有个人的数据。


你可能感兴趣的:(高校平台--环境理解之有状态和无状态会话bean)