From ff85f455defc160712b5de5b0f5578df3573bed3 Mon Sep 17 00:00:00 2001 From: dsyer Date: Fri, 14 Mar 2008 17:43:41 +0000 Subject: [PATCH] RESOLVED - issue BATCH-456: JobListener.afterJob() should be called regardless of success or failure Added onInterrupt callback. --- .../org/springframework/batch/core/JobListener.java | 13 +++++++++++-- .../batch/core/listener/CompositeJobListener.java | 7 +++++++ .../batch/core/listener/JobListenerSupport.java | 11 +++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/JobListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/JobListener.java index a3bf00673..26fa87cb1 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/JobListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/JobListener.java @@ -29,17 +29,26 @@ public interface JobListener { /** * Initialise the state of the listener with the {@link JobExecution} from * the current scope. - * @param jobExecution + * @param jobExecution the current {@link JobExecution} */ void beforeJob(JobExecution jobExecution); /** * Callback after successful completion of a job. + * @param jobExecution the current {@link JobExecution} */ void afterJob(JobExecution jobExecution); /** - * Callback on job failure. + * Callback on job failure owing to the throwable provided. + * @param jobExecution the current {@link JobExecution} + * @param e the exception that caused the job to terminate */ void onError(JobExecution jobExecution, Throwable e); + + /** + * Callback when a job is interrupted or stopped manually. + * @param jobExecution the current {@link JobExecution} + */ + void onInterrupt(JobExecution jobExecution); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeJobListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeJobListener.java index a743a71fc..c537ab24c 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeJobListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeJobListener.java @@ -73,4 +73,11 @@ public class CompositeJobListener implements JobListener { } + public void onInterrupt(JobExecution jobExecution) { + for (Iterator iterator = listeners.listIterator(); iterator.hasNext();) { + JobListener listener = (JobListener) iterator.next(); + listener.onInterrupt(jobExecution); + } + + } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/JobListenerSupport.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/JobListenerSupport.java index 7a621bbd2..f6b1fa241 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/JobListenerSupport.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/JobListenerSupport.java @@ -36,9 +36,16 @@ public class JobListenerSupport implements JobListener { public void beforeJob(JobExecution jobExecution) { } + /* (non-Javadoc) + * @see org.springframework.batch.core.JobListener#onError(org.springframework.batch.core.JobExecution, java.lang.Throwable) + */ public void onError(JobExecution jobExecution, Throwable e) { - // TODO Auto-generated method stub - + } + + /* (non-Javadoc) + * @see org.springframework.batch.core.JobListener#onInterrupt(org.springframework.batch.core.JobExecution) + */ + public void onInterrupt(JobExecution jobExecution) { } }