一、Session beans简单介绍
Session beans通常用于一个客户端的会话。Session beans中的事件通常执行为客户端设置的任务和进程。它仅仅存在在客户连接的过程中,也可以说,session beans体现EJB server的Client , 它通常为Client提供服务。除了你必须用到持续不变的数据外,通常使用session beans。
二、两种类型的Session beans
有态Session beans和无态Session beans。
有态Session beans用于单个client,用来保持这个client的状态信息。例如,网上购物中的用户定单就是一个session beans。客户从物品列表中选取物品到定单中。最后,客户要通过它来计算总价,付款。
无态Session beans用于多个client,它不由单个client所控制。例如:聊天室中,聊天人的列表就是一个无态Session beans,因为每加一个人,该列表都会变化的。
三、生命周期
(1)有态Session beans当client调用Session bean 的home接口的create()事件的时候就开始存在。Container就开始建立一个新的session bean实例,并且初始化,返回信息给clinet端。在这个过程中,Container调用sessionbean接口的setSessionContext()事件和ejbCreate()事件。
当一个Client通过远程或者HOME接口调用remove()事件时,Container将调用ejbRemove()事件,以后,这个bean的生命周期就结束了。此时,假如client试着再去调用beans的事件,将产生一个Java.rmi.NoSUChObjectException异常。
(2)无态Session beans当client调用Session bean 的home接口的create()事件的时候就开始生存。Container就开始建立一个新的session bean实例,返回信息给clinet端。在这个过程中,Container调用sessionbean接口的setSessionContext()事件和ejbCreate()事件。这个新的bean就被加到一个“池”中,供Client端用。由于不带任何Client端特有的状态,所以这个“池”中的任何beans都可以被client端用。
当Container从“池”中移掉一个对象的时候,将调用bean对象的ejbRemove事件。需要注重的是:调用create()和remove()事件,并不能从无态Session beans的 "池"中增加和移走无态Session beans。在整个过程中,无态Session beans的生命周期是由Container来控制的。