/** Message contains a Command. Execute it against *this* object and return result. */
 @Override
 public void handle(Message req, org.jgroups.blocks.Response response) throws Exception {
   if (isValid(req)) {
     ReplicableCommand cmd = null;
     try {
       cmd =
           (ReplicableCommand)
               req_marshaller.objectFromBuffer(
                   req.getRawBuffer(), req.getOffset(), req.getLength());
       if (cmd == null)
         throw new NullPointerException("Unable to execute a null command!  Message was " + req);
       if (req.getSrc() instanceof SiteAddress) {
         executeCommandFromRemoteSite(cmd, req, response);
       } else {
         executeCommandFromLocalCluster(cmd, req, response);
       }
     } catch (InterruptedException e) {
       log.shutdownHandlingCommand(cmd);
       reply(response, new ExceptionResponse(new CacheException("Cache is shutting down")));
     } catch (Throwable x) {
       if (cmd == null) log.errorUnMarshallingCommand(x);
       else log.exceptionHandlingCommand(cmd, x);
       reply(response, new ExceptionResponse(new CacheException("Problems invoking command.", x)));
     }
   } else {
     reply(response, null);
   }
 }