docs: @Override
      public void afterCompletion(Invocation inv, Throwable ex) throws Exception {
          if (ex != null) {
              if (logger.isDebugEnabled()) {
                  logger.debug("close the pipe and returen because of exception previous.");
              }
              return;
          }
          //
          PipeImpl pipe = (PipeImpl) PortalUtils.getPipe(inv);
          if (pipe == null) {
              if (logger.isDebugEnabled()) {
                  logger.debug("there's no pipe windows.");
              }
              return;
          }
  
          if (inv != inv.getHeadInvocation()) {
              return;
          }
          if (!pipe.isStarted()) {
              if (logger.isDebugEnabled()) {
                  logger.debug("writing " + pipe + "...");
              }
  
              pipe.write(inv.getResponse().getWriter());
  
              if (logger.isDebugEnabled()) {
                  logger.debug("writing " + pipe + "... done");
              }
          } else {
              if (logger.isDebugEnabled()) {
                  logger.debug(pipe + " has been started yet.");
              }
          }
  
      }