code: public AnalysisResultFuture run() {
          try {
              // the injection manager is job scoped
              final InjectionManager injectionManager = _configuration.getInjectionManager(_job);
  
              final LifeCycleHelper rowProcessingLifeCycleHelper = new LifeCycleHelper(injectionManager,
                      new ReferenceDataActivationManager(), _includeNonDistributedTasks);
  
              final RowProcessingPublishers publishers = new RowProcessingPublishers(_job, _analysisListener,
                      _taskRunner, rowProcessingLifeCycleHelper, _sourceColumnFinder);
  
              final AnalysisJobMetrics analysisJobMetrics = publishers.getAnalysisJobMetrics();
  
              // A task listener that will register either succesfull executions
              // or unexpected errors (which will be delegated to the
              // errorListener)
              JobCompletionTaskListener jobCompletionTaskListener = new JobCompletionTaskListener(analysisJobMetrics,
                      _analysisListener, 1);
  
              _analysisListener.jobBegin(_job, analysisJobMetrics);
  
              validateSingleTableInput(_transformerJobs);
              validateSingleTableInput(_filterJobs);
              validateSingleTableInput(_analyzerJobs);
  
              // at this point we are done validating the job, it will run.
              scheduleRowProcessing(publishers, rowProcessingLifeCycleHelper, jobCompletionTaskListener,
                      analysisJobMetrics);
  
              return new AnalysisResultFutureImpl(_resultQueue, jobCompletionTaskListener, _errorAware);
          } catch (RuntimeException e) {
              _analysisListener.errorUknown(_job, e);
              throw e;
          }
  
      }
docs: Runs the job
  
  @return