if (log.isTraceEnabled()) { log.trace("Invoked server"); }
   public Object invoke(Invocation invocation) throws Throwable   {      // look for a Client, it's possible that it has been created already      Client client = (Client)invocation.getMetaData(REMOTING, CLIENT);      if (client == null)      {         InvokerLocator locator = (InvokerLocator)invocation.getMetaData(REMOTING, INVOKER_LOCATOR);         if (locator == null)         {            throw new RuntimeException("No InvokerLocator supplied.  Can't invoke remotely!");         }         String subsystem = (String)invocation.getMetaData(REMOTING, SUBSYSTEM);         if (subsystem == null)         {            throw new RuntimeException("No subsystem supplied.  Can't invoke remotely!");         }         client = new Client(locator, subsystem);      }      InvocationResponse response = (InvocationResponse)client.invoke(invocation, null);      invocation.setResponseContextInfo(response.getContextInfo());      return response.getResponse();   }