diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/BatchStatus.java b/spring-batch-core/src/main/java/org/springframework/batch/core/BatchStatus.java index 92d1c6793..8f9ba0588 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/BatchStatus.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/BatchStatus.java @@ -37,7 +37,7 @@ public enum BatchStatus { * steps that have finished processing, but were not successful, and where * they should be skipped on a restart (so FAILED is the wrong status). */ - INCOMPLETE, COMPLETED, STARTING, STARTED, FAILED, STOPPING, STOPPED, UNKNOWN; + COMPLETED, STARTING, STARTED, FAILED, INCOMPLETE, STOPPING, UNKNOWN; public static BatchStatus max(BatchStatus status1, BatchStatus status2) { if (status1.isLessThan(status2)) { @@ -66,7 +66,7 @@ public enum BatchStatus { * @return true if the status is FAILED or greater */ public boolean isUnsuccessful() { - return this == FAILED || this.isGreaterThan(FAILED); + return this == INCOMPLETE || this.isGreaterThan(INCOMPLETE); } /** diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowParser.java index 3bb223b01..697d9a3eb 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowParser.java @@ -150,8 +150,8 @@ public class FlowParser extends AbstractSingleBeanDefinitionParser { } if (!transitionElementExists) { - list.addAll(createTransition(BatchStatus.FAILED, ExitStatus.FAILED.getExitCode(), null, null, stateDef, - parserContext)); + list.addAll(createTransition(BatchStatus.INCOMPLETE, ExitStatus.FAILED.getExitCode(), null, null, + stateDef, parserContext)); if (!hasNextAttribute) { list.addAll(createTransition(BatchStatus.COMPLETED, null, null, null, stateDef, parserContext)); } @@ -219,15 +219,16 @@ public class FlowParser extends AbstractSingleBeanDefinitionParser { BeanDefinition endState = null; - if (batchStatus == BatchStatus.STOPPED || batchStatus == BatchStatus.COMPLETED - || batchStatus == BatchStatus.FAILED) { + if (batchStatus == BatchStatus.FAILED || batchStatus == BatchStatus.COMPLETED + || batchStatus == BatchStatus.INCOMPLETE) { BeanDefinitionBuilder endBuilder = BeanDefinitionBuilder .genericBeanDefinition("org.springframework.batch.core.job.flow.support.state.EndState"); endBuilder.addConstructorArgValue(batchStatus); boolean exitCodeExists = StringUtils.hasText(exitCode); - endBuilder.addConstructorArgValue(new ExitStatus(exitCodeExists ? exitCode : batchStatus.toString())); + endBuilder.addConstructorArgValue(exitCodeExists ? new ExitStatus(exitCode) + : convertToExitStatus(batchStatus)); String endName = "end" + (endCounter++); endBuilder.addConstructorArgValue(endName); @@ -256,7 +257,7 @@ public class FlowParser extends AbstractSingleBeanDefinitionParser { */ private static BatchStatus getBatchStatusFromEndTransitionName(String elementName) { if (PAUSE.equals(elementName)) { - return BatchStatus.STOPPED; + return BatchStatus.INCOMPLETE; } else if (END.equals(elementName)) { return BatchStatus.COMPLETED; @@ -269,6 +270,19 @@ public class FlowParser extends AbstractSingleBeanDefinitionParser { } } + /** + * @param batchStatus A BatchStatus + * @return the ExitStatus corresponding to the BatchStatus + */ + private static ExitStatus convertToExitStatus(BatchStatus batchStatus) { + if (batchStatus == BatchStatus.INCOMPLETE) { + return ExitStatus.FAILED; + } + else { + return new ExitStatus(batchStatus.toString()); + } + } + /** * @param parserContext the parser context * @param stateDefinition a reference to the state implementation diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java index 5d2e77632..da8bc990a 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java @@ -241,7 +241,7 @@ public abstract class AbstractJob implements Job, StepLocator, BeanNameAware, In // The job was already stopped before we even got this far. Deal // with it in the same way as any other interruption. - execution.setStatus(BatchStatus.STOPPED); + execution.setStatus(BatchStatus.FAILED); execution.setExitStatus(ExitStatus.COMPLETED); } @@ -250,13 +250,13 @@ public abstract class AbstractJob implements Job, StepLocator, BeanNameAware, In catch (JobInterruptedException e) { logger.error("Encountered interruption executing job", e); execution.setExitStatus(ExitStatus.FAILED); - execution.setStatus(BatchStatus.STOPPED); + execution.setStatus(BatchStatus.INCOMPLETE); execution.addFailureException(e); } catch (Throwable t) { logger.error("Encountered error executing job", t); execution.setExitStatus(ExitStatus.FAILED); - execution.setStatus(BatchStatus.FAILED); + execution.setStatus(BatchStatus.INCOMPLETE); execution.addFailureException(t); } finally { @@ -293,7 +293,7 @@ public abstract class AbstractJob implements Job, StepLocator, BeanNameAware, In * @return the {@link StepExecution} corresponding to this step * * @throws JobInterruptedException if the {@link JobExecution} has been - * interrupted, and in particular if {@link BatchStatus#STOPPED} or + * interrupted, and in particular if {@link BatchStatus#FAILED} or * {@link BatchStatus#STOPPING} is detected * @throws StartLimitExceededException if the start limit has been exceeded * for this step @@ -302,7 +302,7 @@ public abstract class AbstractJob implements Job, StepLocator, BeanNameAware, In */ protected final StepExecution handleStep(Step step, JobExecution execution) throws JobInterruptedException, JobRestartException, StartLimitExceededException { - if (execution.getStatus() == BatchStatus.STOPPING || execution.getStatus() == BatchStatus.STOPPED) { + if (execution.getStatus() == BatchStatus.STOPPING || execution.getStatus() == BatchStatus.INCOMPLETE) { throw new JobInterruptedException("JobExecution interrupted."); } @@ -331,7 +331,7 @@ public abstract class AbstractJob implements Job, StepLocator, BeanNameAware, In jobRepository.updateExecutionContext(execution); - if (currentStepExecution.getStatus() == BatchStatus.STOPPED + if (currentStepExecution.getStatus() == BatchStatus.FAILED || currentStepExecution.getStatus() == BatchStatus.STOPPING) { throw new JobInterruptedException("Job interrupted by step execution"); } @@ -382,7 +382,8 @@ public abstract class AbstractJob implements Job, StepLocator, BeanNameAware, In + "so it may be dangerous to proceed. " + "Manual intervention is probably necessary."); } - if (stepStatus.isLessThanOrEqualTo(BatchStatus.COMPLETED) && step.isAllowStartIfComplete() == false) { + if ((stepStatus == BatchStatus.COMPLETED && step.isAllowStartIfComplete() == false) + || stepStatus == BatchStatus.FAILED) { // step is complete, false should be returned, indicating that the // step should not be started return false; diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecution.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecution.java index 778698a6d..3843c4e5a 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecution.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecution.java @@ -34,16 +34,6 @@ public class FlowExecution implements Comparable { this.status = status; } - /** - * Convenience constructor that converts a String status to a {@link FlowExecutionStatus}. - * - * @param name - * @param status - */ - public FlowExecution(String name, String status) { - this(name, new FlowExecutionStatus(status)); - } - /** * @return the name of the end state reached */ @@ -52,7 +42,7 @@ public class FlowExecution implements Comparable { } /** - * @return the exit status + * @return the FlowExecutionStatus */ public FlowExecutionStatus getStatus() { return status; diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecutionStatus.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecutionStatus.java index b32f18a5c..ebeb750bd 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecutionStatus.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecutionStatus.java @@ -26,7 +26,7 @@ import org.springframework.batch.core.ExitStatus; */ public class FlowExecutionStatus implements Comparable { - private final String status; + private final BatchStatus batchStatus; private final ExitStatus exitStatus; /** @@ -38,7 +38,12 @@ public class FlowExecutionStatus implements Comparable { /** * Special well-known status value. */ - public static final FlowExecutionStatus STOPPED = new FlowExecutionStatus(BatchStatus.STOPPED, ExitStatus.FAILED); + public static final FlowExecutionStatus STOPPED = new FlowExecutionStatus(BatchStatus.FAILED, ExitStatus.FAILED); + + /** + * Special well-known status value. + */ + public static final FlowExecutionStatus INCOMPLETE = new FlowExecutionStatus(BatchStatus.INCOMPLETE, ExitStatus.FAILED); /** * Special well-known status value. @@ -51,19 +56,11 @@ public class FlowExecutionStatus implements Comparable { public static final FlowExecutionStatus UNKNOWN = new FlowExecutionStatus(BatchStatus.UNKNOWN, ExitStatus.UNKNOWN); /** - * @param status - */ - public FlowExecutionStatus(String status) { - this(status, null); - } - - /** - * @param status * @param exitStatus */ - public FlowExecutionStatus(String status, ExitStatus exitStatus) { - this.status = status; - this.exitStatus = exitStatus; + public FlowExecutionStatus(String exitStatus) { + this.batchStatus = null; + this.exitStatus = new ExitStatus(exitStatus); } /** @@ -74,16 +71,8 @@ public class FlowExecutionStatus implements Comparable { * @param exitStatus */ public FlowExecutionStatus(BatchStatus batchStatus, ExitStatus exitStatus) { - this(batchStatus.toString(), exitStatus); - } - - /** - * Convenience getter for the {@link BatchStatus}. - * - * @return a {@link BatchStatus} representing the status - */ - public BatchStatus getBatchStatus() { - return BatchStatus.match(status); + this.batchStatus = batchStatus; + this.exitStatus = exitStatus; } /** @@ -96,13 +85,13 @@ public class FlowExecutionStatus implements Comparable { * @return negative, zero or positive as per the contract */ public int compareTo(FlowExecutionStatus other) { - BatchStatus one = this.getBatchStatus(); - BatchStatus two = other.getBatchStatus(); - int comparison = one.compareTo(two); - if (comparison == 0) { - return status.compareTo(other.getStatus()); + if (batchStatus != null && other.getBatchStatus() != null) { + int order = batchStatus.compareTo(other.getBatchStatus()); + if (order != 0) { + return order; + } } - return comparison; + return exitStatus.compareTo(other.getExitStatus()); } /** @@ -118,15 +107,15 @@ public class FlowExecutionStatus implements Comparable { return false; } FlowExecutionStatus flowExecutionStatus = (FlowExecutionStatus) other; - return status.equals(flowExecutionStatus.getStatus()); + return batchStatus.equals(flowExecutionStatus.getBatchStatus()); } public String toString() { - return "FlowExecutionStatus: status=[" + status + "] exitstatus=[" + exitStatus + "]"; + return "FlowExecutionStatus: status=[" + batchStatus + "] exitcode=[" + exitStatus.getExitCode() + "]"; } - public String getStatus() { - return status; + public BatchStatus getBatchStatus() { + return batchStatus; } public ExitStatus getExitStatus() { diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowJob.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowJob.java index 4e0a1c783..2f2fa4470 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowJob.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowJob.java @@ -114,8 +114,8 @@ public class FlowJob extends AbstractJob { public String executeStep(Step step) throws JobInterruptedException, JobRestartException, StartLimitExceededException { StepExecution lastStepExecution = stepExecutionHolder.get(); - if (lastStepExecution != null && lastStepExecution.getStatus() == BatchStatus.FAILED) { - lastStepExecution.setStatus(BatchStatus.INCOMPLETE); + if (lastStepExecution != null && lastStepExecution.getStatus() == BatchStatus.INCOMPLETE) { + lastStepExecution.setStatus(BatchStatus.FAILED); updateStepExecution(lastStepExecution); } StepExecution stepExecution = handleStep(step, execution); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/State.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/State.java index fa99a50f7..6473dbb92 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/State.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/State.java @@ -45,4 +45,10 @@ public interface State { */ FlowExecutionStatus handle(FlowExecutor executor) throws Exception; + /** + * Validate that the nextState is appropriate for this State. + * + * @param nextState + */ + void validate(String nextState); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/SimpleFlow.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/SimpleFlow.java index 486990b2f..76bcf3210 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/SimpleFlow.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/SimpleFlow.java @@ -158,8 +158,9 @@ public class SimpleFlow implements Flow, InitializingBean { } String next = null; + String exitCode = status.getExitStatus().getExitCode(); for (StateTransition stateTransition : set) { - if (stateTransition.matches(status.getStatus())) { + if (stateTransition.matches(exitCode)) { if (stateTransition.isEnd()) { // End of job return null; diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java index d12b269f8..eb65116ee 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java @@ -18,6 +18,7 @@ package org.springframework.batch.core.job.flow.support; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.job.flow.State; import org.springframework.batch.support.PatternMatcher; +import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -97,6 +98,10 @@ public class StateTransition implements Comparable { else { this.pattern = pattern; } + + Assert.notNull(state, "A state is required for a StateTransition"); + state.validate(next); + this.next = next; this.state = state; } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/DecisionState.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/DecisionState.java index 53c152cf6..f71889a61 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/DecisionState.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/DecisionState.java @@ -41,4 +41,13 @@ public class DecisionState extends AbstractState { return new FlowExecutionStatus(decider.decide(executor.getJobExecution(), executor.getStepExecution())); } + /* (non-Javadoc) + * @see org.springframework.batch.core.job.flow.State#validate(java.lang.String) + */ + public void validate(String nextState) { + if (nextState == null) { + throw new IllegalStateException("The transition for " + getClass().getSimpleName() + " [" + getName() + + "] requires a 'next' state."); + } + } } \ No newline at end of file diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/EndState.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/EndState.java index 2c250092a..4a4a56d4c 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/EndState.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/EndState.java @@ -58,7 +58,7 @@ public class EndState extends AbstractState { /** * Return the {@link BatchStatus} and {@link ExitStatus} stored. If the - * {@link BatchStatus} is {@link BatchStatus#STOPPED}, then mark it on the + * {@link BatchStatus} is {@link BatchStatus#FAILED}, then mark it on the * {@link JobExecution} so that the job will know to stop. * * @see State#handle(FlowExecutor) @@ -70,7 +70,7 @@ public class EndState extends AbstractState { // restart synchronized (jobExecution) { if (!jobExecution.getStepExecutions().isEmpty()) { - if (status == BatchStatus.STOPPED) { + if (status == BatchStatus.INCOMPLETE) { jobExecution.upgradeStatus(status); jobExecution.setExitStatus(exitStatus); } @@ -79,4 +79,24 @@ public class EndState extends AbstractState { } } + + /* (non-Javadoc) + * @see org.springframework.batch.core.job.flow.State#validate(java.lang.String) + */ + public void validate(String nextState) { + if (status != BatchStatus.INCOMPLETE && nextState != null) { + throw new IllegalStateException("The transition for " + getClass().getSimpleName() + " [" + getName() + + "] may not have a 'next' state."); + } + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return super.toString() + " status=[" + status + "] exitcode=[" + exitStatus.getExitCode() + "] "; + } } \ No newline at end of file diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/SplitState.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/SplitState.java index 01e24a5fb..848af2c90 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/SplitState.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/SplitState.java @@ -103,4 +103,13 @@ public class SplitState extends AbstractState { } + /* (non-Javadoc) + * @see org.springframework.batch.core.job.flow.State#validate(java.lang.String) + */ + public void validate(String nextState) { + if (nextState == null) { + throw new IllegalStateException("The transition for " + getClass().getSimpleName() + " [" + getName() + + "] requires a 'next' state."); + } + } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/StepState.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/StepState.java index eed66d639..c6ab2b4ae 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/StepState.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/StepState.java @@ -61,4 +61,14 @@ public class StepState extends AbstractState implements StepHolder { public Step getStep() { return step; } + + /* (non-Javadoc) + * @see org.springframework.batch.core.job.flow.State#validate(java.lang.String) + */ + public void validate(String nextState) { + if (nextState == null) { + throw new IllegalStateException("The transition for " + getClass().getSimpleName() + " [" + getName() + + "] requires a 'next' state."); + } + } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/partition/support/TaskExecutorPartitionHandler.java b/spring-batch-core/src/main/java/org/springframework/batch/core/partition/support/TaskExecutorPartitionHandler.java index c8a45d181..54edc01e7 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/partition/support/TaskExecutorPartitionHandler.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/partition/support/TaskExecutorPartitionHandler.java @@ -122,7 +122,7 @@ public class TaskExecutorPartitionHandler implements PartitionHandler, Initializ * Set the status in case the caller is tracking it through the * JobExecution. */ - stepExecution.setStatus(BatchStatus.FAILED); + stepExecution.setStatus(BatchStatus.INCOMPLETE); stepExecution.setExitStatus(exitStatus); result.add(stepExecution); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java index bcde89292..6e48baa77 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java @@ -112,7 +112,9 @@ public class SimpleJobRepository implements JobRepository { throw new JobExecutionAlreadyRunningException("A job execution for this job is already running: " + jobInstance); } - if (execution.getStatus() == BatchStatus.COMPLETED) { + + BatchStatus status = execution.getStatus(); + if (status == BatchStatus.COMPLETED || status == BatchStatus.FAILED) { throw new JobInstanceAlreadyCompleteException( "A job instance already exists and is complete for parameters=" + jobParameters + ". If you want to run this job again, change the parameters."); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/AbstractStep.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/AbstractStep.java index 89977d7e7..9fe46a36b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/AbstractStep.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/AbstractStep.java @@ -194,7 +194,7 @@ public abstract class AbstractStep implements Step, InitializingBean, BeanNameAw // Check if someone is trying to stop us if (stepExecution.isTerminateOnly()) { - stepExecution.setStatus(BatchStatus.STOPPED); + stepExecution.setStatus(BatchStatus.FAILED); throw new JobInterruptedException("JobExecution interrupted."); } @@ -263,10 +263,10 @@ public abstract class AbstractStep implements Step, InitializingBean, BeanNameAw return BatchStatus.UNKNOWN; } else if (e instanceof JobInterruptedException || e.getCause() instanceof JobInterruptedException) { - return BatchStatus.STOPPED; + return BatchStatus.FAILED; } else { - return BatchStatus.FAILED; + return BatchStatus.INCOMPLETE; } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java index dcd0acdb8..9504be53b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java @@ -257,7 +257,7 @@ public class TaskletStep extends AbstractStep { locked = true; } catch (InterruptedException e) { - stepExecution.setStatus(BatchStatus.STOPPED); + stepExecution.setStatus(BatchStatus.FAILED); Thread.currentThread().interrupt(); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/BatchStatusTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/BatchStatusTests.java index acee2777e..e7b8227ad 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/BatchStatusTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/BatchStatusTests.java @@ -45,17 +45,17 @@ public class BatchStatusTests { @Test public void testMaxStatus() { - assertEquals(BatchStatus.FAILED, BatchStatus.max(BatchStatus.FAILED,BatchStatus.COMPLETED)); - assertEquals(BatchStatus.FAILED, BatchStatus.max(BatchStatus.COMPLETED, BatchStatus.FAILED)); - assertEquals(BatchStatus.FAILED, BatchStatus.max(BatchStatus.FAILED, BatchStatus.FAILED)); + assertEquals(BatchStatus.INCOMPLETE, BatchStatus.max(BatchStatus.INCOMPLETE,BatchStatus.COMPLETED)); + assertEquals(BatchStatus.INCOMPLETE, BatchStatus.max(BatchStatus.COMPLETED, BatchStatus.INCOMPLETE)); + assertEquals(BatchStatus.INCOMPLETE, BatchStatus.max(BatchStatus.INCOMPLETE, BatchStatus.INCOMPLETE)); assertEquals(BatchStatus.STARTED, BatchStatus.max(BatchStatus.STARTED, BatchStatus.STARTING)); assertEquals(BatchStatus.STARTED, BatchStatus.max(BatchStatus.COMPLETED, BatchStatus.STARTED)); } @Test public void testUpgradeStatusFinished() { - assertEquals(BatchStatus.FAILED, BatchStatus.FAILED.upgradeTo(BatchStatus.COMPLETED)); - assertEquals(BatchStatus.FAILED, BatchStatus.COMPLETED.upgradeTo(BatchStatus.FAILED)); + assertEquals(BatchStatus.INCOMPLETE, BatchStatus.INCOMPLETE.upgradeTo(BatchStatus.COMPLETED)); + assertEquals(BatchStatus.INCOMPLETE, BatchStatus.COMPLETED.upgradeTo(BatchStatus.INCOMPLETE)); } @Test @@ -68,7 +68,7 @@ public class BatchStatusTests { @Test public void testIsRunning() { - assertFalse(BatchStatus.FAILED.isRunning()); + assertFalse(BatchStatus.INCOMPLETE.isRunning()); assertFalse(BatchStatus.COMPLETED.isRunning()); assertTrue(BatchStatus.STARTED.isRunning()); assertTrue(BatchStatus.STARTING.isRunning()); @@ -76,7 +76,7 @@ public class BatchStatusTests { @Test public void testIsUnsuccessful() { - assertTrue(BatchStatus.FAILED.isUnsuccessful()); + assertTrue(BatchStatus.INCOMPLETE.isUnsuccessful()); assertFalse(BatchStatus.COMPLETED.isUnsuccessful()); assertFalse(BatchStatus.STARTED.isUnsuccessful()); assertFalse(BatchStatus.STARTING.isUnsuccessful()); @@ -84,7 +84,7 @@ public class BatchStatusTests { @Test public void testGetStatus() { - assertEquals(BatchStatus.FAILED, BatchStatus.valueOf(BatchStatus.FAILED.toString())); + assertEquals(BatchStatus.INCOMPLETE, BatchStatus.valueOf(BatchStatus.INCOMPLETE.toString())); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/JobExecutionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/JobExecutionTests.java index 4be3a5b12..67f9b24eb 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/JobExecutionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/JobExecutionTests.java @@ -113,9 +113,9 @@ public class JobExecutionTests { */ @Test public void testDowngradeStatus() { - execution.setStatus(BatchStatus.FAILED); + execution.setStatus(BatchStatus.INCOMPLETE); execution.upgradeStatus(BatchStatus.COMPLETED); - assertEquals(BatchStatus.FAILED, execution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, execution.getStatus()); } /** diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/StepExecutionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/StepExecutionTests.java index 8f5ee9ec5..106c386fc 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/StepExecutionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/StepExecutionTests.java @@ -286,9 +286,9 @@ public class StepExecutionTests { */ @Test public void testDowngradeStatus() { - execution.setStatus(BatchStatus.FAILED); + execution.setStatus(BatchStatus.INCOMPLETE); execution.upgradeStatus(BatchStatus.COMPLETED); - assertEquals(BatchStatus.FAILED, execution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, execution.getStatus()); } private StepExecution newStepExecution(Step step, Long long2) { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultFailureJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultFailureJobParserTests.java index 574f48741..041f0e0d4 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultFailureJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultFailureJobParserTests.java @@ -44,15 +44,15 @@ public class DefaultFailureJobParserTests extends AbstractJobParserTests { assertTrue(stepNamesList.contains("s1")); assertTrue(stepNamesList.contains("fail")); - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); - assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); + assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode()); StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); - assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionDefaultStatusJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionDefaultStatusJobParserTests.java index 6eab69b15..898bed1e1 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionDefaultStatusJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionDefaultStatusJobParserTests.java @@ -47,7 +47,7 @@ public class EndTransitionDefaultStatusJobParserTests extends AbstractJobParserT assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); StepExecution stepExecution1 = getStepExecution(jobExecution, "fail"); - assertEquals(BatchStatus.FAILED, stepExecution1.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution1.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode()); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionJobParserTests.java index 4ca7874fa..d799493a0 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionJobParserTests.java @@ -57,7 +57,7 @@ public class EndTransitionJobParserTests extends AbstractJobParserTests { assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); - assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); // diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionJobParserTests.java index c5108d5a4..387b07b06 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionJobParserTests.java @@ -17,6 +17,7 @@ package org.springframework.batch.core.configuration.xml; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import org.junit.Test; import org.junit.runner.RunWith; @@ -24,6 +25,7 @@ import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.StepExecution; +import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -55,24 +57,21 @@ public class FailTransitionJobParserTests extends AbstractJobParserTests { assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); - assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); // // Second Launch // stepNamesList.clear(); - jobExecution = createJobExecution(); - job.execute(jobExecution); - assertEquals(1, stepNamesList.size()); // step1 is not executed - assertTrue(stepNamesList.contains("fail")); - - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); - assertEquals("EARLY TERMINATION (FAIL)", jobExecution.getExitStatus().getExitCode()); - - StepExecution stepExecution3 = getStepExecution(jobExecution, "fail"); - assertEquals(BatchStatus.FAILED, stepExecution3.getStatus()); - assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution3.getExitStatus().getExitCode()); + try { + jobExecution = createJobExecution(); + fail("JobInstanceAlreadyCompleteException expected"); + } catch (JobInstanceAlreadyCompleteException e) { + // + // Expected + // + } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/NextAttributeDefaultFailureJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/NextAttributeDefaultFailureJobParserTests.java index 852b0a6b9..55f2db47e 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/NextAttributeDefaultFailureJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/NextAttributeDefaultFailureJobParserTests.java @@ -55,7 +55,7 @@ public class NextAttributeDefaultFailureJobParserTests { assertNotNull(job); JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), new JobParameters()); job.execute(jobExecution); - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); assertEquals(1, jobExecution.getStepExecutions().size()); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests.java index c1b18de63..4f672bd2d 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests.java @@ -44,7 +44,7 @@ public class SplitDifferentResultsFailFirstJobParserTests extends AbstractJobPar assertTrue(stepNamesList.contains("s1")); assertTrue(stepNamesList.contains("fail")); - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus()); StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); @@ -52,7 +52,7 @@ public class SplitDifferentResultsFailFirstJobParserTests extends AbstractJobPar assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); - assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests.java index 3c88e182b..445bfb550 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests.java @@ -53,7 +53,7 @@ public class SplitDifferentResultsFailSecondJobParserTests extends AbstractJobPa assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); - assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); StepExecution stepExecution3 = getStepExecution(jobExecution, "s3"); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopIncompleteJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopIncompleteJobParserTests.java index 202591aab..98158e16b 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopIncompleteJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopIncompleteJobParserTests.java @@ -47,11 +47,11 @@ public class StopIncompleteJobParserTests extends AbstractJobParserTests { assertEquals(1, stepNamesList.size()); assertTrue(stepNamesList.contains("fail")); - assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode()); StepExecution stepExecution1 = getStepExecution(jobExecution, "fail"); - assertEquals(BatchStatus.INCOMPLETE, stepExecution1.getStatus()); + assertEquals(BatchStatus.FAILED, stepExecution1.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode()); // diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java index 39601d82e..40b462f3e 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java @@ -47,7 +47,7 @@ public class StopJobParserTests extends AbstractJobParserTests { assertEquals(1, stepNamesList.size()); assertTrue(stepNamesList.contains("s1")); - assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode()); StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/AbstractJobTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/AbstractJobTests.java index 2926dd582..8cac49937 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/AbstractJobTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/AbstractJobTests.java @@ -140,7 +140,7 @@ public class AbstractJobTests { // simulate restart and check the job execution context's content survives execution.setEndTime(new Date()); - execution.setStatus(BatchStatus.FAILED); + execution.setStatus(BatchStatus.INCOMPLETE); repository.update(execution); JobExecution restarted = repository.createJobExecution("testHandleStepJob", new JobParameters()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/SimpleJobTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/SimpleJobTests.java index f5d10a577..47d3282a5 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/SimpleJobTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/SimpleJobTests.java @@ -251,7 +251,7 @@ public class SimpleJobTests { assertEquals(2, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getStepExecutions().iterator().next().getFailureExceptions().get(0)); assertEquals(0, list.size()); - checkRepository(BatchStatus.STOPPED, ExitStatus.FAILED); + checkRepository(BatchStatus.INCOMPLETE, ExitStatus.FAILED); } @Test @@ -265,8 +265,8 @@ public class SimpleJobTests { assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getAllFailureExceptions().get(0)); assertEquals(0, list.size()); - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); - checkRepository(BatchStatus.FAILED, ExitStatus.FAILED); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); + checkRepository(BatchStatus.INCOMPLETE, ExitStatus.FAILED); } @Test @@ -283,7 +283,7 @@ public class SimpleJobTests { assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getAllFailureExceptions().get(0)); assertEquals(1, list.size()); - checkRepository(BatchStatus.FAILED, ExitStatus.FAILED); + checkRepository(BatchStatus.INCOMPLETE, ExitStatus.FAILED); } @Test @@ -297,7 +297,7 @@ public class SimpleJobTests { assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getAllFailureExceptions().get(0)); assertEquals(0, list.size()); - checkRepository(BatchStatus.FAILED, ExitStatus.FAILED); + checkRepository(BatchStatus.INCOMPLETE, ExitStatus.FAILED); } @Test @@ -352,7 +352,7 @@ public class SimpleJobTests { job.execute(jobExecution); assertEquals(0, list.size()); - checkRepository(BatchStatus.STOPPED, ExitStatus.NOOP); + checkRepository(BatchStatus.FAILED, ExitStatus.NOOP); ExitStatus exitStatus = jobExecution.getExitStatus(); assertEquals(ExitStatus.NOOP.getExitCode(), exitStatus.getExitCode()); } @@ -386,7 +386,7 @@ public class SimpleJobTests { job.setJobExecutionListeners(new JobExecutionListener[] { listener }); job.execute(jobExecution); - assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); verify(listener); } @@ -438,7 +438,7 @@ public class SimpleJobTests { job.setSteps(Arrays.asList(new Step[] { step1, step2 })); job.execute(jobExecution); - assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); assertEquals(1, jobExecution.getAllFailureExceptions().size()); Throwable expected = jobExecution.getAllFailureExceptions().get(0); assertTrue("Wrong exception " + expected, expected instanceof JobInterruptedException); @@ -536,19 +536,19 @@ public class SimpleJobTests { if (exception instanceof RuntimeException) { stepExecution.setExitStatus(ExitStatus.FAILED); - stepExecution.setStatus(BatchStatus.FAILED); + stepExecution.setStatus(BatchStatus.INCOMPLETE); stepExecution.addFailureException(exception); return; } if (exception instanceof Error) { stepExecution.setExitStatus(ExitStatus.FAILED); - stepExecution.setStatus(BatchStatus.FAILED); + stepExecution.setStatus(BatchStatus.INCOMPLETE); stepExecution.addFailureException(exception); return; } if (exception instanceof JobInterruptedException) { stepExecution.setExitStatus(ExitStatus.FAILED); - stepExecution.setStatus(BatchStatus.STOPPED); + stepExecution.setStatus(BatchStatus.FAILED); stepExecution.addFailureException(exception); return; } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowExecutionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowExecutionTests.java index 459020562..845125c11 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowExecutionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowExecutionTests.java @@ -29,15 +29,15 @@ public class FlowExecutionTests { @Test public void testBasicProperties() throws Exception { - FlowExecution execution = new FlowExecution("foo", "BAR"); + FlowExecution execution = new FlowExecution("foo", new FlowExecutionStatus("BAR")); assertEquals("foo",execution.getName()); - assertEquals("BAR",execution.getStatus().getStatus()); + assertEquals("BAR",execution.getStatus().getExitStatus().getExitCode()); } @Test public void testAlphaOrdering() throws Exception { - FlowExecution first = new FlowExecution("foo", "BAR"); - FlowExecution second = new FlowExecution("foo", "SPAM"); + FlowExecution first = new FlowExecution("foo", new FlowExecutionStatus("BAR")); + FlowExecution second = new FlowExecution("foo", new FlowExecutionStatus("SPAM")); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); } @@ -45,31 +45,31 @@ public class FlowExecutionTests { @Test public void testEnumOrdering() throws Exception { FlowExecution first = new FlowExecution("foo", FlowExecutionStatus.COMPLETED); - FlowExecution second = new FlowExecution("foo", FlowExecutionStatus.FAILED); + FlowExecution second = new FlowExecution("foo", FlowExecutionStatus.INCOMPLETE); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); } @Test public void testEnumStartsWithOrdering() throws Exception { - FlowExecution first = new FlowExecution("foo", "COMPLETED.BAR"); - FlowExecution second = new FlowExecution("foo", "FAILED.FOO"); + FlowExecution first = new FlowExecution("foo", new FlowExecutionStatus("COMPLETED.BAR")); + FlowExecution second = new FlowExecution("foo", new FlowExecutionStatus("FAILED.FOO")); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); } @Test public void testEnumStartsWithAlphaOrdering() throws Exception { - FlowExecution first = new FlowExecution("foo", "COMPLETED.BAR"); - FlowExecution second = new FlowExecution("foo", "COMPLETED.FOO"); + FlowExecution first = new FlowExecution("foo", new FlowExecutionStatus("COMPLETED.BAR")); + FlowExecution second = new FlowExecution("foo", new FlowExecutionStatus("COMPLETED.FOO")); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); } @Test public void testEnumAndAlpha() throws Exception { - FlowExecution first = new FlowExecution("foo", "ZZZZZ"); - FlowExecution second = new FlowExecution("foo", "FAILED.FOO"); + FlowExecution first = new FlowExecution("foo", new FlowExecutionStatus("ZZZZZ")); + FlowExecution second = new FlowExecution("foo", new FlowExecutionStatus("FAILED.FOO")); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowJobTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowJobTests.java index b017ddedd..5026f071c 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowJobTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowJobTests.java @@ -32,8 +32,8 @@ import org.springframework.batch.core.JobInterruptedException; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.UnexpectedJobExecutionException; import org.springframework.batch.core.job.flow.support.SimpleFlow; +import org.springframework.batch.core.job.flow.support.StateSupport; import org.springframework.batch.core.job.flow.support.StateTransition; import org.springframework.batch.core.job.flow.support.state.DecisionState; import org.springframework.batch.core.job.flow.support.state.EndState; @@ -73,7 +73,10 @@ public class FlowJobTests { SimpleFlow flow = new SimpleFlow("job"); List transitions = new ArrayList(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2")); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step2")))); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end0")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end1")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); @@ -87,15 +90,11 @@ public class FlowJobTests { public void testFailedStep() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List transitions = new ArrayList(); - transitions.add(StateTransition.createStateTransition(new StepState(new StepSupport("step1") { - @Override - public void execute(StepExecution stepExecution) throws JobInterruptedException, - UnexpectedJobExecutionException { - stepExecution.setStatus(BatchStatus.FAILED); - stepExecution.setExitStatus(ExitStatus.FAILED); - } - }), "step2")); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step2")))); + transitions.add(StateTransition.createStateTransition(new StateSupport("step1", FlowExecutionStatus.INCOMPLETE), "step2")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end0")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end1")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); @@ -110,43 +109,24 @@ public class FlowJobTests { public void testFailedStepRestarted() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List transitions = new ArrayList(); - transitions.add(StateTransition.createStateTransition(new StepState(new StepSupport("step1") { + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2")); + State step2State = new StateSupport("step2") { @Override - public void execute(StepExecution stepExecution) throws JobInterruptedException, - UnexpectedJobExecutionException { - stepExecution.setStatus(BatchStatus.FAILED); - stepExecution.setExitStatus(ExitStatus.FAILED); - jobRepository.update(stepExecution); - } - }), "step2")); - transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2") { - @Override - public void execute(StepExecution stepExecution) throws JobInterruptedException, - UnexpectedJobExecutionException { + public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { + JobExecution jobExecution = executor.getJobExecution(); + jobExecution.getStepExecutions().add(new StepExecution(getName(), jobExecution)); if (fail) { - stepExecution.setStatus(BatchStatus.FAILED); - stepExecution.setExitStatus(ExitStatus.FAILED); - jobRepository.update(stepExecution); - } else { - super.execute(stepExecution); + return FlowExecutionStatus.INCOMPLETE; + } + else { + return FlowExecutionStatus.COMPLETED; } } - }), ExitStatus.COMPLETED.getExitCode(), "end0")); - transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2") { - @Override - public void execute(StepExecution stepExecution) throws JobInterruptedException, - UnexpectedJobExecutionException { - if (fail) { - stepExecution.setStatus(BatchStatus.FAILED); - stepExecution.setExitStatus(ExitStatus.FAILED); - jobRepository.update(stepExecution); - } else { - super.execute(stepExecution); - } - } - }), ExitStatus.FAILED.getExitCode(), "end1")); + }; + transitions.add(StateTransition.createStateTransition(step2State, ExitStatus.COMPLETED.getExitCode(), "end0")); + transitions.add(StateTransition.createStateTransition(step2State, ExitStatus.FAILED.getExitCode(), "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0"))); - transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.FAILED, "end1"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); @@ -166,14 +146,14 @@ public class FlowJobTests { public void testStoppingStep() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List transitions = new ArrayList(); - transitions.add(StateTransition.createStateTransition(new StepState(new StepSupport("step1") { - @Override - public void execute(StepExecution stepExecution) throws JobInterruptedException, - UnexpectedJobExecutionException { - stepExecution.setStatus(BatchStatus.STOPPED); - } - }), "step2")); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step2")))); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2")); + State state2 = new StateSupport("step2", FlowExecutionStatus.INCOMPLETE); + transitions.add(StateTransition.createStateTransition(state2, ExitStatus.FAILED.getExitCode(), "end0")); + transitions.add(StateTransition.createStateTransition(state2, ExitStatus.COMPLETED.getExitCode(), "end1")); + transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0"), "step3")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1"))); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), "end2")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end2"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); @@ -184,7 +164,7 @@ public class FlowJobTests { catch (JobInterruptedException e) { // expected } - assertEquals(1, jobExecution.getStepExecutions().size()); + assertEquals(2, jobExecution.getStepExecutions().size()); } @Test @@ -192,8 +172,11 @@ public class FlowJobTests { SimpleFlow flow = new SimpleFlow("job"); List transitions = new ArrayList(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end")); - transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.STOPPED, "end"), "step2")); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step2")))); + transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end"), "step2")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end0")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end1")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); @@ -211,13 +194,16 @@ public class FlowJobTests { SimpleFlow flow = new SimpleFlow("job"); List transitions = new ArrayList(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end")); - transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.FAILED, "end"), "step2")); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step2")))); + transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end"), "step2")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end0")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end1")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end0"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); job.doExecute(jobExecution); - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); assertEquals(1, jobExecution.getStepExecutions().size()); } @@ -226,18 +212,18 @@ public class FlowJobTests { SimpleFlow flow = new SimpleFlow("job"); List transitions = new ArrayList(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end")); - transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.STOPPED, "end"), "step2")); + transitions.add(StateTransition.createStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end"), "step2")); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end0")); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0"))); - transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.FAILED, "end1"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); // To test a restart we have to use the AbstractJob.execute()... job.execute(jobExecution); - assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); assertEquals(1, jobExecution.getStepExecutions().size()); jobExecution = jobRepository.createJobExecution("job", new JobParameters()); @@ -252,10 +238,15 @@ public class FlowJobTests { SimpleFlow flow = new SimpleFlow("job"); List transitions = new ArrayList(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "step2")); - transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "COMPLETED", - "step3")); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step2")))); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step3")))); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "COMPLETED", "step3")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end0")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end1")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end1"))); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), ExitStatus.FAILED.getExitCode(), "end2")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), ExitStatus.COMPLETED.getExitCode(), "end3")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end2"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end3"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); @@ -268,9 +259,8 @@ public class FlowJobTests { @Test public void testBasicFlow() throws Throwable { SimpleFlow flow = new SimpleFlow("job"); - Step step = new StubStep("step"); List transitions = new ArrayList(); - transitions.add(StateTransition.createStateTransition(new StepState(step), "end0")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step")), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0"))); flow.setStateTransitions(transitions); job.setFlow(flow); @@ -293,12 +283,17 @@ public class FlowJobTests { }; List transitions = new ArrayList(); - transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "*", "decision")); - transitions.add(StateTransition.createStateTransition(new DecisionState(decider, "decision"), "*", "step2")); - transitions.add(StateTransition - .createStateTransition(new DecisionState(decider, "decision"), "SWITCH", "step3")); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step2")), "*")); - transitions.add(StateTransition.createEndStateTransition(new StepState(new StubStep("step3")), "*")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "decision")); + transitions.add(StateTransition.createStateTransition(new DecisionState(decider, "decision"), "step2")); + transitions.add(StateTransition.createStateTransition(new DecisionState(decider, "decision"), "SWITCH", "step3")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.COMPLETED.getExitCode(), "end0")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), ExitStatus.FAILED.getExitCode(), "end1")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end0"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end1"))); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), ExitStatus.FAILED.getExitCode(), "end2")); + transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step3")), ExitStatus.COMPLETED.getExitCode(), "end3")); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.INCOMPLETE, ExitStatus.FAILED, "end2"))); + transitions.add(StateTransition.createEndStateTransition(new EndState(BatchStatus.COMPLETED, "end3"))); flow.setStateTransitions(transitions); job.setFlow(flow); @@ -325,7 +320,6 @@ public class FlowJobTests { job.setFlow(flow); job.afterPropertiesSet(); - Step step = job.getStep("step2"); assertNotNull(step); assertEquals("step2", step.getName()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/SimpleFlowTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/SimpleFlowTests.java index 834ae069d..a53e66be9 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/SimpleFlowTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/SimpleFlowTests.java @@ -162,7 +162,7 @@ public class SimpleFlowTests { flow.setStateTransitions(collect(StateTransition.createStateTransition(new StubState("step1") { @Override public FlowExecutionStatus handle(FlowExecutor executor) { - return FlowExecutionStatus.FAILED; + return FlowExecutionStatus.INCOMPLETE; } }, "step2"), StateTransition.createEndStateTransition(new StubState("step2")))); flow.afterPropertiesSet(); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/StateSupport.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/StateSupport.java index e7c5b45b6..b9631ca68 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/StateSupport.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/StateSupport.java @@ -15,6 +15,8 @@ */ package org.springframework.batch.core.job.flow.support; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.job.flow.FlowExecutionStatus; import org.springframework.batch.core.job.flow.FlowExecutor; import org.springframework.batch.core.job.flow.State; @@ -28,16 +30,26 @@ import org.springframework.batch.core.job.flow.support.state.AbstractState; */ public class StateSupport extends AbstractState { - /** - * @param name - */ + private FlowExecutionStatus status; + public StateSupport(String name) { + this(name, FlowExecutionStatus.COMPLETED); + } + + public StateSupport(String name, FlowExecutionStatus status) { super(name); + this.status = status; } @Override public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { - return FlowExecutionStatus.COMPLETED; + JobExecution jobExecution = executor.getJobExecution(); + if (jobExecution != null) { + jobExecution.getStepExecutions().add(new StepExecution(getName(), jobExecution)); + } + return this.status; } + public void validate(String nextState) { + } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/StateTransitionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/StateTransitionTests.java index 0acfb276d..2d7f8aea5 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/StateTransitionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/StateTransitionTests.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import org.junit.Test; -import org.springframework.batch.core.job.flow.support.StateTransition; +import org.springframework.batch.core.job.flow.State; /** * @author Dave Syer @@ -28,98 +28,100 @@ import org.springframework.batch.core.job.flow.support.StateTransition; */ public class StateTransitionTests { + State state = new StateSupport("state1"); + @Test public void testIsEnd() { - StateTransition transition = StateTransition.createEndStateTransition(null, ""); + StateTransition transition = StateTransition.createEndStateTransition(state, ""); assertTrue(transition.isEnd()); assertNull(transition.getNext()); } @Test public void testMatchesStar() { - StateTransition transition = StateTransition.createStateTransition(null, "*", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "*", "start"); assertTrue(transition.matches("CONTINUABLE")); } @Test public void testMatchesNull() { - StateTransition transition = StateTransition.createStateTransition(null, null, "start"); + StateTransition transition = StateTransition.createStateTransition(state, null, "start"); assertTrue(transition.matches("CONTINUABLE")); } @Test public void testMatchesEmpty() { - StateTransition transition = StateTransition.createStateTransition(null, "", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "", "start"); assertTrue(transition.matches("CONTINUABLE")); } @Test public void testMatchesExact() { - StateTransition transition = StateTransition.createStateTransition(null, "CONTINUABLE", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "CONTINUABLE", "start"); assertTrue(transition.matches("CONTINUABLE")); } @Test public void testMatchesWildcard() { - StateTransition transition = StateTransition.createStateTransition(null, "CONTIN*", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "CONTIN*", "start"); assertTrue(transition.matches("CONTINUABLE")); } @Test public void testMatchesPlaceholder() { - StateTransition transition = StateTransition.createStateTransition(null, "CONTIN???LE", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start"); assertTrue(transition.matches("CONTINUABLE")); } @Test public void testSimpleOrderingEqual() { - StateTransition transition = StateTransition.createStateTransition(null, "CONTIN???LE", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start"); assertEquals(0, transition.compareTo(transition)); } @Test public void testSimpleOrderingMoreGeneral() { - StateTransition transition = StateTransition.createStateTransition(null, "CONTIN???LE", "start"); - StateTransition other = StateTransition.createStateTransition(null, "CONTINUABLE", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start"); + StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start"); assertEquals(1, transition.compareTo(other)); assertEquals(-1, other.compareTo(transition)); } @Test public void testSimpleOrderingMostGeneral() { - StateTransition transition = StateTransition.createStateTransition(null, "*", "start"); - StateTransition other = StateTransition.createStateTransition(null, "CONTINUABLE", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "*", "start"); + StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start"); assertEquals(1, transition.compareTo(other)); assertEquals(-1, other.compareTo(transition)); } @Test public void testSubstringAndWildcard() { - StateTransition transition = StateTransition.createStateTransition(null, "CONTIN*", "start"); - StateTransition other = StateTransition.createStateTransition(null, "CONTINUABLE", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "CONTIN*", "start"); + StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start"); assertEquals(1, transition.compareTo(other)); assertEquals(-1, other.compareTo(transition)); } @Test public void testSimpleOrderingMostToNextGeneral() { - StateTransition transition = StateTransition.createStateTransition(null, "*", "start"); - StateTransition other = StateTransition.createStateTransition(null, "C?", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "*", "start"); + StateTransition other = StateTransition.createStateTransition(state, "C?", "start"); assertEquals(1, transition.compareTo(other)); assertEquals(-1, other.compareTo(transition)); } @Test public void testSimpleOrderingAdjacent() { - StateTransition transition = StateTransition.createStateTransition(null, "CON*", "start"); - StateTransition other = StateTransition.createStateTransition(null, "CON?", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "CON*", "start"); + StateTransition other = StateTransition.createStateTransition(state, "CON?", "start"); assertEquals(1, transition.compareTo(other)); assertEquals(-1, other.compareTo(transition)); } @Test public void testToString() { - StateTransition transition = StateTransition.createStateTransition(null, "CONTIN???LE", "start"); + StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start"); String string = transition.toString(); assertTrue("Wrong string: " + string, string.contains("Transition")); assertTrue("Wrong string: " + string, string.contains("start")); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/state/EndStateTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/state/EndStateTests.java index 7178a377d..4530deb1d 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/state/EndStateTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/state/EndStateTests.java @@ -87,7 +87,7 @@ public class EndStateTests { @Test public void testHandleOngoingAttemptedDowngrade() throws Exception { - jobExecution.setStatus(BatchStatus.FAILED); + jobExecution.setStatus(BatchStatus.INCOMPLETE); jobExecution.createStepExecution("foo"); EndState state = new EndState(BatchStatus.COMPLETED, "end"); @@ -99,7 +99,7 @@ public class EndStateTests { }); // Can't downgrade a status - if it failed then it failed - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/state/SimpleFlowExecutionAggregatorTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/state/SimpleFlowExecutionAggregatorTests.java index c70d93713..e953f5243 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/state/SimpleFlowExecutionAggregatorTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/support/state/SimpleFlowExecutionAggregatorTests.java @@ -36,10 +36,10 @@ public class SimpleFlowExecutionAggregatorTests { @Test public void testFailed() throws Exception { FlowExecution first = new FlowExecution("foo", FlowExecutionStatus.COMPLETED); - FlowExecution second = new FlowExecution("foo", FlowExecutionStatus.FAILED); + FlowExecution second = new FlowExecution("foo", FlowExecutionStatus.INCOMPLETE); assertTrue("Should be negative", first.compareTo(second)<0); assertTrue("Should be positive", second.compareTo(first)>0); - assertEquals(FlowExecutionStatus.FAILED, aggregator.aggregate(Arrays.asList(first, second))); + assertEquals(FlowExecutionStatus.INCOMPLETE, aggregator.aggregate(Arrays.asList(first, second))); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/partition/RestartIntegrationTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/partition/RestartIntegrationTests.java index 4d3a617c7..48fcbd7db 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/partition/RestartIntegrationTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/partition/RestartIntegrationTests.java @@ -78,7 +78,7 @@ public class RestartIntegrationTests { int beforePartition = jdbcTemplate.queryForInt("SELECT COUNT(*) from BATCH_STEP_EXECUTION where STEP_NAME like 'step1:partition%'"); JobExecution execution = jobLauncher.run(job, jobParameters); - assertEquals(BatchStatus.FAILED,execution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE,execution.getStatus()); assertNotNull(jobLauncher.run(job, jobParameters)); int afterMaster = jdbcTemplate.queryForInt("SELECT COUNT(*) from BATCH_STEP_EXECUTION where STEP_NAME='step1:master'"); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/PartitionStepTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/PartitionStepTests.java index 7132cb573..93bbb1341 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/PartitionStepTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/PartitionStepTests.java @@ -88,7 +88,7 @@ public class PartitionStepTests { throws Exception { Set executions = stepSplitter.split(stepExecution, 2); for (StepExecution execution : executions) { - execution.setStatus(BatchStatus.FAILED); + execution.setStatus(BatchStatus.INCOMPLETE); execution.setExitStatus(ExitStatus.FAILED); } return executions; @@ -101,7 +101,7 @@ public class PartitionStepTests { step.execute(stepExecution); // one master and two workers assertEquals(3, stepExecution.getJobExecution().getStepExecutions().size()); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/StepExecutionAggregatorTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/StepExecutionAggregatorTests.java index c9fff9c88..c607b2194 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/StepExecutionAggregatorTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/StepExecutionAggregatorTests.java @@ -45,21 +45,21 @@ public class StepExecutionAggregatorTests { @Test public void testAggregateStatusFromFailure() { - result.setStatus(BatchStatus.FAILED); + result.setStatus(BatchStatus.INCOMPLETE); stepExecution1.setStatus(BatchStatus.COMPLETED); stepExecution2.setStatus(BatchStatus.COMPLETED); aggregator.aggregate(result, Arrays. asList(stepExecution1, stepExecution2)); assertNotNull(result); - assertEquals(BatchStatus.FAILED, result.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, result.getStatus()); } @Test public void testAggregateStatusIncomplete() { stepExecution1.setStatus(BatchStatus.COMPLETED); - stepExecution2.setStatus(BatchStatus.FAILED); + stepExecution2.setStatus(BatchStatus.INCOMPLETE); aggregator.aggregate(result, Arrays. asList(stepExecution1, stepExecution2)); assertNotNull(result); - assertEquals(BatchStatus.FAILED, result.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, result.getStatus()); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java index 2e9bf9219..c74628fd0 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java @@ -184,7 +184,7 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona dao.saveStepExecution(stepExecution); Integer versionAfterSave = stepExecution.getVersion(); - stepExecution.setStatus(BatchStatus.STOPPED); + stepExecution.setStatus(BatchStatus.FAILED); stepExecution.setLastUpdated(new Date(System.currentTimeMillis())); dao.updateStepExecution(stepExecution); assertEquals(versionAfterSave + 1, stepExecution.getVersion().intValue()); @@ -192,7 +192,7 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona StepExecution retrieved = dao.getStepExecution(jobExecution, stepExecution.getId()); assertEquals(stepExecution, retrieved); assertEquals(stepExecution.getLastUpdated(), retrieved.getLastUpdated()); - assertEquals(BatchStatus.STOPPED, retrieved.getStatus()); + assertEquals(BatchStatus.FAILED, retrieved.getStatus()); } /** diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java index 48370485b..f8385fd16 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java @@ -113,10 +113,10 @@ public class SimpleJobRepositoryIntegrationTests { // first execution failed firstJobExec.setStartTime(new Date(4)); firstStepExec.setStartTime(new Date(5)); - firstStepExec.setStatus(BatchStatus.FAILED); + firstStepExec.setStatus(BatchStatus.INCOMPLETE); firstStepExec.setEndTime(new Date(6)); jobRepository.update(firstStepExec); - firstJobExec.setStatus(BatchStatus.FAILED); + firstJobExec.setStatus(BatchStatus.INCOMPLETE); firstJobExec.setEndTime(new Date(7)); jobRepository.update(firstJobExec); @@ -182,7 +182,7 @@ public class SimpleJobRepositoryIntegrationTests { @Test public void testGetLastJobExecution() throws Exception { JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters); - jobExecution.setStatus(BatchStatus.FAILED); + jobExecution.setStatus(BatchStatus.INCOMPLETE); jobExecution.setEndTime(new Date()); jobRepository.update(jobExecution); Thread.sleep(10); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/AbstractStepTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/AbstractStepTests.java index 63b0b1481..8fbc8c7a3 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/AbstractStepTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/AbstractStepTests.java @@ -204,7 +204,7 @@ public class AbstractStepTests { tested.setStepExecutionListeners(new StepExecutionListener[] { listener1, listener2 }); tested.execute(execution); - assertEquals(BatchStatus.FAILED, execution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, execution.getStatus()); Throwable expected = execution.getFailureExceptions().get(0); assertEquals("crash!", expected.getMessage()); @@ -242,7 +242,7 @@ public class AbstractStepTests { tested.setStepExecutionListeners(new StepExecutionListener[] { listener1, listener2 }); tested.execute(execution); - assertEquals(BatchStatus.STOPPED, execution.getStatus()); + assertEquals(BatchStatus.FAILED, execution.getStatus()); Throwable expected = execution.getFailureExceptions().get(0); assertEquals("JobExecution interrupted.", expected.getMessage()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRetryTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRetryTests.java index 0d923a734..c97ff2f67 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRetryTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRetryTests.java @@ -343,7 +343,7 @@ public class FaultTolerantStepFactoryBeanRetryTests { StepExecution stepExecution = new StepExecution(step.getName(), jobExecution); repository.add(stepExecution); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); List expectedOutput = Arrays.asList(StringUtils.commaDelimitedListToStringArray("")); assertEquals(expectedOutput, written); @@ -439,7 +439,7 @@ public class FaultTolerantStepFactoryBeanRetryTests { StepExecution stepExecution = new StepExecution(step.getName(), jobExecution); repository.add(stepExecution); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); List expectedOutput = Arrays.asList(StringUtils.commaDelimitedListToStringArray("")); assertEquals(expectedOutput, written); @@ -488,7 +488,7 @@ public class FaultTolerantStepFactoryBeanRetryTests { StepExecution stepExecution = new StepExecution(step.getName(), jobExecution); repository.add(stepExecution); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); // We added a bogus cache so no items are actually skipped // because they aren't recognised as eligible diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanTests.java index 1be22784f..2644f075f 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanTests.java @@ -112,7 +112,7 @@ public class FaultTolerantStepFactoryBeanTests { Step step = (Step) factory.getObject(); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); assertTrue(stepExecution.getExitStatus().getExitDescription().contains("Non-skippable exception during read")); @@ -141,7 +141,7 @@ public class FaultTolerantStepFactoryBeanTests { Step step = (Step) factory.getObject(); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(1, reader.processed.size()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); assertTrue(stepExecution.getExitStatus().getExitDescription().contains("non-skippable exception")); @@ -335,7 +335,7 @@ public class FaultTolerantStepFactoryBeanTests { Step step = (Step) factory.getObject(); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(3, stepExecution.getSkipCount()); assertEquals(2, stepExecution.getReadSkipCount()); @@ -374,7 +374,7 @@ public class FaultTolerantStepFactoryBeanTests { Step step = (Step) factory.getObject(); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals("oops", stepExecution.getFailureExceptions().get(0).getCause().getMessage()); // listeners are called only once chunk is about to commit, so @@ -408,7 +408,7 @@ public class FaultTolerantStepFactoryBeanTests { Step step = (Step) factory.getObject(); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals("oops", stepExecution.getFailureExceptions().get(0).getCause().getMessage()); assertEquals(1, stepExecution.getSkipCount()); assertEquals(0, stepExecution.getReadSkipCount()); @@ -521,7 +521,7 @@ public class FaultTolerantStepFactoryBeanTests { Step step = (Step) factory.getObject(); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals("bad skip count", 3, stepExecution.getSkipCount()); assertEquals("bad read skip count", 2, stepExecution.getReadSkipCount()); assertEquals("bad write skip count", 1, stepExecution.getWriteSkipCount()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java index d48829df2..37f4922b3 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java @@ -159,7 +159,7 @@ public class SimpleStepFactoryBeanTests { job.execute(jobExecution); assertEquals("Error!", jobExecution.getAllFailureExceptions().get(0).getMessage()); - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); assertEquals(0, written.size()); // provider should be at second item assertEquals("bar", reader.read()); @@ -182,7 +182,7 @@ public class SimpleStepFactoryBeanTests { job.execute(jobExecution); assertEquals("Foo", jobExecution.getAllFailureExceptions().get(0).getMessage()); - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/TaskletStepExceptionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/TaskletStepExceptionTests.java index a9abeb9cf..ec545d345 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/TaskletStepExceptionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/TaskletStepExceptionTests.java @@ -7,8 +7,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.springframework.batch.core.BatchStatus.COMPLETED; +import static org.springframework.batch.core.BatchStatus.INCOMPLETE; import static org.springframework.batch.core.BatchStatus.FAILED; -import static org.springframework.batch.core.BatchStatus.STOPPED; import static org.springframework.batch.core.BatchStatus.UNKNOWN; import org.junit.Before; @@ -73,14 +73,14 @@ public class TaskletStepExceptionTests { public void testApplicationException() throws Exception { taskletStep.execute(stepExecution); - assertEquals(FAILED, stepExecution.getStatus()); + assertEquals(INCOMPLETE, stepExecution.getStatus()); } @Test public void testInterrupted() throws Exception { taskletStep.setStepExecutionListeners(new StepExecutionListener[] { new InterruptionListener() }); taskletStep.execute(stepExecution); - assertEquals(STOPPED, stepExecution.getStatus()); + assertEquals(FAILED, stepExecution.getStatus()); } @Test @@ -94,7 +94,7 @@ public class TaskletStepExceptionTests { } }); taskletStep.execute(stepExecution); - assertEquals(FAILED, stepExecution.getStatus()); + assertEquals(INCOMPLETE, stepExecution.getStatus()); assertTrue(stepExecution.getFailureExceptions().contains(exception)); assertEquals(2, jobRepository.getUpdateCount()); } @@ -110,7 +110,7 @@ public class TaskletStepExceptionTests { } } }); taskletStep.execute(stepExecution); - assertEquals(FAILED, stepExecution.getStatus()); + assertEquals(INCOMPLETE, stepExecution.getStatus()); assertTrue(stepExecution.getFailureExceptions().contains(exception)); assertEquals(2, jobRepository.getUpdateCount()); } @@ -152,7 +152,7 @@ public class TaskletStepExceptionTests { } } }); taskletStep.execute(stepExecution); - assertEquals(FAILED, stepExecution.getStatus()); + assertEquals(INCOMPLETE, stepExecution.getStatus()); assertTrue(stepExecution.getFailureExceptions().contains(taskletException)); assertFalse(stepExecution.getFailureExceptions().contains(exception)); assertEquals(2, jobRepository.getUpdateCount()); @@ -170,7 +170,7 @@ public class TaskletStepExceptionTests { } }); taskletStep.execute(stepExecution); - assertEquals(FAILED, stepExecution.getStatus()); + assertEquals(INCOMPLETE, stepExecution.getStatus()); assertTrue(stepExecution.getFailureExceptions().contains(taskletException)); assertTrue(stepExecution.getFailureExceptions().contains(exception)); assertEquals(2, jobRepository.getUpdateCount()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepExecutorInterruptionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepExecutorInterruptionTests.java index 7a8e0cd98..fbd60a0d8 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepExecutorInterruptionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepExecutorInterruptionTests.java @@ -114,7 +114,7 @@ public class StepExecutorInterruptionTests extends TestCase { assertTrue("Timed out waiting for step to be interrupted.", count < 1000); assertFalse(processingThread.isAlive()); - assertEquals(BatchStatus.STOPPED, stepExecution.getStatus()); + assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); } @@ -170,7 +170,7 @@ public class StepExecutorInterruptionTests extends TestCase { assertTrue("Timed out waiting for step to be interrupted.", count < 1000); assertFalse(processingThread.isAlive()); - assertEquals(BatchStatus.STOPPED, stepExecution.getStatus()); + assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); } @@ -201,7 +201,7 @@ public class StepExecutorInterruptionTests extends TestCase { step.execute(stepExecution); assertEquals("Planned!", stepExecution.getFailureExceptions().get(0).getMessage()); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); } /** diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/TaskletStepTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/TaskletStepTests.java index 145a3e7b5..c693800a7 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/TaskletStepTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/TaskletStepTests.java @@ -541,7 +541,7 @@ public class TaskletStepTests { stepExecution.setExecutionContext(foobarEc); step.execute(stepExecution); - assertEquals(BatchStatus.STOPPED, stepExecution.getStatus()); + assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); String msg = stepExecution.getExitStatus().getExitDescription(); assertTrue("Message does not contain 'JobInterruptedException': " + msg, contains(msg, "JobInterruptedException")); @@ -565,7 +565,7 @@ public class TaskletStepTests { // step.setLastExecution(stepExecution); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); // The original rollback was caused by this one: assertEquals("Foo", stepExecution.getFailureExceptions().get(0).getMessage()); } @@ -588,7 +588,7 @@ public class TaskletStepTests { // step.setLastExecution(stepExecution); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); // The original rollback was caused by this one: assertEquals("Foo", stepExecution.getFailureExceptions().get(0).getMessage()); } @@ -723,7 +723,7 @@ public class TaskletStepTests { StepExecution stepExecution = new StepExecution(step.getName(), new JobExecution(jobInstance)); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); Throwable expected = stepExecution.getFailureExceptions().get(0); assertEquals("CRASH!", expected.getMessage()); assertFalse(stepExecution.getExecutionContext().isEmpty()); diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests-context.xml index 6da34435b..321c927c0 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests-context.xml @@ -11,7 +11,10 @@ - + + + + diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests-context.xml index 69316beff..4172431d2 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests-context.xml @@ -17,7 +17,10 @@ - + + + + diff --git a/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkMessageChannelItemWriter.java b/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkMessageChannelItemWriter.java index fafdd6736..51589953d 100644 --- a/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkMessageChannelItemWriter.java +++ b/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkMessageChannelItemWriter.java @@ -99,11 +99,11 @@ public class ChunkMessageChannelItemWriter extends StepExecutionListenerSuppo } catch (RuntimeException e) { logger.debug("Detected failure waiting for results in step listener.", e); - stepExecution.setStatus(BatchStatus.FAILED); + stepExecution.setStatus(BatchStatus.INCOMPLETE); return ExitStatus.FAILED.addExitDescription(e.getClass().getName() + ": " + e.getMessage()); } if (timedOut) { - stepExecution.setStatus(BatchStatus.FAILED); + stepExecution.setStatus(BatchStatus.INCOMPLETE); throw new ItemStreamException("Timed out waiting for back log at end of step"); } return ExitStatus.COMPLETED.addExitDescription("Waited for " + expecting + " results."); diff --git a/spring-batch-integration/src/main/java/org/springframework/batch/integration/job/JobExecutionRequest.java b/spring-batch-integration/src/main/java/org/springframework/batch/integration/job/JobExecutionRequest.java index 3abfff533..b10aae252 100644 --- a/spring-batch-integration/src/main/java/org/springframework/batch/integration/job/JobExecutionRequest.java +++ b/spring-batch-integration/src/main/java/org/springframework/batch/integration/job/JobExecutionRequest.java @@ -27,8 +27,8 @@ import org.springframework.batch.core.JobExecution; * (generally a handler cannot determine if the whole job execution is complete, * so this is just information about the step).
* - * If the incoming status is {@link BatchStatus#FAILED}, - * {@link BatchStatus#STOPPED} or {@link BatchStatus#STOPPING} the request + * If the incoming status is {@link BatchStatus#INCOMPLETE}, + * {@link BatchStatus#FAILED} or {@link BatchStatus#STOPPING} the request * should be ignored by handlers (passed on without modification). * * @author Dave Syer diff --git a/spring-batch-integration/src/main/java/org/springframework/batch/integration/job/StepExecutionMessageHandler.java b/spring-batch-integration/src/main/java/org/springframework/batch/integration/job/StepExecutionMessageHandler.java index a199f5763..48e7508eb 100644 --- a/spring-batch-integration/src/main/java/org/springframework/batch/integration/job/StepExecutionMessageHandler.java +++ b/spring-batch-integration/src/main/java/org/springframework/batch/integration/job/StepExecutionMessageHandler.java @@ -136,7 +136,7 @@ public class StepExecutionMessageHandler { * @return */ private boolean isComplete(JobExecutionRequest request) { - return request.getStatus() == BatchStatus.FAILED || request.getStatus() == BatchStatus.STOPPED + return request.getStatus() == BatchStatus.INCOMPLETE || request.getStatus() == BatchStatus.FAILED || request.getStatus() == BatchStatus.STOPPING; } @@ -146,7 +146,7 @@ public class StepExecutionMessageHandler { */ private void handleFailure(JobExecutionRequest request, Throwable e) { request.registerThrowable(e); - request.setStatus(BatchStatus.FAILED); + request.setStatus(BatchStatus.INCOMPLETE); } /* diff --git a/spring-batch-integration/src/test/java/org/springframework/batch/integration/chunk/ChunkMessageItemWriterIntegrationTests.java b/spring-batch-integration/src/test/java/org/springframework/batch/integration/chunk/ChunkMessageItemWriterIntegrationTests.java index ed4080671..2cbcefdc3 100644 --- a/spring-batch-integration/src/test/java/org/springframework/batch/integration/chunk/ChunkMessageItemWriterIntegrationTests.java +++ b/spring-batch-integration/src/test/java/org/springframework/batch/integration/chunk/ChunkMessageItemWriterIntegrationTests.java @@ -170,7 +170,7 @@ public class ChunkMessageItemWriterIntegrationTests { // And make the back log real requests.send(getSimpleMessage("foo", 4321L)); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); String message = stepExecution.getExitStatus().getExitDescription(); assertTrue("Message does not contain 'wrong job': " + message, message.contains("wrong job")); @@ -207,7 +207,7 @@ public class ChunkMessageItemWriterIntegrationTests { StepExecution stepExecution = getStepExecution(step); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); String message = stepExecution.getExitStatus().getExitDescription(); assertTrue("Message does not contain 'bad': " + message, message.contains("bad")); @@ -219,7 +219,7 @@ public class ChunkMessageItemWriterIntegrationTests { assertTrue(1 <= TestItemWriter.count); assertTrue(6 >= TestItemWriter.count); // But it should fail the step in any case - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); } @@ -242,7 +242,7 @@ public class ChunkMessageItemWriterIntegrationTests { * loop would be bad, so the best we can do is fail as fast as possible. */ step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); String message = stepExecution.getExitStatus().getExitDescription(); assertTrue("Message did not contain 'timed out': " + message, message.toLowerCase().contains("timed out")); @@ -276,7 +276,7 @@ public class ChunkMessageItemWriterIntegrationTests { assertTrue(1 <= TestItemWriter.count); assertTrue(6 >= TestItemWriter.count); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); String exitDescription = stepExecution.getExitStatus().getExitDescription(); diff --git a/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/MessageOrientedStepTests.java b/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/MessageOrientedStepTests.java index 16940458b..8f811072d 100644 --- a/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/MessageOrientedStepTests.java +++ b/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/MessageOrientedStepTests.java @@ -105,7 +105,7 @@ public class MessageOrientedStepTests { step.setPollingInterval(100); StepExecution stepExecution = jobExecution.createStepExecution(step.getName()); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); String message = stepExecution.getExitStatus().getExitDescription(); assertTrue("Wrong message: " + message, message.contains("StepExecutionTimeoutException")); @@ -134,7 +134,7 @@ public class MessageOrientedStepTests { }); StepExecution stepExecution = jobExecution.createStepExecution(step.getName()); step.execute(stepExecution); - assertEquals(BatchStatus.FAILED, stepExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); String message = stepExecution.getExitStatus().getExitDescription(); assertTrue("Wrong message: " + message, message.contains("Planned failure")); diff --git a/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/StepExecutionMessageHandlerTests.java b/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/StepExecutionMessageHandlerTests.java index c097fd5b1..a77e97fc6 100644 --- a/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/StepExecutionMessageHandlerTests.java +++ b/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/StepExecutionMessageHandlerTests.java @@ -123,7 +123,7 @@ public class StepExecutionMessageHandlerTests { JobRepositorySupport jobRepository = new JobRepositorySupport(); StepExecutionMessageHandler handler = createHandler(jobRepository); JobExecution jobExecution = jobRepository.createJobExecution("job", new JobParameters()); - jobExecution.setStatus(BatchStatus.FAILED); + jobExecution.setStatus(BatchStatus.INCOMPLETE); JobExecutionRequest message = handler.handle(new JobExecutionRequest(jobExecution)); assertEquals(0, message.getJobExecution().getStepExecutions().size()); } @@ -134,7 +134,7 @@ public class StepExecutionMessageHandlerTests { @Override public StepExecution getLastStepExecution(JobInstance jobInstance, String stepName) { StepExecution stepExecution = new StepExecution(stepName, new JobExecution(jobInstance)); - stepExecution.setStatus(BatchStatus.FAILED); + stepExecution.setStatus(BatchStatus.INCOMPLETE); stepExecution.setExecutionContext(new ExecutionContext() { { put("foo", "bar"); @@ -205,7 +205,7 @@ public class StepExecutionMessageHandlerTests { assertNotNull(message); assertEquals(1, jobExecution.getStepExecutions().size()); JobExecutionRequest payload = message; - assertEquals(BatchStatus.FAILED, payload.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, payload.getStatus()); assertTrue(payload.hasErrors()); Throwable error = payload.getLastThrowable(); assertTrue(error instanceof StartLimitExceededException); diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/DatabaseShutdownFunctionalTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/DatabaseShutdownFunctionalTests.java index 0fd2e438c..7a4407102 100644 --- a/spring-batch-samples/src/test/java/org/springframework/batch/sample/DatabaseShutdownFunctionalTests.java +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/DatabaseShutdownFunctionalTests.java @@ -69,7 +69,7 @@ public class DatabaseShutdownFunctionalTests extends AbstractBatchLauncherTests } assertFalse("Timed out waiting for job to end.", jobExecution.isRunning()); - assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); } diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/GracefulShutdownFunctionalTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/GracefulShutdownFunctionalTests.java index cfcc32889..db4c60d55 100644 --- a/spring-batch-samples/src/test/java/org/springframework/batch/sample/GracefulShutdownFunctionalTests.java +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/GracefulShutdownFunctionalTests.java @@ -64,7 +64,7 @@ public class GracefulShutdownFunctionalTests extends AbstractBatchLauncherTests } assertFalse("Timed out waiting for job to end.", jobExecution.isRunning()); - assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); } diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/JobOperatorFunctionalTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/JobOperatorFunctionalTests.java index 414ac1068..a5d45f418 100644 --- a/spring-batch-samples/src/test/java/org/springframework/batch/sample/JobOperatorFunctionalTests.java +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/JobOperatorFunctionalTests.java @@ -4,7 +4,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.springframework.batch.core.BatchStatus.STARTED; -import static org.springframework.batch.core.BatchStatus.STOPPED; +import static org.springframework.batch.core.BatchStatus.FAILED; import java.util.List; import java.util.Map; @@ -91,12 +91,12 @@ public class JobOperatorFunctionalTests { } assertFalse(tested.getRunningExecutions(job.getName()).contains(executionId)); - assertTrue(tested.getSummary(executionId).contains(STOPPED.toString())); + assertTrue(tested.getSummary(executionId).contains(FAILED.toString())); // there is just a single step in the test job Map summaries = tested.getStepExecutionSummaries(executionId); assertEquals(1, summaries.size()); - assertTrue(summaries.values().toString().contains(STOPPED.toString())); + assertTrue(summaries.values().toString().contains(FAILED.toString())); } @Test diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/RestartFunctionalTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/RestartFunctionalTests.java index faa228716..08bf242fc 100644 --- a/spring-batch-samples/src/test/java/org/springframework/batch/sample/RestartFunctionalTests.java +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/RestartFunctionalTests.java @@ -70,7 +70,7 @@ public class RestartFunctionalTests extends AbstractBatchLauncherTests { int before = simpleJdbcTemplate.queryForInt("SELECT COUNT(*) FROM TRADE"); JobExecution jobExecution = runJobForRestartTest(); - assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); + assertEquals(BatchStatus.INCOMPLETE, jobExecution.getStatus()); Throwable expected = jobExecution.getAllFailureExceptions().get(0); assertTrue("Not planned exception: " + expected.getMessage(), expected.getMessage().toLowerCase().indexOf( diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/support/JdbcJobRepositoryTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/support/JdbcJobRepositoryTests.java index 38b6913ce..49d7ca5d3 100644 --- a/spring-batch-samples/src/test/java/org/springframework/batch/sample/support/JdbcJobRepositoryTests.java +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/support/JdbcJobRepositoryTests.java @@ -166,7 +166,7 @@ public class JdbcJobRepositoryTests { cacheJobIds(execution); execution.setEndTime(new Timestamp(System.currentTimeMillis())); repository.update(execution); - execution.setStatus(BatchStatus.FAILED); + execution.setStatus(BatchStatus.INCOMPLETE); int before = simpleJdbcTemplate.queryForInt("SELECT COUNT(*) FROM BATCH_JOB_INSTANCE"); assertEquals(1, before);