loading ...
loading...

2006-08-29 | EJB3引入的Interceptor----续(4)

分享

读了jboss的那个EJB3文档,找到几个例子介绍了EJB3中interceptor的使用,分为3个层次:

1.default,只能用xml文件进行绑定,将作用于对任何一个bean的任何一次业务方法调用

2.class层次的,将作用于对该bean所有业务方法的调用

3.method层次,将作用于该方法

看起来好象很美,可是我找来找去发现此interceptor只有一个AroundInvoke,也就是类似spring的环绕增加,没有前增强,没有后增强,更没有异常增强了.这也太有限了..既然支持AOP,不应该只提供这么一个看起来很美的特性.

废话少说,以一个class层次的interceptor为例,我们用此interceptor来计算各个业务方法调用所耗费的时间,代码与spring基本类似,或者说AOP联盟的接口很相似:

package com.denny_blue.ejb3.interceptors;

import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;

public class TimerInterceptor {
  @AroundInvoke
  public Object intercept(InvocationContext ctx) throws Exception
  {
     System.out.println("*** AccountsInterceptor intercepting " + ctx.getMethod().getName());
     try
     {
     long t1=System.currentTimeMillis();     
        Object obj=ctx.proceed();
        long t2=System.currentTimeMillis();
        System.out.println("此方法执行时间为:"+(t2-t1));
        return obj;
     }
     finally
     {
        System.out.println("*** AccountsInterceptor exiting");
     }
  }
 
}

此类很简单,打印拦截的方法,以及打印此方法执行的时间.interceptor写好了,怎么用呢?以我的上一篇文章为例,只要在@Interceptors多加上这个类就可以了,如:

@Interceptors({CountCallBacks.class,TimerInterceptor.class})
public @Stateful class CounterBean implements Counter {
            ................. 

            .................

如此这般,你将在服务器后台看到打印的拦截每个方法,并计算此方法执行时间.不算十分有趣,但也许也还实用.

分享 分享 |  评论 (0) |  阅读 (?)  |  固定链接 |  类别 (Java) |  发表于 23:32
搜狐博客温馨提示:搜狐博客官方不会要求参加活动的各位博友缴纳任何的手续费用。请勿轻信留言、评论中的中奖信息,更不要拨打陌生电话及向陌生帐户汇款,谨防受骗!识别更多网络骗术,请 点击查看详情
您还未登录,只能匿名发表评论。或者您可以 登录 后发表。
 
  *中国人爱国心,搜狗输入法爱国主题皮肤下载>>
表  情:
加载中...
回复通知: 同时用小纸条通知对方该回复