protected void sendLocalMessage(Message message) {
    String destinationName = message.getDestinationName();

    if (Validator.isNotNull(destinationName)) {
      if (_log.isDebugEnabled()) {
        _log.debug("Sending local cluster link message " + message + " to " + destinationName);
      }

      ClusterInvokeThreadLocal.setEnabled(false);

      try {
        _messageBus.sendMessage(destinationName, message);
      } finally {
        ClusterInvokeThreadLocal.setEnabled(true);
      }
    } else {
      _log.error("Local cluster link message has no destination " + message);
    }
  }
  protected void doReceive(Message message) throws Exception {
    ReportRequest reportRequest = (ReportRequest) message.getPayload();

    ReportDesignRetriever reportDesignRetriever = reportRequest.getReportDesignRetriever();

    ReportResultContainer reportResultContainer =
        _reportResultContainer.clone(reportDesignRetriever.getReportName());

    try {
      _reportEngine.compile(reportRequest);
    } catch (ReportGenerationException rge) {
      _log.error("Unable to compile report", rge);

      reportResultContainer.setReportGenerationException(rge);
    } finally {
      Message responseMessage =
          MessageBusUtil.createResponseMessage(message, reportResultContainer);

      responseMessage.setPayload(reportResultContainer);

      MessageBusUtil.sendMessage(responseMessage.getDestinationName(), responseMessage);
    }
  }