From cfca1a9296ac9094c80aeacb2afaf146cb344dee Mon Sep 17 00:00:00 2001 From: dsyer Date: Wed, 3 Mar 2010 13:17:02 +0000 Subject: [PATCH] RESOLVED - issue BATCH-1522: Intermittent failure of FaultTolerantStepFactoryBean in multi-threaded test --- .../batch/core/step/tasklet/TaskletStep.java | 1 - .../StepExecutorInterruptionTests.java | 27 ++++++++----------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java index 54ab7102d..ec981c68d 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java @@ -377,7 +377,6 @@ public class TaskletStep extends AbstractStep { stepExecution.setStatus(BatchStatus.STOPPED); stepExecution.setTerminateOnly(); Thread.currentThread().interrupt(); - throw e; } // In case we need to push it back to its old value diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepExecutorInterruptionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepExecutorInterruptionTests.java index f3631ecdc..08686c53b 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepExecutorInterruptionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepExecutorInterruptionTests.java @@ -16,12 +16,16 @@ package org.springframework.batch.core.step.tasklet; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import java.lang.reflect.Field; import java.util.List; import java.util.concurrent.Semaphore; -import junit.framework.TestCase; - +import org.junit.Before; +import org.junit.Test; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInterruptedException; @@ -41,7 +45,7 @@ import org.springframework.batch.repeat.support.RepeatTemplate; import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.util.ReflectionUtils; -public class StepExecutorInterruptionTests extends TestCase { +public class StepExecutorInterruptionTests { private TaskletStep step; @@ -55,6 +59,7 @@ public class StepExecutorInterruptionTests extends TestCase { private Field semaphore; + @Before public void setUp() throws Exception { jobRepository = new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(), @@ -75,6 +80,7 @@ public class StepExecutorInterruptionTests extends TestCase { semaphore = ReflectionUtils.findField(step.getClass(), "semaphore"); } + @Test public void testInterruptStep() throws Exception { Thread processingThread = createThread(stepExecution); @@ -115,6 +121,7 @@ public class StepExecutorInterruptionTests extends TestCase { } + @Test public void testInterruptOnInterruptedException() throws Exception { Thread processingThread = createThread(stepExecution); @@ -143,19 +150,6 @@ public class StepExecutorInterruptionTests extends TestCase { } }); - // step.synchronizer = new Semaphore(1) { - // - // @Override - // public void acquire() throws InterruptedException { - // Thread.currentThread().interrupt(); - // throw new InterruptedException(); - // } - // - // @Override - // public void release() { - // } - // }; - processingThread.start(); Thread.sleep(100); @@ -171,6 +165,7 @@ public class StepExecutorInterruptionTests extends TestCase { } + @Test public void testLockNotReleasedIfChunkFails() throws Exception { step.setTasklet(new TestingChunkOrientedTasklet(new ItemReader() {