diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/CompletionPolicySupport.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/CompletionPolicySupport.java index 600796db1..0d508b82d 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/CompletionPolicySupport.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/CompletionPolicySupport.java @@ -30,13 +30,19 @@ import org.springframework.batch.repeat.context.RepeatContextSupport; public class CompletionPolicySupport implements CompletionPolicy { /** - * Delegate to {@link #isComplete(RepeatContext)}. + * If exit status is not continuable return true, otherwise + * delegate to {@link #isComplete(RepeatContext)}. * * @see org.springframework.batch.repeat.CompletionPolicy#isComplete(org.springframework.batch.repeat.RepeatContext, * ExitStatus) */ public boolean isComplete(RepeatContext context, ExitStatus result) { - return isComplete(context); + if (result != null && !result.isContinuable()) { + return true; + } + else { + return isComplete(context); + } } /** diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/TimeoutTerminationPolicy.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/TimeoutTerminationPolicy.java index 3a024f7fa..830c8a973 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/TimeoutTerminationPolicy.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/TimeoutTerminationPolicy.java @@ -64,6 +64,7 @@ public class TimeoutTerminationPolicy extends CompletionPolicySupport { * * @see org.springframework.batch.repeat.CompletionPolicy#isComplete(org.springframework.batch.repeat.RepeatContext) */ + @Override public boolean isComplete(RepeatContext context) { return ((TimeoutBatchContext) context).isComplete(); } @@ -73,6 +74,7 @@ public class TimeoutTerminationPolicy extends CompletionPolicySupport { * * @see org.springframework.batch.repeat.CompletionPolicy#start(RepeatContext) */ + @Override public RepeatContext start(RepeatContext context) { return new TimeoutBatchContext(context); } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/policy/TimeoutCompletionPolicyTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/policy/TimeoutCompletionPolicyTests.java index 453246142..fcd4f7184 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/policy/TimeoutCompletionPolicyTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/policy/TimeoutCompletionPolicyTests.java @@ -16,12 +16,15 @@ package org.springframework.batch.repeat.policy; -import junit.framework.TestCase; +import static org.junit.Assert.*; +import org.junit.Test; +import org.springframework.batch.repeat.ExitStatus; import org.springframework.batch.repeat.RepeatContext; -public class TimeoutCompletionPolicyTests extends TestCase { +public class TimeoutCompletionPolicyTests { + @Test public void testSimpleTimeout() throws Exception { TimeoutTerminationPolicy policy = new TimeoutTerminationPolicy(20L); RepeatContext context = policy.start(null); @@ -30,12 +33,21 @@ public class TimeoutCompletionPolicyTests extends TestCase { assertTrue(policy.isComplete(context)); } + @Test public void testSuccessfulResult() throws Exception { TimeoutTerminationPolicy policy = new TimeoutTerminationPolicy(); RepeatContext context = policy.start(null); assertFalse(policy.isComplete(context, null)); } + + @Test + public void testNonContinuableResult() throws Exception { + TimeoutTerminationPolicy policy = new TimeoutTerminationPolicy(); + ExitStatus result = new ExitStatus(false, "non-continuable exit status"); + assertTrue(policy.isComplete(policy.start(null), result)); + } + @Test public void testUpdate() throws Exception { TimeoutTerminationPolicy policy = new TimeoutTerminationPolicy(20L); RepeatContext context = policy.start(null);