Ejemplo n.º 1
0
  @Override
  public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause)
      throws Exception {
    LOG.debug("Error originating from {}. Cause {}.", futureResponse.request(), cause);
    if (futureResponse.isCompleted()) {
      LOG.warn(
          "Got exception, but ignored it. (FutureResponse completed.): {}.",
          futureResponse.failedReason());
    } else {
      if (LOG.isDebugEnabled()) {
        LOG.debug("Exception caught, but handled properly: " + cause.toString());
      }
      if (cause instanceof PeerException) {
        PeerException pe = (PeerException) cause;
        if (pe.abortCause() != PeerException.AbortCause.USER_ABORT) {
          // do not force if we ran into a timeout, the peer may be
          // busy
          synchronized (peerBean.peerStatusListeners()) {
            for (PeerStatusListener peerStatusListener : peerBean.peerStatusListeners()) {
              peerStatusListener.peerFailed(futureResponse.request().recipient(), pe);
            }
          }
          LOG.debug("Removed from map. Cause: {}. Message: {}.", pe.toString(), message);
        } else {
          LOG.warn("Error in request.", cause);
        }
      } else {
        synchronized (peerBean.peerStatusListeners()) {
          for (PeerStatusListener peerStatusListener : peerBean.peerStatusListeners()) {
            peerStatusListener.peerFailed(
                futureResponse.request().recipient(), new PeerException(cause));
          }
        }
      }
    }

    futureResponse.failedLater(cause);
    ctx.close();
  }