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 aa8d57172..063eb7223 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 @@ -155,6 +155,8 @@ public abstract class AbstractStep implements Step, InitializingBean, BeanNameAw UnexpectedJobExecutionException { stepExecution.setStartTime(new Date()); stepExecution.setStatus(BatchStatus.STARTED); + + getJobRepository().saveOrUpdate(stepExecution); ExitStatus exitStatus = ExitStatus.FAILED; Exception commitException = null; diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStep.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStep.java index 0debc2054..fa1f81d44 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStep.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStep.java @@ -222,7 +222,6 @@ public class ItemOrientedStep extends AbstractStep { */ protected ExitStatus doExecute(final StepExecution stepExecution) throws Exception { stream.update(stepExecution.getExecutionContext()); - getJobRepository().saveOrUpdate(stepExecution); getJobRepository().saveOrUpdateExecutionContext(stepExecution); itemHandler.mark(); 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 a001db51b..92fdb8e94 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 @@ -13,6 +13,7 @@ import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.StepExecutionListener; import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.repeat.ExitStatus; +import org.springframework.util.Assert; /** * Tests for {@link AbstractStep}. @@ -101,13 +102,25 @@ public class AbstractStepTests extends TestCase { * Remembers the last saved values of execution context. */ private static class JobRepositoryStub extends JobRepositorySupport { + + static long counter = 0; ExecutionContext saved = new ExecutionContext(); public void saveOrUpdateExecutionContext(StepExecution stepExecution) { + Assert.state(stepExecution.getId() != null, "StepExecution must be already saved"); saved = stepExecution.getExecutionContext(); } + public void saveOrUpdate(StepExecution stepExecution) { + if (stepExecution.getId() == null) { + stepExecution.setId(new Long(counter)); + counter++; + } + } + + + } protected void setUp() throws Exception {