@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); } }
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); } } }