@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
  {
    
    _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
Method from the interface . Checks for shutdown then dispatches the call