code: @Override
      public void run() {
          if (LOG.isLoggable(Level.INFO)) {
              LOG.info("Calling run to start ESB job instance " + job + " for job with name " + name);
          }
          ClassLoader oldContextCL = Thread.currentThread().getContextClassLoader();
          try {
              Thread.currentThread().setContextClassLoader(job.getClass().getClassLoader());
  
              while (true) {
                  if (Thread.interrupted()) {
                      return;
                  }
                  LOG.info("Starting ESB job instance " + job + " for job with name " + name);
                  int ret = job.runJobInTOS(arguments);
                  LOG.info("ESB job instance " + job + " with name " + name + " finished, return code is "
                          + ret);
                  if (ret != 0) {
                      break;
                  }
              }
          } catch (RuntimeException ex) {
              ex.printStackTrace();
              LOG.log(Level.SEVERE, "RuntimeException when invoking runJobInTOS()", ex);
          } finally {
              Thread.currentThread().setContextClassLoader(oldContextCL);
          }
      }
docs: Starts the @link TalendESBJob job} for which this callback is responsible. The job is restarted if it
  returns back, except the {@link Thread} was interrupted or the buffer was closed.