Exemplo n.º 1
0
  /**
   * Check the messenger to the remote peer and attempt to re-create the messenger if necessary.
   *
   * @return {@code true} if the current messenger is adequate.
   * @throws IOException is thrown for errors in creating a new messenger.
   */
  private synchronized boolean checkMessenger() throws IOException {
    if ((destMessenger != null) && ((destMessenger.getState() & Messenger.USABLE) != 0)) {
      // Everything fine!
      return true;
    }

    // Try making a direct messenger first.
    if (route != null) {
      destMessenger = endpoint.getDirectMessenger(destination, route, true);
    }

    // Try making a regular messenger if that didn't work.
    if ((destMessenger == null) || ((destMessenger.getState() & Messenger.TERMINAL) != 0)) {
      destMessenger = null;
      destMessenger = endpoint.getMessenger(destination, route);
    }

    // Dismal failure
    if ((destMessenger == null) || ((destMessenger.getState() & Messenger.TERMINAL) != 0)) {
      destMessenger = null;
      throw new IOException("Unable to create a messenger to " + destination.toString());
    }

    return true;
  }