/// <summary> /// Call to listeners that might add some post execution behaviour. /// </summary> /// <param name="execution"></param> private void HandlePostExecution(JobExecution execution) { try { if (execution.Status.IsLessThanOrEqualTo(BatchStatus.Stopped) && !execution.StepExecutions.Any()) { ExitStatus exitStatus = execution.ExitStatus; ExitStatus newExitStatus = ExitStatus.Noop.AddExitDescription("All steps already completed or no steps configured for this job."); execution.ExitStatus = exitStatus.And(newExitStatus); } execution.EndTime = DateTime.Now; try { _listener.AfterJob(execution); } catch (Exception e) { Logger.Error(e, "Exception encountered in afterStep callback"); } JobRepository.Update(execution); Logger.Debug("Current job execution: {0}", execution); } finally { JobSynchronizationManager.Release(); } }
/// <summary> /// Executes job. /// </summary> /// <param name="execution"></param> public void Execute(JobExecution execution) { Logger.Debug("Job execution starting: {0}", execution.JobInstance.JobName); JobSynchronizationManager.Register(execution); try { JobParametersValidator.Validate(execution.JobParameters); if (execution.Status != BatchStatus.Stopping) { HandleExecution(execution); } else { execution.Status = BatchStatus.Stopped; execution.ExitStatus = ExitStatus.Completed; Logger.Debug("Job execution was stopped: {0}", execution.JobInstance.JobName); } } catch (JobInterruptedException e) { HandleJobInterruptedException(execution, e); } catch (Exception t) { HandleException(execution, t); } finally { HandlePostExecution(execution); } }
// Retrieves the job context. private ExecutionContext GetJobContext() { if (_jobContext == null) { _jobContext = JobSynchronizationManager.GetContext().JobExecution.ExecutionContext; } return(_jobContext); }