Jboss Ejb3.0 Interceptor
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
推荐文章 |
