code: public void onEndJob (@Nullable final String sJobID,
                          @Nonnull final ESuccess eExecSucess,
                          @Nonnull final LongRunningJobResult aResult)
    {
      ValueEnforcer.notNull (eExecSucess, "ExecSuccess");
      ValueEnforcer.notNull (aResult, "Result");
  
      // Remove from running job list
      final LongRunningJobData aJobData = m_aRWLock.writeLocked ( () -> {
        final LongRunningJobData ret = m_aRunningJobs.remove (sJobID);
        if (ret == null)
          throw new IllegalArgumentException ("Illegal job ID '" + sJobID + "' passed!");
  
        // End the job - inside the writeLock
        ret.onJobEnd (eExecSucess, aResult);
        return ret;
      });
  
      // Remember it
      m_aResultMgr.addResult (aJobData);
    }
docs: End a job.
  
  @param sJobID
  The internal long running job ID created from
  {@link #onStartJob(ILongRunningJob,String)}.
  @param eExecSucess
  Was the job execution successful or not from a technical point of
  view? May not be <code>null</code>. If a JobExecutionException was
  thrown, this should be {@link ESuccess#FAILURE}.
  @param aResult
  The main job results.