From 70571b1ec31efcbed9a7ef3610eddad6288e28d2 Mon Sep 17 00:00:00 2001 From: dsyer Date: Tue, 20 Nov 2007 19:24:45 +0000 Subject: [PATCH] RESOLVED - issue BATCH-201: Move responsibility for deciding if an exception terminates a batch to ExceptionHandler http://opensource.atlassian.com/projects/spring/browse/BATCH-201 Change RepeatInterceptor as well to use ExitStatus instead of Object --- .../springframework/batch/repeat/RepeatInterceptor.java | 6 ++---- .../ApplicationEventPublisherRepeatInterceptor.java | 3 ++- .../repeat/interceptor/RepeatInterceptorAdapter.java | 3 ++- .../batch/repeat/support/RepeatTemplate.java | 2 +- .../ApplicationEventPublisherRepeatInterceptorTests.java | 5 +++-- .../batch/repeat/interceptor/RepeatInterceptorTests.java | 8 ++++---- .../batch/sample/dao/HibernateCreditWriter.java | 3 ++- 7 files changed, 16 insertions(+), 14 deletions(-) diff --git a/infrastructure/src/main/java/org/springframework/batch/repeat/RepeatInterceptor.java b/infrastructure/src/main/java/org/springframework/batch/repeat/RepeatInterceptor.java index 97f5ec4ca..a2643ae1b 100644 --- a/infrastructure/src/main/java/org/springframework/batch/repeat/RepeatInterceptor.java +++ b/infrastructure/src/main/java/org/springframework/batch/repeat/RepeatInterceptor.java @@ -42,11 +42,9 @@ public interface RepeatInterceptor { * @param context * the current batch context * @param result - * the result of the callback item - ExitStatus in normal - * circumstances, but might be null or an Exception in abnormal - * cases. + * the result of the callback */ - void after(RepeatContext context, Object result); + void after(RepeatContext context, ExitStatus result); /** * Called once at the start of a complete batch, before any items are diff --git a/infrastructure/src/main/java/org/springframework/batch/repeat/interceptor/ApplicationEventPublisherRepeatInterceptor.java b/infrastructure/src/main/java/org/springframework/batch/repeat/interceptor/ApplicationEventPublisherRepeatInterceptor.java index 554241735..cf9b40a81 100644 --- a/infrastructure/src/main/java/org/springframework/batch/repeat/interceptor/ApplicationEventPublisherRepeatInterceptor.java +++ b/infrastructure/src/main/java/org/springframework/batch/repeat/interceptor/ApplicationEventPublisherRepeatInterceptor.java @@ -15,6 +15,7 @@ */ package org.springframework.batch.repeat.interceptor; +import org.springframework.batch.repeat.ExitStatus; import org.springframework.batch.repeat.RepeatContext; import org.springframework.batch.repeat.RepeatInterceptor; import org.springframework.context.ApplicationEventPublisher; @@ -41,7 +42,7 @@ public class ApplicationEventPublisherRepeatInterceptor implements ApplicationEv * @see org.springframework.batch.repeat.RepeatInterceptor#after(org.springframework.batch.repeat.RepeatContext, * java.lang.Object) */ - public void after(RepeatContext context, Object result) { + public void after(RepeatContext context, ExitStatus result) { publish(context, "After repeat callback with result=[" + result + "]", RepeatOperationsApplicationEvent.AFTER); } diff --git a/infrastructure/src/main/java/org/springframework/batch/repeat/interceptor/RepeatInterceptorAdapter.java b/infrastructure/src/main/java/org/springframework/batch/repeat/interceptor/RepeatInterceptorAdapter.java index f33d96d55..3c8e4a91f 100644 --- a/infrastructure/src/main/java/org/springframework/batch/repeat/interceptor/RepeatInterceptorAdapter.java +++ b/infrastructure/src/main/java/org/springframework/batch/repeat/interceptor/RepeatInterceptorAdapter.java @@ -16,6 +16,7 @@ package org.springframework.batch.repeat.interceptor; +import org.springframework.batch.repeat.ExitStatus; import org.springframework.batch.repeat.RepeatContext; import org.springframework.batch.repeat.RepeatInterceptor; @@ -24,7 +25,7 @@ public class RepeatInterceptorAdapter implements RepeatInterceptor { public void before(RepeatContext context) { } - public void after(RepeatContext context, Object result) { + public void after(RepeatContext context, ExitStatus result) { } public void close(RepeatContext context) { diff --git a/infrastructure/src/main/java/org/springframework/batch/repeat/support/RepeatTemplate.java b/infrastructure/src/main/java/org/springframework/batch/repeat/support/RepeatTemplate.java index d51618f16..e44a1a522 100644 --- a/infrastructure/src/main/java/org/springframework/batch/repeat/support/RepeatTemplate.java +++ b/infrastructure/src/main/java/org/springframework/batch/repeat/support/RepeatTemplate.java @@ -50,7 +50,7 @@ import org.springframework.util.Assert; * the {@link RepeatCallback} can consider using a custom * {@link RepeatInterceptor} instead of trying to customise the * {@link CompletionPolicy}. This is generally a friendlier interface to - * implement, and the {@link RepeatInterceptor#after(RepeatContext, Object)} + * implement, and the {@link RepeatInterceptor#after(RepeatContext, ExitStatus)} * method is passed in the result of the callback, which would be an instance of * {@link Throwable} if the business processing had thrown an exception. If the * exception is not to be propagated to the caller, then a non-default diff --git a/infrastructure/src/test/java/org/springframework/batch/repeat/interceptor/ApplicationEventPublisherRepeatInterceptorTests.java b/infrastructure/src/test/java/org/springframework/batch/repeat/interceptor/ApplicationEventPublisherRepeatInterceptorTests.java index ba45f7bb6..a0d7fb6ad 100644 --- a/infrastructure/src/test/java/org/springframework/batch/repeat/interceptor/ApplicationEventPublisherRepeatInterceptorTests.java +++ b/infrastructure/src/test/java/org/springframework/batch/repeat/interceptor/ApplicationEventPublisherRepeatInterceptorTests.java @@ -18,6 +18,7 @@ package org.springframework.batch.repeat.interceptor; import java.util.ArrayList; import java.util.List; +import org.springframework.batch.repeat.ExitStatus; import org.springframework.batch.repeat.RepeatContext; import org.springframework.batch.repeat.context.RepeatContextSupport; import org.springframework.context.ApplicationEvent; @@ -50,10 +51,10 @@ public class ApplicationEventPublisherRepeatInterceptorTests extends TestCase { } /** - * Test method for {@link org.springframework.batch.repeat.interceptor.ApplicationEventPublisherRepeatInterceptor#after(org.springframework.batch.repeat.RepeatContext, java.lang.Object)}. + * Test method for {@link org.springframework.batch.repeat.interceptor.ApplicationEventPublisherRepeatInterceptor#after(org.springframework.batch.repeat.RepeatContext, ExitStatus)}. */ public void testAfter() { - interceptor.after(context, Boolean.TRUE); + interceptor.after(context, ExitStatus.CONTINUABLE); assertEquals(1, list.size()); RepeatOperationsApplicationEvent event = (RepeatOperationsApplicationEvent) list.get(0); assertEquals(RepeatOperationsApplicationEvent.AFTER, event.getType()); diff --git a/infrastructure/src/test/java/org/springframework/batch/repeat/interceptor/RepeatInterceptorTests.java b/infrastructure/src/test/java/org/springframework/batch/repeat/interceptor/RepeatInterceptorTests.java index 86b1eeea6..ba5a94c71 100644 --- a/infrastructure/src/test/java/org/springframework/batch/repeat/interceptor/RepeatInterceptorTests.java +++ b/infrastructure/src/test/java/org/springframework/batch/repeat/interceptor/RepeatInterceptorTests.java @@ -83,11 +83,11 @@ public class RepeatInterceptorTests extends TestCase { RepeatTemplate template = new RepeatTemplate(); final List calls = new ArrayList(); template.setInterceptors(new RepeatInterceptor[] { new RepeatInterceptorAdapter() { - public void after(RepeatContext context, Object result) { + public void after(RepeatContext context, ExitStatus result) { calls.add("1"); } }, new RepeatInterceptorAdapter() { - public void after(RepeatContext context, Object result) { + public void after(RepeatContext context, ExitStatus result) { calls.add("2"); } } }); @@ -201,7 +201,7 @@ public class RepeatInterceptorTests extends TestCase { RepeatTemplate template = new RepeatTemplate(); final List calls = new ArrayList(); template.setInterceptors(new RepeatInterceptor[] { new RepeatInterceptorAdapter() { - public void after(RepeatContext context, Object result) { + public void after(RepeatContext context, ExitStatus result) { calls.add("1"); } }, new RepeatInterceptorAdapter() { @@ -231,7 +231,7 @@ public class RepeatInterceptorTests extends TestCase { final List calls = new ArrayList(); final List fails = new ArrayList(); template.setInterceptors(new RepeatInterceptor[] { new RepeatInterceptorAdapter() { - public void after(RepeatContext context, Object result) { + public void after(RepeatContext context, ExitStatus result) { calls.add("1"); } }, new RepeatInterceptorAdapter() { diff --git a/samples/src/main/java/org/springframework/batch/sample/dao/HibernateCreditWriter.java b/samples/src/main/java/org/springframework/batch/sample/dao/HibernateCreditWriter.java index 066978d6a..9a16fd5b5 100644 --- a/samples/src/main/java/org/springframework/batch/sample/dao/HibernateCreditWriter.java +++ b/samples/src/main/java/org/springframework/batch/sample/dao/HibernateCreditWriter.java @@ -18,6 +18,7 @@ package org.springframework.batch.sample.dao; import java.util.ArrayList; import java.util.List; +import org.springframework.batch.repeat.ExitStatus; import org.springframework.batch.repeat.RepeatContext; import org.springframework.batch.repeat.RepeatInterceptor; import org.springframework.batch.sample.domain.CustomerCredit; @@ -80,7 +81,7 @@ public class HibernateCreditWriter extends HibernateDaoSupport implements this.failOnFlush = failOnFlush; } - public void after(RepeatContext context, Object result) { + public void after(RepeatContext context, ExitStatus result) { } public void before(RepeatContext context) {