code: @Override
      public Entry<Long, Future<?>> start(WSJobInstance jobInstance, Properties jobParameters, long execId) {
  
          if (authService != null) {
              authService.authorizedJobSubmission();
          }
  
          traceJobStart(jobInstance.getJobXMLName(), jobParameters);
  
          IJobXMLSource jobXML;
          if (!StringUtils.isEmpty(jobInstance.getJobXml())) {
              jobXML = new JobXMLSource(jobInstance.getJobXml());
          } else {
              jobXML = jslLoaderService.loadJSL(jobInstance.getJobXMLName());
          }
  
          Entry<Long, Future<?>> execIdFutureEntry = batchKernelService.startJob(jobInstance, jobXML, jobParameters, execId);
  
          long executionId = execIdFutureEntry.getKey();
          if (logger.isLoggable(Level.FINE) && executionId > 0) {
              logger.fine("Started job with instanceId: " + jobInstance.getInstanceId() + ", executionId: " + executionId);
          }
  
          return execIdFutureEntry;
      }
docs: {@inheritDoc}
  
  Note: this method must be called while running under the app's context.