code: JobRunner getRunner(JobInstance ji)
      {
          if (runnerCache.containsKey(ji.getJdId()))
          {
              return runnerCache.get(ji.getJdId());
          }
  
          for (JobRunner runner : runners)
          {
              if (runner.canRun(ji))
              {
                  runnerCache.put(ji.getJdId(), runner);
                  return runner;
              }
          }
  
          throw new JqmRuntimeException("there is no runner able to run job definition " + ji.getJD().getApplicationName());
      }
docs: Retrieves the most adequate {@link JobRunner} for a given {@link JobInstance}. Throws {@link JqmRuntimeException} if none was found.
  
  @param ji
  @return