From 97a80463edfc97ca05539425e02a2ef2e3f178f7 Mon Sep 17 00:00:00 2001 From: robokaso Date: Mon, 6 Oct 2008 08:50:43 +0000 Subject: [PATCH] RESOLVED - BATCH-832: DefaultTransactionAttribute is inappropriate for TaskletStep overriden rollbackOn(..) to return true for the default configuration --- .../batch/core/step/item/SimpleStepFactoryBean.java | 9 ++++++++- .../batch/core/step/tasklet/TaskletStep.java | 9 ++++++++- .../item/SkipLimitStepFactoryBeanNonBufferingTests.java | 9 +++++---- .../core/step/item/SkipLimitStepFactoryBeanTests.java | 7 +++---- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java index b07fde5b7..9e20b8fbf 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java @@ -253,7 +253,14 @@ public class SimpleStepFactoryBean implements FactoryBean, BeanNameAware { * @return the transactionAttribute */ protected TransactionAttribute getTransactionAttribute() { - return transactionAttribute!=null?transactionAttribute:new DefaultTransactionAttribute(); + return transactionAttribute!=null?transactionAttribute:new DefaultTransactionAttribute(){ + + @Override + public boolean rollbackOn(Throwable ex) { + return true; + } + + }; } /** 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 40919c23a..09a505a49 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 @@ -78,7 +78,14 @@ public class TaskletStep extends AbstractStep { private PlatformTransactionManager transactionManager; - private TransactionAttribute transactionAttribute = new DefaultTransactionAttribute(); + private TransactionAttribute transactionAttribute = new DefaultTransactionAttribute(){ + + @Override + public boolean rollbackOn(Throwable ex) { + return true; + } + + }; private Tasklet tasklet; diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanNonBufferingTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanNonBufferingTests.java index 8bb7bf7e6..6916ec913 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanNonBufferingTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanNonBufferingTests.java @@ -28,6 +28,7 @@ import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.batch.support.transaction.TransactionAwareProxyFactory; +import org.springframework.transaction.interceptor.DefaultTransactionAttribute; import org.springframework.util.StringUtils; public class SkipLimitStepFactoryBeanNonBufferingTests { @@ -209,12 +210,13 @@ public class SkipLimitStepFactoryBeanNonBufferingTests { */ @Test public void testProcessorRollback() throws Exception { + + factory.setTransactionAttribute(new DefaultTransactionAttribute()); SkipProcessorStub processor = new SkipProcessorStub(Arrays.asList(StringUtils .commaDelimitedListToStringArray("1,3"))); factory.setItemProcessor(processor); - @SuppressWarnings("unchecked") - final Collection NO_FAILURES = Collections.EMPTY_LIST; + final Collection NO_FAILURES = Collections.emptyList(); factory.setItemWriter(new SkipWriterStub(NO_FAILURES)); Step step = (Step) factory.getObject(); @@ -236,8 +238,7 @@ public class SkipLimitStepFactoryBeanNonBufferingTests { .commaDelimitedListToStringArray("1,3"))); factory.setItemProcessor(processor); - @SuppressWarnings("unchecked") - final Collection NO_FAILURES = Collections.EMPTY_LIST; + final Collection NO_FAILURES = Collections.emptyList(); factory.setItemWriter(new SkipWriterStub(NO_FAILURES)); Step step = (Step) factory.getObject(); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanTests.java index 8f0dca7b0..d202821b2 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanTests.java @@ -457,12 +457,12 @@ public class SkipLimitStepFactoryBeanTests { */ @Test public void testProcessorRollback() throws Exception { + factory.setTransactionAttribute(new DefaultTransactionAttribute()); SkipProcessorStub processor = new SkipProcessorStub(Arrays.asList(StringUtils .commaDelimitedListToStringArray("1,3"))); factory.setItemProcessor(processor); - @SuppressWarnings("unchecked") - final Collection NO_FAILURES = Collections.EMPTY_LIST; + final Collection NO_FAILURES = Collections.emptyList(); factory.setItemReader(new SkipReaderStub(new String[] { "1", "2", "3", "4" }, NO_FAILURES)); factory.setItemWriter(new SkipWriterStub(NO_FAILURES)); @@ -485,8 +485,7 @@ public class SkipLimitStepFactoryBeanTests { .commaDelimitedListToStringArray("1,3"))); factory.setItemProcessor(processor); - @SuppressWarnings("unchecked") - final Collection NO_FAILURES = Collections.EMPTY_LIST; + final Collection NO_FAILURES = Collections.emptyList(); factory.setItemReader(new SkipReaderStub(new String[] { "1", "2", "3", "4" }, NO_FAILURES)); factory.setItemWriter(new SkipWriterStub(NO_FAILURES));