EJB 企业级应用的架构(2)





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接口。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值