public final boolean hasInterest(QueueEntry entry) {
    // check that the message hasn't been rejected
    if (entry.isRejectedBy(this)) {

      return false;
    }

    if (entry.getMessage().getClass() == _messageClass) {
      if (_noLocal) {
        Object connectionRef = entry.getMessage().getConnectionReference();
        if (connectionRef != null && connectionRef == _sessionReference) {
          return false;
        }
      }
    } else {
      // no interest in messages we can't convert
      if (_messageClass != null
          && MessageConverterRegistry.getConverter(entry.getMessage().getClass(), _messageClass)
              == null) {
        return false;
      }
    }

    if (_filters == null) {
      return true;
    } else {
      MessageReference ref = entry.newMessageReference();
      if (ref != null) {
        try {

          Filterable msg = entry.asFilterable();
          try {
            return _filters.allAllow(msg);
          } catch (SelectorParsingException e) {
            LOGGER.info(
                this
                    + " could not evaluate filter ["
                    + _filters
                    + "]  against message "
                    + msg
                    + ". Error was : "
                    + e.getMessage());
            return false;
          }
        } finally {
          ref.release();
        }
      } else {
        return false;
      }
    }
  }