论坛首页 入门技术论坛

EJB的资料辅导(2)

浏览 1246 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-08  

SessionBean

SessionBean接受客户端的请求,并作出响应,是商业过程处理对象。

无状态SessionBean(Statless)

无状态Session是可以被重用,不能被客户端并发共享,只可以串行共享,并不保留客户端方法调用后的的状态,而是直接返回。
无状态的SessionBean是可以池化的,以优化性能。

无状态SessionBean的生命周期

 

如果实例不存在,就会调用构造方法,然后调用资源注入方法,接着会调用有@PostConstruct标注的方法,在销毁时会调用有@PerDestroy标注的方法,然后销毁对象,如果实例存在就会从Bean实例池中取出实例并调用方法。

回调方法是基于事件机制的。

 

生命周期回调方法的规则
1,对于直接定义在Bean中的回调,其格式应该是public void <method()>,也就是直接写在SessionBean中。
2,对于为Bean类单独提供(单个或多个)回调监听而言。其格式是public void <method(InvocationContext context)>
java.interceptor.InvocationContext,提供了调用的上下文信息。只在SessionBean类上加上@Interceptors(Xxxx.class)制定定义了回调方法的类。
3,回调方法不能够抛出已检查异常,但可以抛运行时异常。
 
在创建实例并注入资源之后,会回调这个方法。
@PostConstruct
public void constructed(){}

在销毁对象时回调这个方法
@PerDestroy
public void destroy(){}

 

有状态的SessionBean(Statful)

有状态的SessionBean只为一个客户端服务,不能共享,并且会保留方法调用后的状态。

当有状态的SessionBean暂时不被使用时,就会被存储到缓存当中,也就是被存到虚拟内存或者是将信息同步到Session数据库中(Session数据库是应用服务器所提共的小型数据库,用来保存Session的信息,多应用服务器共享Session数据库,同步Bean的信息,达到集群处理)。

swap out passivation钝化过程,保存SessionBean的状态,在SessionBean处在事务中时是不会进行钝化的。
swap in activation激活过程,提取保存的SessionBean到内存中,可以继续被客户端使用。

有状态的Session,会保存成员变量(没有加transient关键字,以及串行化的类型和基本类型),也会保存其他的SessionBean的引用。

对有状态的SessionBean中有transient属性时,就需要在Bean中提供激活的方法也就是
@Statful
Test implements TestRemote{
   transient private int a;
   @PostActivate
   public void activate(){
 a=5;
   }
}

在SessionBean中实现事务处理时要实现SessionSynchronization接口。
java -Dorg.omg.CORBA.ORBInitialHost=192.168.12.41

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics