/** * Method should be called when finalizing the command. The execution step is being ended with * success and the finalization step is started. * * @param executionContext The context of the job * @return A created instance of the Finalizing step */ public static Step startFinalizingStep(ExecutionContext executionContext) { if (executionContext == null) { return null; } Step step = null; try { if (executionContext.getExecutionMethod() == ExecutionMethod.AsJob) { Job job = executionContext.getJob(); if (job != null) { Step executingStep = job.getStep(StepEnum.EXECUTING); Step finalizingStep = job.addStep( StepEnum.FINALIZING, ExecutionMessageDirector.getInstance().getStepMessage(StepEnum.FINALIZING)); if (executingStep != null) { executingStep.markStepEnded(true); JobRepositoryFactory.getJobRepository() .updateExistingStepAndSaveNewStep(executingStep, finalizingStep); } else { JobRepositoryFactory.getJobRepository().saveStep(finalizingStep); } } } else if (executionContext.getExecutionMethod() == ExecutionMethod.AsStep) { Step parentStep = executionContext.getStep(); if (parentStep != null) { Step executingStep = parentStep.getStep(StepEnum.EXECUTING); Step finalizingStep = parentStep.addStep( StepEnum.FINALIZING, ExecutionMessageDirector.getInstance().getStepMessage(StepEnum.FINALIZING)); if (executingStep != null) { executingStep.markStepEnded(true); JobRepositoryFactory.getJobRepository() .updateExistingStepAndSaveNewStep(executingStep, finalizingStep); } else { JobRepositoryFactory.getJobRepository().saveStep(finalizingStep); } } } } catch (Exception e) { log.error(e); } return step; }
/** * Adds a {@link Step} entity by the provided context. A {@link Step} will not be created if * {@code ExecutionContext.isMonitored()} returns false. * * @param context The context of the execution which defines visibility and execution method. * @param stepName The name of the step. * @param description A presentation name for the step. If not provided, the presentation name is * resolved by the {@code stepName}. * @param isExternal Indicates if the step is invoked by a plug-in * @return */ public static Step addStep( ExecutionContext context, StepEnum stepName, String description, boolean isExternal) { if (context == null) { return null; } Step step = null; if (context.isMonitored()) { if (description == null) { description = ExecutionMessageDirector.getInstance().getStepMessage(stepName); } try { Job job = context.getJob(); if (context.getExecutionMethod() == ExecutionMethod.AsJob && job != null) { step = job.addStep(stepName, description); try { step.setExternal(isExternal); JobRepositoryFactory.getJobRepository().saveStep(step); } catch (Exception e) { log.errorFormat( "Failed to save new step {0} for job {1}, {2}.", stepName.name(), job.getId(), job.getActionType().name(), e); job.getSteps().remove(step); step = null; } } else { Step contextStep = context.getStep(); if (context.getExecutionMethod() == ExecutionMethod.AsStep && contextStep != null) { step = addSubStep(contextStep, stepName, description); step.setExternal(isExternal); } } } catch (Exception e) { log.error(e); } } return step; }