BATCH-1913: Add step builders

This commit is contained in:
Dave Syer
2012-12-01 18:46:33 +00:00
parent a9140c7fac
commit f63f67c65a
43 changed files with 1948 additions and 1023 deletions

View File

@@ -316,7 +316,6 @@ public class ChunkElementParserTests {
return policy;
}
@SuppressWarnings("unchecked")
private Object getNestedPathInStep(String stepName, ApplicationContext ctx, String path) throws Exception {
Map<String, Step> beans = ctx.getBeansOfType(Step.class);
assertTrue(beans.containsKey(stepName));
@@ -365,7 +364,6 @@ public class ChunkElementParserTests {
return (Collection<ItemStream>) ReflectionTestUtils.getField(compositeStream, "streams");
}
@SuppressWarnings("unchecked")
private Collection<RetryListener> getRetryListeners(String stepName, ApplicationContext ctx) throws Exception {
Map<String, Step> beans = ctx.getBeansOfType(Step.class);
assertTrue(beans.containsKey(stepName));

View File

@@ -64,6 +64,9 @@ public class StepParserStepFactoryBeanTests {
@Test
public void testOnlyTaskletSet() throws Exception {
StepParserStepFactoryBean<Object, Object> fb = new StepParserStepFactoryBean<Object, Object>();
fb.setName("step");
fb.setTransactionManager(new ResourcelessTransactionManager());
fb.setJobRepository(new JobRepositorySupport());
fb.setTasklet(new DummyTasklet());
Object step = fb.getObject();
assertTrue(step instanceof TaskletStep);
@@ -74,6 +77,9 @@ public class StepParserStepFactoryBeanTests {
@Test
public void testOnlyTaskletTaskExecutor() throws Exception {
StepParserStepFactoryBean<Object, Object> fb = new StepParserStepFactoryBean<Object, Object>();
fb.setName("step");
fb.setTransactionManager(new ResourcelessTransactionManager());
fb.setJobRepository(new JobRepositorySupport());
fb.setTasklet(new DummyTasklet());
fb.setTaskExecutor(new SimpleAsyncTaskExecutor());
Object step = fb.getObject();
@@ -85,6 +91,7 @@ public class StepParserStepFactoryBeanTests {
@Test(expected = IllegalStateException.class)
public void testSkipLimitSet() throws Exception {
StepParserStepFactoryBean<Object, Object> fb = new StepParserStepFactoryBean<Object, Object>();
fb.setName("step");
fb.setSkipLimit(5);
fb.getObject();
}
@@ -140,6 +147,7 @@ public class StepParserStepFactoryBeanTests {
fb.setItemReader(new DummyItemReader());
fb.setItemWriter(new DummyItemWriter());
fb.setStreams(new ItemStream[] { new FlatFileItemReader<Object>() });
fb.setHasChunkElement(true);
Object step = fb.getObject();
assertTrue(step instanceof TaskletStep);
@@ -147,7 +155,7 @@ public class StepParserStepFactoryBeanTests {
assertTrue(tasklet instanceof ChunkOrientedTasklet<?>);
}
@Test(expected = IllegalStateException.class)
@Test(expected = IllegalArgumentException.class)
public void testFaultTolerantStepAll() throws Exception {
StepParserStepFactoryBean<Object, Object> fb = new StepParserStepFactoryBean<Object, Object>();
fb.setBeanName("step1");
@@ -172,6 +180,7 @@ public class StepParserStepFactoryBeanTests {
fb.setRetryListeners(new RetryListenerSupport());
fb.setSkippableExceptionClasses(new HashMap<Class<? extends Throwable>, Boolean>());
fb.setRetryableExceptionClasses(new HashMap<Class<? extends Throwable>, Boolean>());
fb.setHasChunkElement(true);
Object step = fb.getObject();
assertTrue(step instanceof TaskletStep);

View File

@@ -50,6 +50,7 @@ public class PartitionStepTests {
MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean();
jobRepository = (JobRepository) factory.getObject();
step.setJobRepository(jobRepository);
step.setName("partitioned");
}
@Test

View File

@@ -68,8 +68,7 @@ public class NonAbstractStepTests {
}
/**
* Fills the events list when listener methods are called, prefixed with the
* name of the listener.
* Fills the events list when listener methods are called, prefixed with the name of the listener.
*/
private class EventTrackingListener implements StepExecutionListener {
@@ -85,7 +84,7 @@ public class NonAbstractStepTests {
public ExitStatus afterStep(StepExecution stepExecution) {
assertSame(execution, stepExecution);
events.add(getEvent("afterStep("+stepExecution.getExitStatus().getExitCode()+")"));
events.add(getEvent("afterStep(" + stepExecution.getExitStatus().getExitCode() + ")"));
stepExecution.getExecutionContext().putString("afterStep", "afterStep");
return stepExecution.getExitStatus();
}
@@ -104,7 +103,7 @@ public class NonAbstractStepTests {
private static class JobRepositoryStub extends JobRepositorySupport {
ExecutionContext saved = new ExecutionContext();
static long counter = 0;
public void updateExecutionContext(StepExecution stepExecution) {
@@ -119,7 +118,6 @@ public class NonAbstractStepTests {
counter++;
}
}
}
@@ -128,7 +126,7 @@ public class NonAbstractStepTests {
tested.setJobRepository(repository);
repository.add(execution);
}
@Test
public void testBeanName() throws Exception {
AbstractStep step = new AbstractStep() {
@@ -175,10 +173,10 @@ public class NonAbstractStepTests {
assertEquals(ExitStatus.COMPLETED, execution.getExitStatus());
assertTrue("Execution context modifications made by listener should be persisted", repository.saved
.containsKey("beforeStep"));
assertTrue("Execution context modifications made by listener should be persisted", repository.saved
.containsKey("afterStep"));
assertTrue("Execution context modifications made by listener should be persisted",
repository.saved.containsKey("beforeStep"));
assertTrue("Execution context modifications made by listener should be persisted",
repository.saved.containsKey("afterStep"));
}
@Test
@@ -210,11 +208,12 @@ public class NonAbstractStepTests {
assertEquals(ExitStatus.FAILED.getExitCode(), execution.getExitStatus().getExitCode());
String exitDescription = execution.getExitStatus().getExitDescription();
assertTrue("Wrong message: "+exitDescription, exitDescription.contains("crash"));
assertTrue("Wrong message: " + exitDescription, exitDescription.contains("crash"));
assertTrue("Execution context modifications made by listener should be persisted", repository.saved
.containsKey("afterStep"));
assertTrue("Execution context modifications made by listener should be persisted",
repository.saved.containsKey("afterStep"));
}
/**
* Exception during business processing.
*/
@@ -247,8 +246,8 @@ public class NonAbstractStepTests {
assertEquals("STOPPED", execution.getExitStatus().getExitCode());
assertTrue("Execution context modifications made by listener should be persisted", repository.saved
.containsKey("afterStep"));
assertTrue("Execution context modifications made by listener should be persisted",
repository.saved.containsKey("afterStep"));
}
@Test
@@ -271,8 +270,8 @@ public class NonAbstractStepTests {
assertEquals("FUNNY", execution.getExitStatus().getExitCode());
assertTrue("Execution context modifications made by listener should be persisted", repository.saved
.containsKey("afterStep"));
assertTrue("Execution context modifications made by listener should be persisted",
repository.saved.containsKey("afterStep"));
}
/**
@@ -310,16 +309,10 @@ public class NonAbstractStepTests {
/**
* JobRepository is a required property.
*/
@Test
@Test(expected = IllegalStateException.class)
public void testAfterPropertiesSet() throws Exception {
tested.setJobRepository(null);
try {
tested.afterPropertiesSet();
fail();
}
catch (IllegalArgumentException e) {
// expected
}
tested.afterPropertiesSet();
}
}

View File

@@ -25,6 +25,7 @@ import org.springframework.batch.core.SkipListener;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.step.JobRepositorySupport;
import org.springframework.batch.core.step.factory.FaultTolerantStepFactoryBean;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.support.ListItemReader;
import org.springframework.batch.support.transaction.ResourcelessTransactionManager;

View File

@@ -45,6 +45,7 @@ import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
import org.springframework.batch.core.repository.support.SimpleJobRepository;
import org.springframework.batch.core.step.AbstractStep;
import org.springframework.batch.core.step.factory.FaultTolerantStepFactoryBean;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;

View File

@@ -30,6 +30,7 @@ import org.springframework.batch.core.StepListener;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean;
import org.springframework.batch.core.step.FatalStepExecutionException;
import org.springframework.batch.core.step.factory.FaultTolerantStepFactoryBean;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.support.ListItemReader;
import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
@@ -151,7 +152,6 @@ public class FaultTolerantStepFactoryBeanRollbackTests {
assertFalse(attr.rollbackOn(new Exception("")));
}
@SuppressWarnings("unchecked")
@Test
public void testNonDefaultRollbackRules() throws Exception {
TransactionAttributeEditor editor = new TransactionAttributeEditor();

View File

@@ -33,6 +33,7 @@ import org.springframework.batch.core.StepListener;
import org.springframework.batch.core.listener.SkipListenerSupport;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean;
import org.springframework.batch.core.step.factory.FaultTolerantStepFactoryBean;
import org.springframework.batch.core.step.skip.LimitCheckingItemSkipPolicy;
import org.springframework.batch.core.step.skip.SkipLimitExceededException;
import org.springframework.batch.core.step.skip.SkipPolicy;

View File

@@ -17,6 +17,7 @@ import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
import org.springframework.batch.core.step.factory.FaultTolerantStepFactoryBean;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.support.ListItemReader;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -27,6 +27,7 @@ import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.launch.EmptyItemWriter;
import org.springframework.batch.core.step.JobRepositorySupport;
import org.springframework.batch.core.step.factory.SimpleStepFactoryBean;
import org.springframework.batch.item.support.ListItemReader;
import org.springframework.batch.repeat.RepeatCallback;
import org.springframework.batch.repeat.RepeatOperations;

View File

@@ -47,6 +47,7 @@ import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
import org.springframework.batch.core.repository.support.SimpleJobRepository;
import org.springframework.batch.core.step.AbstractStep;
import org.springframework.batch.core.step.factory.SimpleStepFactoryBean;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
@@ -272,7 +273,7 @@ public class SimpleStepFactoryBeanTests {
int expectedListenerCallCount = (items.length / commitInterval) + 1;
assertEquals(expectedListenerCallCount, chunkListener.afterCount);
assertEquals(expectedListenerCallCount, chunkListener.beforeCount);
assertTrue("Llistener order not as expected: " + writeListener.trail, writeListener.trail.startsWith("1234"));
assertTrue("Listener order not as expected: " + writeListener.trail, writeListener.trail.startsWith("1234"));
}
/**