IN PROGRESS - issue BATCH-7: Remove transaction synchronization and state management from input/output sources (formerly buffering)

http://jira.springframework.org/browse/BATCH-7

Added ItemStream as base interface for ItemReader/Writer.
This commit is contained in:
dsyer
2008-01-30 18:42:48 +00:00
parent 11708012b5
commit bebab9c8d2
42 changed files with 340 additions and 235 deletions

View File

@@ -47,15 +47,15 @@ public class RestartableItemOrientedTasklet extends ItemOrientedTasklet implemen
StreamContext itemProviderRestartData = null;
StreamContext itemProcessorRestartData = null;
if (itemProvider instanceof ItemStream) {
itemProviderRestartData = ((ItemStream) itemProvider).getRestartData();
if (itemProvider != null) {
itemProviderRestartData = itemProvider.getRestartData();
}
if (itemWriter != null) {
itemProcessorRestartData = itemWriter.getRestartData();
}
if (itemWriter instanceof ItemStream) {
itemProcessorRestartData = ((ItemStream) itemWriter).getRestartData();
}
RestartableItemOrientedTaskletRestartData restartData = new RestartableItemOrientedTaskletRestartData(itemProviderRestartData, itemProcessorRestartData);
RestartableItemOrientedTaskletRestartData restartData = new RestartableItemOrientedTaskletRestartData(
itemProviderRestartData, itemProcessorRestartData);
return restartData;
}
@@ -76,11 +76,11 @@ public class RestartableItemOrientedTasklet extends ItemOrientedTasklet implemen
moduleRestartData = new RestartableItemOrientedTaskletRestartData(data.getProperties());
}
if (itemProvider instanceof ItemStream) {
((ItemStream) itemProvider).restoreFrom(moduleRestartData.readerData);
if (itemProvider != null) {
itemProvider.restoreFrom(moduleRestartData.readerData);
}
if (itemWriter instanceof ItemStream) {
((ItemStream) itemWriter).restoreFrom(moduleRestartData.writerData);
if (itemWriter != null) {
itemWriter.restoreFrom(moduleRestartData.writerData);
}
}
@@ -100,10 +100,8 @@ public class RestartableItemOrientedTasklet extends ItemOrientedTasklet implemen
}
public RestartableItemOrientedTaskletRestartData(Properties data) {
readerData = new GenericStreamContext(PropertiesConverter
.stringToProperties(data.getProperty(READER_KEY)));
writerData = new GenericStreamContext(PropertiesConverter.stringToProperties(data
.getProperty(WRITER_KEY)));
readerData = new GenericStreamContext(PropertiesConverter.stringToProperties(data.getProperty(READER_KEY)));
writerData = new GenericStreamContext(PropertiesConverter.stringToProperties(data.getProperty(WRITER_KEY)));
}
public Properties getProperties() {
@@ -117,4 +115,20 @@ public class RestartableItemOrientedTasklet extends ItemOrientedTasklet implemen
return props;
}
}
/*
* (non-Javadoc)
* @see org.springframework.batch.item.ItemStream#close()
*/
public void close() throws Exception {
// no-op
}
/*
* (non-Javadoc)
* @see org.springframework.batch.item.ItemStream#open()
*/
public void open() throws Exception {
// no-op
}
}

View File

@@ -21,11 +21,11 @@ import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.writer.AbstractItemWriter;
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
import org.springframework.beans.factory.InitializingBean;
public class EmptyItemWriter implements ItemWriter, InitializingBean {
public class EmptyItemWriter extends AbstractItemWriter implements InitializingBean {
private boolean failed = false;

View File

@@ -25,10 +25,10 @@ import java.util.Properties;
import junit.framework.TestCase;
import org.springframework.batch.core.domain.JobSupport;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.core.domain.JobSupport;
import org.springframework.batch.core.domain.StepContribution;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.core.domain.StepInstance;
@@ -40,10 +40,10 @@ import org.springframework.batch.execution.scope.StepScope;
import org.springframework.batch.execution.scope.StepSynchronizationManager;
import org.springframework.batch.execution.tasklet.ItemOrientedTasklet;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemStream;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.StreamContext;
import org.springframework.batch.item.reader.ListItemReader;
import org.springframework.batch.item.stream.ItemStreamAdapter;
import org.springframework.batch.item.writer.AbstractItemWriter;
import org.springframework.batch.repeat.ExitStatus;
import org.springframework.batch.repeat.RepeatContext;
@@ -455,7 +455,7 @@ public class SimpleStepExecutorTests extends TestCase {
assertEquals(0, map.size());
}
private class MockRestartableTasklet implements Tasklet, ItemStream {
private class MockRestartableTasklet extends ItemStreamAdapter implements Tasklet {
private boolean getRestartDataCalled = false;

View File

@@ -273,7 +273,7 @@ public class ItemOrientedTaskletTests extends TestCase {
}
}
private class SkippableItemReader implements KeyedItemReader,
private class SkippableItemReader extends AbstractItemReader implements KeyedItemReader,
Skippable, StatisticsProvider {
public Object read() throws Exception {
return itemProvider.read();
@@ -287,11 +287,9 @@ public class ItemOrientedTaskletTests extends TestCase {
public Properties getStatistics() {
return PropertiesConverter.stringToProperties("foo=bar");
}
public void close() throws Exception {
}
}
private class SkippableItemWriter implements ItemWriter, Skippable,
private class SkippableItemWriter extends AbstractItemWriter implements ItemWriter, Skippable,
StatisticsProvider {
String props = "foo=bar";

View File

@@ -21,10 +21,11 @@ import java.util.Properties;
import junit.framework.TestCase;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemStream;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.StreamContext;
import org.springframework.batch.item.reader.AbstractItemReader;
import org.springframework.batch.item.stream.GenericStreamContext;
import org.springframework.batch.item.writer.AbstractItemWriter;
import org.springframework.batch.support.PropertiesConverter;
/**
@@ -32,16 +33,16 @@ import org.springframework.batch.support.PropertiesConverter;
*/
public class RestartableItemOrientedTaskletTests extends TestCase {
private static class MockProvider implements ItemReader, ItemStream {
private static class MockProvider extends AbstractItemReader {
StreamContext data = new StreamContext() {
public Properties getProperties() {
return PropertiesConverter.stringToProperties("a=b");
}
};
public Object read() {
return null;
}
@@ -55,16 +56,9 @@ public class RestartableItemOrientedTaskletTests extends TestCase {
assertEquals(this.data.getProperties(), data.getProperties());
}
public boolean recover(Object data, Throwable cause) {
return false;
}
public void close() throws Exception {
}
}
private static class MockWriter implements ItemWriter, ItemStream {
private static class MockWriter extends AbstractItemWriter {
StreamContext data = new StreamContext() {
public Properties getProperties() {
@@ -131,7 +125,7 @@ public class RestartableItemOrientedTaskletTests extends TestCase {
// restore from restart data (see asserts in mock classes)
module.restoreFrom(data);
}
public void testRestartFromNotRestartable() {
// create and set up module
@@ -144,7 +138,7 @@ public class RestartableItemOrientedTaskletTests extends TestCase {
assertNotNull(data);
// restore from restart data (see asserts in mock classes)
module.restoreFrom(data);
//System.err.println(data.getProperties());
// System.err.println(data.getProperties());
}
}