diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/SimpleJob.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/SimpleJob.java index 6c1630feb..a525b2475 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/SimpleJob.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/SimpleJob.java @@ -134,6 +134,7 @@ public class SimpleJob extends AbstractJob { } catch (JobInterruptedException e) { execution.setStatus(BatchStatus.STOPPED); + listener.onInterrupt(execution); rethrow(e); } catch (Throwable t) { 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 a781444aa..ad93e988b 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 @@ -22,9 +22,11 @@ import java.util.Properties; import junit.framework.TestCase; +import org.easymock.MockControl; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobExecutionException; +import org.springframework.batch.core.JobExecutionListener; import org.springframework.batch.core.JobInstance; import org.springframework.batch.core.JobInterruptedException; import org.springframework.batch.core.JobParameters; @@ -345,6 +347,30 @@ public class SimpleJobTests extends TestCase { } + public void testInterruptWithListener() throws Exception { + step1.setProcessException(new JobInterruptedException("job interrupted!")); + + MockControl control = MockControl.createStrictControl(JobExecutionListener.class); + JobExecutionListener listener = (JobExecutionListener) control.getMock(); + listener.beforeJob(jobExecution); + control.setVoidCallable(); + listener.onInterrupt(jobExecution); + control.setVoidCallable(); + control.replay(); + + job.setJobExecutionListeners(new JobExecutionListener[] { listener }); + + try { + job.execute(jobExecution); + fail(); + } + catch (UnexpectedJobExecutionException e){ + // expected + } + + control.verify(); + } + /* * Check JobRepository to ensure status is being saved. */