diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/jsr/configuration/xml/ChunkParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/jsr/configuration/xml/ChunkParser.java index 8abe600d4..4a4989ae2 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/jsr/configuration/xml/ChunkParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/jsr/configuration/xml/ChunkParser.java @@ -74,13 +74,25 @@ public class ChunkParser { String checkpointPolicy = element.getAttribute(CHECKPOINT_POLICY_ATTRIBUTE); if(StringUtils.hasText(checkpointPolicy)) { if(checkpointPolicy.equals(ITEM_CHECKPOINT_POLICY)) { - parseSimpleAttribute(element, propertyValues, ITEM_COUNT_ATTRIBUTE, "commitInterval"); + String itemCount = element.getAttribute(ITEM_COUNT_ATTRIBUTE); + if (StringUtils.hasText(itemCount)) { + propertyValues.addPropertyValue("commitInterval", itemCount); + } else { + propertyValues.addPropertyValue("commitInterval", "10"); + } + parseSimpleAttribute(element, propertyValues, TIME_LIMIT_ATTRIBUTE, "timeout"); } else if(checkpointPolicy.equals(CUSTOM_CHECKPOINT_POLICY)) { parseCustomCheckpointAlgorithm(element, parserContext, propertyValues); } } else { - parseSimpleAttribute(element, propertyValues, ITEM_COUNT_ATTRIBUTE, "commitInterval"); + String itemCount = element.getAttribute(ITEM_COUNT_ATTRIBUTE); + if (StringUtils.hasText(itemCount)) { + propertyValues.addPropertyValue("commitInterval", itemCount); + } else { + propertyValues.addPropertyValue("commitInterval", "10"); + } + parseSimpleAttribute(element, propertyValues, TIME_LIMIT_ATTRIBUTE, "timeout"); } @@ -97,9 +109,9 @@ public class ChunkParser { private void parseSimpleAttribute(Element element, MutablePropertyValues propertyValues, String attributeName, String propertyName) { - String skipLimit = element.getAttribute(attributeName); - if (StringUtils.hasText(skipLimit)) { - propertyValues.addPropertyValue(propertyName, skipLimit); + String propertyValue = element.getAttribute(attributeName); + if (StringUtils.hasText(propertyValue)) { + propertyValues.addPropertyValue(propertyName, propertyValue); } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/jsr/configuration/xml/SimpleItemBasedJobParsingTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/jsr/configuration/xml/SimpleItemBasedJobParsingTests.java index 79a2b46bf..5dc5a1239 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/jsr/configuration/xml/SimpleItemBasedJobParsingTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/jsr/configuration/xml/SimpleItemBasedJobParsingTests.java @@ -16,7 +16,12 @@ package org.springframework.batch.core.jsr.configuration.xml; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; + +import java.io.Serializable; +import java.util.List; + +import javax.batch.api.chunk.CheckpointAlgorithm; +import javax.batch.api.chunk.ItemWriter; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,9 +31,6 @@ import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.Step; import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.repeat.CompletionPolicy; -import org.springframework.batch.repeat.RepeatContext; -import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -49,46 +51,72 @@ public class SimpleItemBasedJobParsingTests { @Autowired public CountingCompletionPolicy policy; + @Autowired + public CountingItemWriter writer; + @Autowired public JobLauncher jobLauncher; @Test public void test() throws Exception { - assertNotNull(job); - assertEquals("job1", job.getName()); - assertNotNull(step1); - assertEquals("step1", step1.getName()); - JobExecution execution = jobLauncher.run(job, new JobParameters()); assertEquals(BatchStatus.COMPLETED, execution.getStatus()); - assertEquals(3, execution.getStepExecutions().size()); - assertEquals(2, processor.count); - assertEquals(3, policy.counter); + assertEquals(4, execution.getStepExecutions().size()); + assertEquals(27, processor.count); + assertEquals(2, policy.checkpointCount); + assertEquals(8, writer.writeCount); + assertEquals(27, writer.itemCount); } - public static class CountingCompletionPolicy implements CompletionPolicy { + public static class CountingItemWriter implements ItemWriter { - protected int counter; + protected int writeCount = 0; + protected int itemCount = 0; @Override - public boolean isComplete(RepeatContext context, RepeatStatus result) { - return counter == 3; + public void open(Serializable checkpoint) throws Exception { } @Override - public boolean isComplete(RepeatContext context) { - return counter == 3; + public void close() throws Exception { } @Override - public RepeatContext start(RepeatContext parent) { - counter = 0; - return parent; + public void writeItems(List items) throws Exception { + System.err.println("Items to be written: " + items); + writeCount++; + itemCount += items.size(); } @Override - public void update(RepeatContext context) { - counter++; + public Serializable checkpointInfo() throws Exception { + return null; + } + } + + public static class CountingCompletionPolicy implements CheckpointAlgorithm { + + protected int itemCount = 0; + protected int checkpointCount = 0; + + @Override + public int checkpointTimeout() throws Exception { + return 0; + } + + @Override + public void beginCheckpoint() throws Exception { + } + + @Override + public boolean isReadyToCheckpoint() throws Exception { + itemCount++; + return itemCount % 3 == 0; + } + + @Override + public void endCheckpoint() throws Exception { + checkpointCount++; } } } diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/jsr/configuration/xml/SimpleItemBasedJobParsingTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/jsr/configuration/xml/SimpleItemBasedJobParsingTests-context.xml index 61b223031..376a06cf9 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/jsr/configuration/xml/SimpleItemBasedJobParsingTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/jsr/configuration/xml/SimpleItemBasedJobParsingTests-context.xml @@ -9,23 +9,29 @@ - + - + - + - + - + - + - - + + + + + + + + @@ -43,6 +49,9 @@ One Two + Three + Four + Five @@ -50,8 +59,11 @@ + One + Two Three Four + Five @@ -59,20 +71,37 @@ + One + Two + + + + + + + + One + Two + Three + Four Five Six + Seven + Eight + Nine + Ten + Eleven + Twelve + Thirteen + Fourteen + Fifteen - - - - - - + - +