确定JAVA-EE应用程序模块称为截获方法

时间:2014-02-17 14:57:46

标签: java java-ee module ejb-3.0 interceptor

让我们说我们的应用程序中有一些模块:

REST API

WEB

CORE

DAO

对于CORE中的所有方法,我们定义了EJB @Interceptor。是否可以确定module中的CORE调用方法是什么?

示例:我有方法CORE.methodThatHasInterceptor()

我从WEB.unknownMethod(){ CORE.methodThatHasInterceptor() }

打电话给我

它转到methodThatHasInterceptor方法的拦截器:

@AroundInvoke
public Object interceptor(InvocationContext invocCtx) throws Exception { 
// is it possible to know that it was called from WEB.unknownMethod() ?
}

1 个答案:

答案 0 :(得分:1)

InvocationContext的javadoc在这个主题上提供了很多信息:

http://docs.oracle.com/javaee/6/api/javax/interceptor/InvocationContext.html

我将在顶部引用示例代码:

    @AroundInvoke
public Object logInvocation(InvocationContext ctx) throws Exception {
   String class = ctx.getMethod().getDeclaringClass().getName();
   String method = ctx.getMethod().getName();
   Logger.global.entering(class, method, ctx.getParameters());
   try {
      Object result = ctx.proceed();
      Logger.global.exiting(class, method, result);
      return result;
   }
   catch (Exception e) {
      Logger.global.throwing(class, method, e);
      throw e;
   }

}