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

@@ -22,7 +22,7 @@ import java.util.Map;
import junit.framework.TestCase;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.writer.AbstractItemWriter;
import org.springframework.batch.repeat.ExitStatus;
import org.springframework.batch.repeat.RepeatContext;
import org.springframework.batch.repeat.RepeatInterceptor;
@@ -41,12 +41,13 @@ public class HibernateAwareItemWriterTests extends TestCase {
public void flush() throws DataAccessException {
list.add("flush");
}
public void clear() {
list.add("clear");
list.add("clear");
};
}
private class StubItemWriter implements ItemWriter, RepeatInterceptor {
private class StubItemWriter extends AbstractItemWriter implements RepeatInterceptor {
public void write(Object item) {
list.add(item);
}
@@ -70,13 +71,10 @@ public class HibernateAwareItemWriterTests extends TestCase {
public void open(RepeatContext context) {
list.add(context);
}
public void close() throws Exception {
}
}
HibernateAwareItemWriter writer = new HibernateAwareItemWriter();
final List list = new ArrayList();
private RepeatContextSupport context;
@@ -93,15 +91,16 @@ public class HibernateAwareItemWriterTests extends TestCase {
writer.setHibernateTemplate(new HibernateTemplateWrapper());
list.clear();
}
/* (non-Javadoc)
/*
* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception {
Map map = TransactionSynchronizationManager.getResourceMap();
for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
TransactionSynchronizationManager.unbindResource(key);
TransactionSynchronizationManager.unbindResource(key);
}
}
@@ -116,10 +115,10 @@ public class HibernateAwareItemWriterTests extends TestCase {
try {
writer.afterPropertiesSet();
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
}
catch (IllegalArgumentException e) {
// expected
assertTrue("Wrong message for exception: " + e.getMessage(), e
.getMessage().indexOf("delegate") >= 0);
assertTrue("Wrong message for exception: " + e.getMessage(), e.getMessage().indexOf("delegate") >= 0);
}
}
@@ -136,7 +135,7 @@ public class HibernateAwareItemWriterTests extends TestCase {
/**
* Test method for
* {@link org.springframework.batch.io.support.HibernateAwareItemWriter#write(java.lang.Object)}.
* @throws Exception
* @throws Exception
*/
public void testWrite() throws Exception {
writer.write("foo");
@@ -158,7 +157,8 @@ public class HibernateAwareItemWriterTests extends TestCase {
try {
writer.close(context);
fail("Expected RuntimeException");
} catch (RuntimeException e) {
}
catch (RuntimeException e) {
assertEquals("bar", e.getMessage());
}
assertEquals(2, list.size());
@@ -169,7 +169,7 @@ public class HibernateAwareItemWriterTests extends TestCase {
/**
* Test method for
* {@link org.springframework.batch.io.support.HibernateAwareItemWriter#write(java.lang.Object)}.
* @throws Exception
* @throws Exception
*/
public void testWriteAndCloseWithFailure() throws Exception {
final RuntimeException ex = new RuntimeException("bar");
@@ -182,7 +182,8 @@ public class HibernateAwareItemWriterTests extends TestCase {
try {
writer.close(context);
fail("Expected RuntimeException");
} catch (RuntimeException e) {
}
catch (RuntimeException e) {
assertEquals("bar", e.getMessage());
}
assertEquals(3, list.size());

View File

@@ -8,11 +8,10 @@ import java.util.Properties;
import junit.framework.TestCase;
import org.easymock.MockControl;
import org.springframework.batch.item.ItemStream;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.StreamContext;
import org.springframework.batch.item.stream.GenericStreamContext;
import org.springframework.batch.item.writer.CompositeItemWriter;
import org.springframework.batch.item.stream.ItemStreamAdapter;
import org.springframework.batch.statistics.StatisticsProvider;
/**
@@ -62,14 +61,9 @@ public class CompositeItemWriterTests extends TestCase {
* All Restartable processors should be restarted, not-Restartable processors should be ignored.
*/
public void testRestart() {
//this mock with undefined behavior makes sure not-Restartable processor is ignored
MockControl p1c = MockControl.createStrictControl(ItemWriter.class);
final ItemWriter p1 = (ItemWriter) p1c.getMock();
final ItemWriter p2 = new ItemWriterStub();
final ItemWriter p3 = new ItemWriterStub();
List itemProcessors = new ArrayList(){{
add(p1);
add(p2);
add(p3);
}};
@@ -120,7 +114,7 @@ public class CompositeItemWriterTests extends TestCase {
* Stub for testing restart. Checks the restart data received is the same that was returned by
* <code>getRestartData()</code>
*/
private static class ItemWriterStub implements ItemWriter, ItemStream, StatisticsProvider {
private static class ItemWriterStub extends ItemStreamAdapter implements ItemWriter, StatisticsProvider {
private static final String RESTART_KEY = "restartData";
private static final String STATS_KEY = "stats";

View File

@@ -19,9 +19,9 @@ package org.springframework.batch.repeat.support;
import java.util.HashSet;
import java.util.Set;
import org.springframework.batch.repeat.ExitStatus;
import org.springframework.batch.repeat.RepeatCallback;
import org.springframework.batch.repeat.RepeatContext;
import org.springframework.batch.repeat.ExitStatus;
import org.springframework.batch.repeat.callback.ItemReaderRepeatCallback;
import org.springframework.core.task.SimpleAsyncTaskExecutor;