package org.jfox.ejb.plugin;

import org.jfox.ejb.Invocation;

/**
 * 拦截器用于拦截方法的调用,可以在调用之前和之后加入一个控制,注意不应该改变 invocation 的值
 *
 * 可以使用 Interceptor 插件做日志分析,性能分析工具等
 *
 * @author <a href="mailto:young_yy@hotmail.com">Young Yang</a>
 */


public interface Interceptor extends ContainerPlugin {

  /**
   * 执行 Home 方法之前的控制
   * @param invocation
   * @throws Exception
   */
  void preInvokeHome(final Invocation invocation) throws Exception;

  /**
   * 执行 Bean 方法之前的控制
   * @param invocation
   * @throws Exception
   */
  void preInvokeBean(final Invocation invocation) throws Exception;

  /**
   * 执行 Home 方法之后的控制
   * @param invocation
   * @throws Exception
   */
  void postInvokeHome(final Invocation invocation) throws Exception;

  /**
   * 执行 Bean 方法之后的控制
   * @param invocation
   * @throws Exception
   */
  void postInvokeBean(final Invocation invocation) throws Exception;

}