Example #1
0
    @Override
    public void innerRun() {
      try (CDC ignored = _lock.getCdc().restore()) {
        CellMessageAnswerable callback = _lock.getCallback();

        CellMessage answer;
        Object obj;
        try {
          answer = _message.decode();
          obj = answer.getMessageObject();
        } catch (SerializationException e) {
          LOGGER.warn(e.getMessage());
          obj = e;
          answer = null;
        }

        EventLogger.sendEnd(_lock.getMessage());
        if (obj instanceof Exception) {
          callback.exceptionArrived(_lock.getMessage(), (Exception) obj);
        } else {
          callback.answerArrived(_lock.getMessage(), answer);
        }
        LOGGER.trace("addToEventQueue : callback done for : {}", _message);
      }
    }
Example #2
0
  public void sendMessage(
      CellMessage msg, boolean local, boolean remote, CellMessageAnswerable callback, long timeout)
      throws SerializationException {
    if (!msg.isStreamMode()) {
      msg.touch();
    }

    msg.setTtl(timeout);

    EventLogger.sendBegin(this, msg, "callback");
    UOID uoid = msg.getUOID();
    boolean success = false;
    try {
      CellLock lock = new CellLock(msg, callback, timeout);
      synchronized (_waitHash) {
        _waitHash.put(uoid, lock);
      }

      __cellGlue.sendMessage(this, msg, local, remote);
      success = true;
    } catch (NoRouteToCellException e) {
      if (callback != null) {
        callback.exceptionArrived(msg, e);
      }
    } finally {
      if (!success) {
        synchronized (_waitHash) {
          _waitHash.remove(uoid);
        }
        EventLogger.sendEnd(msg);
      }
    }
  }