org.linkedin.util-core/src/main/java/org/linkedin/util/lifecycle/ShutdownProxy.java
@Override
  public Object invoke(Object o, Method method, Object[] objects)
    throws Throwable
  {
    // throws ShutdownRequestedException when in shutdown mode
    _shutdown.startCall();
    try
    {
      return method.invoke(_object, objects);
    }
    catch(InvocationTargetException e)
    {
      Throwable th = e.getTargetException();

      try
      {
        throw th;
      }
      catch(Exception ex)
      {
        throw ex;
      }
      catch(Throwable throwable)
      {
        log.error(method.toString(), throwable);
        throw throwable;
      }
    }
    finally
    {
      _shutdown.endCall();
    }
  }
@Override
  public Object invoke(Object o, Method method, Object[] objects)
    throws Throwable
  {
    // throws ShutdownRequestedException when in shutdown mode
    _shutdown.startCall();
    try
    {
      return method.invoke(_object, objects);
    }
    catch(InvocationTargetException e)
    {
      Throwable th = e.getTargetException();

      try
      {
        throw th;
      }
      catch(Exception ex)
      {
        throw ex;
      }
      catch(Throwable throwable)
      {
        log.error(method.toString(), throwable);
        throw throwable;
      }
    }
    finally
    {
      _shutdown.endCall();
    }
  }
Method from the interface. Checks for shutdown then dispatches the call

@param o
@param method
@param objects
@return object
@throws Throwable