public void waitForRemoteResponse() throws RemoteOperationException {
      try {
        waitForRepliesUninterruptibly();
        RemoteOperationException ex = getMemberDepartedException();
        if (ex != null) {
          throw ex;
        }
        if (responseRequired && !responseReceived) {
          throw new RemoteOperationException("response required but not received");
        }
      } catch (ReplyException e) {
        Throwable t = e.getCause();
        if (t instanceof RemoteOperationException) {
          // no need to create a local RemoteOperationException to wrap the one from the reply
          throw (RemoteOperationException) t;
        } else if (t instanceof CancelException) {
          if (logger.isDebugEnabled()) {
            logger.debug(
                "RemoteOperationResponse got CacheClosedException from {}, throwing RemoteOperationException",
                e.getSender(), t);
          }
          throw new RemoteOperationException("remote cache was closed", t);
        }
        e.handleCause();
      }
    }
Waits for the response from the {@link RemoteOperationMessage}'s recipient

@throws RemoteOperationException if the member we waited for a response from departed
@throws RemoteOperationException if a response was required and not received
@throws RemoteOperationException if the ReplyException was caused by a
        RemoteOperationException
@throws RemoteOperationException if the remote side's cache was closed
geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteOperationMessage.java