网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

Jboss Ejb3.0 Interceptor

http://www.diybl.com/ 2007-2-6  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】





 


Interceptor为拦截器,可以监听程序的整个程序或方法。从多个程序理解问题往往比较容易,我就在自己写的HelloWorld 程序的基础上增加了Interceptor .



有如下几个程序:Hello.java , HelloLocal.java , HelloRemote.java , HelloBean.java, TracingInterceptor.java



Client.java



重点在HelloBean.java, TracingInterceptor.java 这两个程序。




 



 



 


Hello.java



/**



 * @author roson



 *



 * 2005-4-10



 */



package org.jboss.tutorial.stateless.bean;




 


public interface Hello {



    public void hello();



    public String hello2();



}




 



 



 


HelloLocal.java



/**



 * @author roson



 *



 * 2005-4-10



 */



package org.jboss.tutorial.stateless.bean;




 


import javax.ejb.Local;




 


@Local



public interface HelloLocal extends Hello{




 


}




 



 



 


HelloRemote.java



/**



 * @author roson



 *



 * 2005-4-10



 */



package org.jboss.tutorial.stateless.bean;




 


import javax.ejb.Remote;




 


@Remote



public interface HelloRemote extends Hello{




 


}




 



 



 


HelloBean.java



/**



 * @author roson



 *



 * 2005-4-10



 */



package org.jboss.tutorial.stateless.bean;




 


import javax.ejb.InvocationContext;



import javax.ejb.Stateless;



import javax.ejb.AroundInvoke;



import javax.ejb.Interceptor;




 


@Stateless



@Interceptor("org.jboss.tutorial.stateless.bean.TracingInterceptor")



public class HelloBean implements HelloRemote,HelloLocal {



    public void  hello()



    {



        System.out.println("Hello roson");



    }



   



    public String hello2()



    {



        return "are you ok";



    }



   



    @AroundInvoke



    public Object myBeanInterceptor(InvocationContext ctx) throws Exception



    {



        if (ctx.getMethod().getName().equals("hello"))



        {



           System.out.println("*** hello: " );



        }



        if (ctx.getMethod().getName().equals("hello2"))



        {



           System.out.println("*** hello2: " );



        }



       return ctx.proceed();



    }



}




 


说明:



@Interceptor("org.jboss.tutorial.stateless.bean.TracingInterceptor") 定义了一个自己定义的Interceptor 。



也可以有多个 Interceptor 格式如下



@Interceptors ({"org.jboss.TracingInterceptor", "org.jboss..OtherInterceptor"})



以上两种监视整个class的情况,要做的更细点就是单独监视拦截每个方法,需要另外写个方法:



@AroundInvoke



    public Object 方法名可以任意(InvocationContext ctx) throws Exception



{



}




 



 



 


TracingInterceptor.java



package org.jboss.tutorial.stateless.bean;




 


import javax.ejb.AroundInvoke;



import javax.ejb.InvocationContext;




 


public class TracingInterceptor {




 


   @AroundInvoke



   public Object log(InvocationContext ctx) throws Exception



   {



      System.out.println("*** TracingInterceptor intercepting");



      long start = System.currentTimeMillis();



      try



      {



         return ctx.proceed();



      }



      catch(Exception e)



      {



         throw e;



      }



      finally



      {



         long time = System.currentTimeMilli

文章整理:DIY部落 http://www.diybl.com (本站)   【点击打包该文章】
[1] [2]
如果图片或页面不能正常显示请点击这里 站内搜索:   

文章评论

请您留言