OPEN - issue BATCH-324: Step as factory for StepExecutor

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

First pass - added factory method, resolved conflicts and cycles, got tests working.
This commit is contained in:
dsyer
2008-01-29 15:07:53 +00:00
parent 6ad596421b
commit 4da4c073d5
32 changed files with 325 additions and 577 deletions

View File

@@ -41,7 +41,7 @@ public class ExceptionRestartableTasklet extends RestartableItemOrientedTasklet
counter++;
if (counter == throwExceptionOnRecordNumber) {
throw new BatchCriticalException();
throw new BatchCriticalException("Planned failure on count="+counter);
}
return super.execute();

View File

@@ -107,18 +107,8 @@
<bean id="jobLauncher"
class="org.springframework.batch.execution.launch.SimpleJobLauncher">
<property name="jobRepository" ref="simpleJobRepository" />
<property name="jobExecutor">
<bean parent="jobExecutor">
<property name="stepExecutorFactory">
<bean
class="org.springframework.batch.execution.step.PrototypeBeanStepExecutorFactory">
<property name="stepExecutorName"
value="notifyingStepExecutor" />
</bean>
</property>
</bean>
</property>
<property name="jobRepository" ref="jobRepository" />
<property name="jobExecutor" ref="jobExecutor"/>
<property name="taskExecutor">
<bean
class="org.springframework.core.task.SimpleAsyncTaskExecutor" />

View File

@@ -18,8 +18,7 @@
<property name="startLimit" value="100" />
<property name="steps">
<list>
<bean id="playerload"
class="org.springframework.batch.execution.step.SimpleStep">
<bean id="playerload" parent="simpleStep">
<property name="commitInterval" value="1"></property>
<property name="startLimit" value="100" />
<property name="saveRestartData" value="true" />
@@ -44,8 +43,7 @@
</bean>
</property>
</bean>
<bean id="gameLoad"
class="org.springframework.batch.execution.step.SimpleStep">
<bean id="gameLoad" parent="simpleStep">
<property name="commitInterval" value="1" />
<property name="startLimit" value="100" />
<property name="saveRestartData" value="true" />
@@ -64,8 +62,7 @@
</bean>
</property>
</bean>
<bean id="playerSummarization"
class="org.springframework.batch.execution.step.SimpleStep">
<bean id="playerSummarization" parent="simpleStep">
<property name="commitInterval" value="1" />
<property name="startLimit" value="100" />
<property name="saveRestartData" value="true" />

View File

@@ -18,8 +18,7 @@
<!-- set restartable=false so that this job can be used by more than one test -->
<property name="restartable" value="false" />
<property name="steps">
<bean id="step1"
class="org.springframework.batch.execution.step.RepeatOperationsStep">
<bean id="step1" parent="repeatOperationsStep">
<property name="tasklet">
<bean
class="org.springframework.batch.execution.tasklet.RestartableItemOrientedTasklet">

View File

@@ -14,7 +14,7 @@
<bean id="jobLauncher" class="org.springframework.batch.execution.launch.SimpleJobLauncher">
<property name="jobExecutor" ref="jobExecutor" />
<property name="jobRepository" ref="simpleJobRepository" />
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor">
<bean class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
</property>

View File

@@ -46,13 +46,12 @@
</property>
</bean>
</property>
<property name="commitInterval" value="2"/>
<property name="commitInterval" value="2" />
<property name="startLimit" value="100" />
<property name="saveRestartData" value="true" />
<property name="allowStartIfComplete" value="false" />
</bean>
<bean id="loading"
class="org.springframework.batch.execution.step.RepeatOperationsStep">
<bean id="loading" parent="repeatOperationsStep">
<property name="tasklet">
<bean
class="org.springframework.batch.execution.tasklet.ItemOrientedTasklet">
@@ -68,8 +67,7 @@
<property name="itemWriter">
<bean
class="org.springframework.batch.sample.item.writer.TradeWriter">
<property name="dao"
ref="tradeDao" />
<property name="dao" ref="tradeDao" />
</bean>
</property>
</bean>

View File

@@ -17,9 +17,8 @@
<bean id="tradeJob" parent="simpleJob">
<property name="steps">
<list>
<bean id="step1"
class="org.springframework.batch.execution.step.RepeatOperationsStep">
<property name="chunkOperations">
<bean id="step1" parent="repeatOperationsStep">
<property name="chunkOperations">
<bean
class="org.springframework.batch.repeat.support.RepeatTemplate">
<property name="completionPolicy">
@@ -37,7 +36,7 @@
<property name="exceptionHandler">
<bean
class="org.springframework.batch.repeat.exception.handler.SimpleLimitExceptionHandler"
p:limit="5" p:type="java.lang.Exception"/>
p:limit="5" p:type="java.lang.Exception" />
</property>
</bean>
</property>
@@ -56,18 +55,21 @@
<property name="itemWriter">
<bean
class="org.springframework.batch.sample.item.writer.TradeWriter"
p:dao-ref="tradeDao" p:failure="3"/>
p:dao-ref="tradeDao" p:failure="3" />
</property>
</bean>
</property>
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="step2" parent="simpleStep">
<property name="tasklet">
<bean
class="org.springframework.batch.execution.tasklet.RestartableItemOrientedTasklet">
<property name="itemReader" ref="tradeSqlItemReader" />
<property name="itemReader"
ref="tradeSqlItemReader" />
<property name="itemWriter">
<bean class="org.springframework.batch.sample.item.writer.DummyItemWriter" />
<bean
class="org.springframework.batch.sample.item.writer.DummyItemWriter" />
</property>
</bean>
</property>

View File

@@ -23,7 +23,7 @@
<bean id="jobLauncher"
class="org.springframework.batch.execution.launch.SimpleJobLauncher">
<property name="jobRepository" ref="simpleJobRepository" />
<property name="jobRepository" ref="jobRepository" />
<property name="jobExecutor" ref="jobExecutor" />
</bean>
@@ -45,23 +45,17 @@
<bean id="jobExecutor"
class="org.springframework.batch.execution.job.DefaultJobExecutor">
<property name="jobRepository" ref="simpleJobRepository" />
<property name="stepExecutorFactory">
<bean
class="org.springframework.batch.execution.step.PrototypeBeanStepExecutorFactory">
<property name="stepExecutorName" value="stepExecutor" />
</bean>
</property>
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="stepExecutor"
class="org.springframework.batch.execution.step.simple.SimpleStepExecutor"
scope="prototype">
<property name="transactionManager" ref="transactionManager" />
<property name="repository" ref="simpleJobRepository" />
<property name="repository" ref="jobRepository" />
</bean>
<bean id="simpleJobRepository"
<bean id="jobRepository"
class="org.springframework.batch.execution.repository.SimpleJobRepository">
<constructor-arg ref="jobDao" />
<constructor-arg ref="stepDao" />
@@ -102,10 +96,12 @@
</bean>
<bean id="simpleStep"
class="org.springframework.batch.execution.step.SimpleStep"
class="org.springframework.batch.execution.step.simple.SimpleStep"
abstract="true">
<property name="allowStartIfComplete" value="true" />
<property name="saveRestartData" value="false" />
<property name="saveRestartData" value="false" />
<property name="jobRepository" ref="jobRepository"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="exceptionHandler">
<bean
class="org.springframework.batch.repeat.exception.handler.SimpleLimitExceptionHandler">
@@ -116,6 +112,15 @@
<property name="commitInterval" value="1" />
</bean>
<bean id="repeatOperationsStep"
class="org.springframework.batch.execution.step.simple.RepeatOperationsStep"
abstract="true">
<property name="allowStartIfComplete" value="true" />
<property name="saveRestartData" value="false" />
<property name="jobRepository" ref="jobRepository"/>
<property name="transactionManager" ref="transactionManager"/>
</bean>
<bean id="customEditorConfigurer"
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">

View File

@@ -17,6 +17,7 @@
package org.springframework.batch.sample;
import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.io.exception.BatchCriticalException;
import org.springframework.jdbc.core.JdbcOperations;
/**
@@ -68,10 +69,14 @@ public class RestartFunctionalTests extends AbstractBatchLauncherTests {
runJob();
fail("First run of the job is expected to fail.");
}
catch (Exception expected) {
catch (BatchCriticalException expected) {
//expected
assertTrue("Not planned exception: "+expected.getMessage(), expected.getMessage().toLowerCase().indexOf("planned")>=0);
}
int medium = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM TRADE");
System.err.println(medium);
runJob();
int after = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM TRADE");