BATCH-1013: split the <step> elements name attribute into id and ref attributes

This commit is contained in:
trisberg
2009-02-10 04:52:03 +00:00
parent 52628ea904
commit d3396a3fa7
63 changed files with 251 additions and 171 deletions

View File

@@ -0,0 +1,64 @@
/*
* Copyright 2006-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core.configuration.xml;
import org.springframework.batch.core.JobInterruptedException;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepExecution;
/**
* Class used for delegating from a <step> definition to an individual bean
* defining the actual step. This is needed to maintain the id from the <step>
* element for any flow references.
*
* @author Thomas Risberg
* @since 2.0
*/
public class DelegatingStep implements Step {
String name;
Step delegate;
/**
* Constructor taking the step name and the delegate as parameters.
*
* @param name the name to be used for the step
* @param delegate the step definition to delegate to
*/
public DelegatingStep(String name, Step delegate) {
this.name = name;
this.delegate = delegate;
}
public void execute(StepExecution stepExecution)
throws JobInterruptedException {
delegate.execute(stepExecution);
}
public String getName() {
return name;
}
public int getStartLimit() {
return delegate.getStartLimit();
}
public boolean isAllowStartIfComplete() {
return delegate.isAllowStartIfComplete();
}
}

View File

@@ -54,28 +54,43 @@ public class InlineStepParser extends AbstractStepParser {
BeanDefinitionBuilder stateBuilder =
BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.job.flow.support.state.StepState");
String stepRef = element.getAttribute("name");
String stepId = element.getAttribute("id");
String stepRef = element.getAttribute("ref");
String taskletRef = element.getAttribute("tasklet");
if (!StringUtils.hasText(stepRef)) {
parserContext.getReaderContext().error("The name attribute can't be empty for <" + element.getNodeName() + ">", element);
}
@SuppressWarnings("unchecked")
List<Element> processTaskElements = (List<Element>) DomUtils.getChildElementsByTagName(element, "tasklet");
if (StringUtils.hasText(taskletRef)) {
List<Element> listOfTaskElements = (List<Element>) DomUtils.getChildElementsByTagName(element, "tasklet");
if (StringUtils.hasText(stepRef)) {
if (StringUtils.hasText(taskletRef)) {
parserContext.getReaderContext().error("The 'tasklet' attribute can't be combined with the 'ref=\""+ stepRef +"\"' attribute specification for <" + element.getNodeName() + ">", element);
}
if (listOfTaskElements.size() > 0) {
parserContext.getReaderContext().error("The <" + listOfTaskElements.get(0).getNodeName() +
"> element can't be combined with the 'ref=\""+ stepRef +"\"' attribute specification for <" + element.getNodeName() + ">", element);
}
BeanDefinitionBuilder stepBuilder =
BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.configuration.xml.DelegatingStep");
stepBuilder.addConstructorArgValue(stepId);
stepBuilder.addConstructorArgReference(stepRef);
AbstractBeanDefinition bd = stepBuilder.getBeanDefinition();
bd.setSource(parserContext.extractSource(element));
parserContext.getRegistry().registerBeanDefinition(stepId, bd);
stateBuilder.addConstructorArgReference(stepId);
}
else if (StringUtils.hasText(taskletRef)) {
if (listOfTaskElements.size() > 0) {
parserContext.getReaderContext().error("The <" + listOfTaskElements.get(0).getNodeName() +
"> element can't be combined with the 'tasklet=\""+ taskletRef +"\"' attribute specification for <" + element.getNodeName() + ">", element);
}
AbstractBeanDefinition bd = parseTaskletRef(element, taskletRef, parserContext, jobRepositoryRef);
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepRef));
stateBuilder.addConstructorArgReference(stepRef);
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepId));
stateBuilder.addConstructorArgReference(stepId);
}
else if (processTaskElements.size() > 0) {
Element taskElement = processTaskElements.get(0);
else if (listOfTaskElements.size() > 0) {
Element taskElement = listOfTaskElements.get(0);
AbstractBeanDefinition bd = parseTaskletElement(element, taskElement, parserContext, jobRepositoryRef);
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepRef));
stateBuilder.addConstructorArgReference(stepRef);
}
else if (StringUtils.hasText(stepRef)) {
stateBuilder.addConstructorArgReference(stepRef);
parserContext.registerBeanComponent(new BeanComponentDefinition(bd, stepId));
stateBuilder.addConstructorArgReference(stepId);
}
else {
parserContext.getReaderContext().error("Incomplete configuration detected while creating step with name " + stepRef, element);

View File

@@ -148,7 +148,8 @@
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="stepType">
<xsd:attribute name="name" type="xsd:string" use="required" >
<xsd:attribute name="id" type="xsd:ID" use="required" />
<xsd:attribute name="ref" type="xsd:string" use="optional" >
<xsd:annotation>
<xsd:documentation>
The step name attribute defines the name for the step. It can be used as

View File

@@ -67,7 +67,7 @@ public class BranchStepJobParserTests {
for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
names.add(stepExecution.getStepName());
}
assertTrue(names.contains("step3"));
assertFalse(names.contains("step2"));
assertTrue(names.contains("s3"));
assertFalse(names.contains("s2"));
}
}

View File

@@ -41,17 +41,17 @@ public class DefaultFailureJobParserTests extends AbstractJobParserTests {
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(2, stepNamesList.size());
assertTrue(stepNamesList.contains("step1"));
assertTrue(stepNamesList.contains("failingStep"));
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus());
StepExecution stepExecution1 = getStepExecution(jobExecution, "step1");
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "failingStep");
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());

View File

@@ -41,17 +41,17 @@ public class DefaultSuccessJobParserTests extends AbstractJobParserTests {
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(2, stepNamesList.size());
assertTrue(stepNamesList.contains("step1"));
assertTrue(stepNamesList.contains("step2"));
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("s2"));
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
StepExecution stepExecution1 = getStepExecution(jobExecution, "step1");
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "step2");
StepExecution stepExecution2 = getStepExecution(jobExecution, "s2");
assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus());

View File

@@ -41,12 +41,12 @@ public class EndTransitionDefaultStatusJobParserTests extends AbstractJobParserT
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("failingStep"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
StepExecution stepExecution1 = getStepExecution(jobExecution, "failingStep");
StepExecution stepExecution1 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.FAILED, stepExecution1.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode());

View File

@@ -46,17 +46,17 @@ public class EndTransitionJobParserTests extends AbstractJobParserTests {
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(2, stepNamesList.size());
assertTrue(stepNamesList.contains("step1"));
assertTrue(stepNamesList.contains("failingStep"));
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals("EARLY TERMINATION (FAIL)", jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "step1");
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "failingStep");
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());

View File

@@ -41,12 +41,12 @@ public class FailTransitionDefaultStatusJobParserTests extends AbstractJobParser
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("step1"));
assertTrue(stepNamesList.contains("s1"));
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus());
StepExecution stepExecution1 = getStepExecution(jobExecution, "step1");
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());

View File

@@ -44,17 +44,17 @@ public class FailTransitionJobParserTests extends AbstractJobParserTests {
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(2, stepNamesList.size());
assertTrue(stepNamesList.contains("step1"));
assertTrue(stepNamesList.contains("failingStep"));
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals("EARLY TERMINATION (FAIL)", jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "step1");
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "failingStep");
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());
@@ -65,12 +65,12 @@ public class FailTransitionJobParserTests extends AbstractJobParserTests {
jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size()); // step1 is not executed
assertTrue(stepNamesList.contains("failingStep"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals("EARLY TERMINATION (FAIL)", jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution3 = getStepExecution(jobExecution, "failingStep");
StepExecution stepExecution3 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.FAILED, stepExecution3.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution3.getExitStatus().getExitCode());

View File

@@ -41,17 +41,17 @@ public class SplitDifferentResultsFailFirstJobParserTests extends AbstractJobPar
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(2, stepNamesList.size());
assertTrue(stepNamesList.contains("step1"));
assertTrue(stepNamesList.contains("failingStep"));
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.FAILED, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus());
StepExecution stepExecution1 = getStepExecution(jobExecution, "step1");
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "failingStep");
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());

View File

@@ -41,22 +41,22 @@ public class SplitDifferentResultsFailSecondJobParserTests extends AbstractJobPa
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(3, stepNamesList.size());
assertTrue(stepNamesList.contains("step1"));
assertTrue(stepNamesList.contains("failingStep"));
assertTrue(stepNamesList.contains("step3"));
assertTrue(stepNamesList.contains("s1"));
assertTrue(stepNamesList.contains("fail"));
assertTrue(stepNamesList.contains("s3"));
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
StepExecution stepExecution1 = getStepExecution(jobExecution, "step1");
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "failingStep");
StepExecution stepExecution2 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.FAILED, stepExecution2.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode());
StepExecution stepExecution3 = getStepExecution(jobExecution, "step3");
StepExecution stepExecution3 = getStepExecution(jobExecution, "s3");
assertEquals(BatchStatus.COMPLETED, stepExecution3.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution3.getExitStatus());

View File

@@ -53,8 +53,9 @@ public class StepParserTests {
ConfigurableApplicationContext ctx =
new ClassPathXmlApplicationContext("org/springframework/batch/core/configuration/xml/StepParserBeanNameTests-context.xml");
Map<String, Object> beans = ctx.getBeansOfType(Step.class);
assertTrue("'step1' bean not found", beans.containsKey("step1"));
assertTrue("'step2' bean not found", beans.containsKey("step2"));
assertTrue("'s1' bean not found", beans.containsKey("s1"));
Step s1 = (Step)ctx.getBean("s1");
assertEquals("wrong name", "s1", s1.getName());
}
@Test

View File

@@ -45,12 +45,12 @@ public class StopIncompleteJobParserTests extends AbstractJobParserTests {
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("failingStep"));
assertTrue(stepNamesList.contains("fail"));
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "failingStep");
StepExecution stepExecution1 = getStepExecution(jobExecution, "fail");
assertEquals(BatchStatus.INCOMPLETE, stepExecution1.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode());
@@ -61,12 +61,12 @@ public class StopIncompleteJobParserTests extends AbstractJobParserTests {
jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size()); // step1 is not executed
assertTrue(stepNamesList.contains("step2"));
assertTrue(stepNamesList.contains("s2"));
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "step2");
StepExecution stepExecution2 = getStepExecution(jobExecution, "s2");
assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus());

View File

@@ -45,12 +45,12 @@ public class StopJobParserTests extends AbstractJobParserTests {
JobExecution jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size());
assertTrue(stepNamesList.contains("step1"));
assertTrue(stepNamesList.contains("s1"));
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode());
StepExecution stepExecution1 = getStepExecution(jobExecution, "step1");
StepExecution stepExecution1 = getStepExecution(jobExecution, "s1");
assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus());
@@ -61,12 +61,12 @@ public class StopJobParserTests extends AbstractJobParserTests {
jobExecution = createJobExecution();
job.execute(jobExecution);
assertEquals(1, stepNamesList.size()); // step1 is not executed
assertTrue(stepNamesList.contains("step2"));
assertTrue(stepNamesList.contains("s2"));
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
StepExecution stepExecution2 = getStepExecution(jobExecution, "step2");
StepExecution stepExecution2 = getStepExecution(jobExecution, "s2");
assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus());
assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus());

View File

@@ -7,12 +7,12 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1">
<next on="FAILED" to="step2" />
<next on="*" to="step3" />
<step id="s1" ref="step1">
<next on="FAILED" to="s2" />
<next on="*" to="s3" />
</step>
<step name="step2" />
<step name="step3" />
<step id="s2" ref="step2"/>
<step id="s3" ref="step3"/>
</job>
</beans:beans>

View File

@@ -10,11 +10,11 @@
<job id="job">
<decision id="decision" decider="decider">
<next on="FOO" to="step1"/>
<next on="*" to="step2"/>
<next on="FOO" to="s1"/>
<next on="*" to="s2"/>
</decision>
<step name="step1" />
<step name="step2" />
<step id="s1" ref="step1" />
<step id="s2" ref="step2" />
</job>
</beans:beans>

View File

@@ -9,8 +9,8 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" next="failingStep"/>
<step name="failingStep" />
<step id="s1" ref="step1" next="fail"/>
<step id="fail" ref="failingStep"/>
</job>
</beans:beans>

View File

@@ -9,8 +9,8 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" next="step2"/>
<step name="step2" />
<step id="s1" ref="step1" next="s2"/>
<step id="s2" ref="step2"/>
</job>
</beans:beans>

View File

@@ -9,7 +9,7 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1">
<step id="s1" ref="step1">
<end on="COMPLETED"/>
<fail on="COMPLETED"/>
</step>

View File

@@ -9,7 +9,7 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="failingStep">
<step id="fail" ref="failingStep">
<end on="*" />
</step>
</job>

View File

@@ -9,8 +9,8 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" next="failingStep"/>
<step name="failingStep">
<step id="s1" ref="step1" next="fail"/>
<step id="fail" ref="failingStep">
<end on="*" status="EARLY TERMINATION (FAIL)"/>
</step>
</job>

View File

@@ -9,7 +9,7 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1">
<step id="s1" ref="step1">
<fail on="*" />
</step>
</job>

View File

@@ -9,8 +9,8 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" next="failingStep"/>
<step name="failingStep">
<step id="s1" ref="step1" next="fail"/>
<step id="fail" ref="failingStep">
<fail on="FAILED" status="EARLY TERMINATION (FAIL)"/>
</step>
</job>

View File

@@ -7,7 +7,7 @@
<beans:import resource="common-context.xml" />
<job id="job" incrementer="testIncrementer" job-repository="jobRepository">
<step name="step1" tasklet="tasklet"/>
<step id="s1" ref="step1"/>
<listeners>
<listener after-method="afterJob" ref="testListener"/>
<listener after-method="afterJob" class="org.springframework.batch.core.configuration.xml.TestJobListener"/>
@@ -15,8 +15,6 @@
</listeners>
</job>
<beans:bean id="tasklet" class="org.springframework.batch.core.configuration.xml.TestTasklet"/>
<beans:bean id="testListener" class="org.springframework.batch.core.configuration.xml.TestJobListener" />
<beans:bean id="testIncrementer" class="org.springframework.batch.core.configuration.xml.TestIncrementer" />

View File

@@ -9,8 +9,8 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="failingStep" next="step2"/>
<step name="step2" />
<step id="fail" ref="failingStep" next="s2"/>
<step id="s2" ref="step2"/>
</job>
</beans:beans>

View File

@@ -7,8 +7,8 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" next="step2"/>
<step name="step2" />
<step id="s1" ref="step1" next="s2"/>
<step id="s2" ref="step2"/>
</job>
</beans:beans>

View File

@@ -7,11 +7,11 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" next="step3">
<next on="COMPLETED WITH SKIPS" to="step2" />
<step id="s1" ref="step1" next="s3">
<next on="COMPLETED WITH SKIPS" to="s2" />
</step>
<step name="step2" />
<step name="step3" />
<step id="s2" ref="step2"/>
<step id="s3" ref="step3"/>
</job>
</beans:beans>

View File

@@ -7,7 +7,7 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" />
<step id="s1" ref="step1" />
</job>
</beans:beans>

View File

@@ -21,7 +21,7 @@
</beans:bean>
<job id="job" job-repository="thisRepository">
<step name="step1" />
<step id="s1" ref="step1" />
</job>
</beans:beans>

View File

@@ -11,10 +11,10 @@
<job id="job">
<split id="split1">
<flow>
<step name="failingStep"/>
<step id="fail" ref="failingStep"/>
</flow>
<flow>
<step name="step1"/>
<step id="s1" ref="step1"/>
</flow>
</split>
</job>

View File

@@ -10,17 +10,17 @@
<job id="job">
<split id="split1">
<next on="FAILED" to="step3"/>
<next on="FAILED" to="s3"/>
<fail on="COMPLETED" />
<flow>
<step name="step1"/>
<step id="s1" ref="step1"/>
</flow>
<flow>
<step name="failingStep"/>
<step id="fail" ref="failingStep"/>
</flow>
</split>
<step name="step3"/>
<step id="s3" ref="step3"/>
</job>
</beans:beans>

View File

@@ -7,16 +7,16 @@
<beans:import resource="common-context.xml" />
<job id="job">
<split id="split" next="step4">
<split id="split" next="s4">
<flow>
<step name="step1" next="step2"/>
<step name="step2" />
<step id="s1" ref="step1" next="s2"/>
<step id="s2" ref="step2" />
</flow>
<flow>
<step name="step3" />
<step id="s3" ref="step3" />
</flow>
</split>
<step name="step4" />
<step id="s4" ref="step4" />
</job>
</beans:beans>

View File

@@ -7,7 +7,7 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step">
<step id="step">
<tasklet reader="reader" processor="processor" writer="writer"
commit-interval="10" skip-limit="20"
retry-limit="3" cache-capacity="100"

View File

@@ -7,7 +7,7 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="ft-step" tasklet="tasklet">
<step id="ft-step" tasklet="tasklet">
<listeners>
<listener ref="listener" class="org.springframework.batch.core.configuration.xml.TestListener"/>
</listeners>

View File

@@ -4,23 +4,10 @@
xsi:schemaLocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" next="step2">
<tasklet reader="reader" writer="writer" commit-interval="10"/>
</step>
<step name="step2" tasklet="tasklet"/>
<step id="s1" ref="step2"/>
</job>
<beans:bean id="tasklet" class="org.springframework.batch.core.configuration.xml.TestTasklet"/>
<beans:bean id="reader" class="org.springframework.batch.core.configuration.xml.TestReader"/>
<beans:bean id="writer" class="org.springframework.batch.core.configuration.xml.TestWriter"/>
<beans:bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />
<beans:bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<beans:property name="transactionManager" ref="transactionManager" />
</beans:bean>
</beans:beans>

View File

@@ -5,7 +5,7 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<job id="job">
<step name="step">
<step id="step">
<tasklet reader="reader" processor="processor" writer="writer"
start-limit="25" allow-start-if-complete="true"
commit-interval="10" skip-limit="20"

View File

@@ -7,7 +7,7 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="ft-step">
<step id="ft-step">
<tasklet reader="reader" processor="processor" writer="writer"
commit-interval="10">
<streams>

View File

@@ -7,7 +7,7 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step">
<step id="step">
<tasklet reader="reader" processor="processor" writer="writer"
commit-interval="10" skip-limit="20"
retry-limit="3" cache-capacity="100"

View File

@@ -7,10 +7,10 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1" tasklet="tasklet">
<step id="step1" tasklet="tasklet">
<next on="*" to="step2" />
</step>
<step name="step2" tasklet="tasklet">
<step id="step2" tasklet="tasklet">
<listeners>
<listener ref="listener"/>
</listeners>

View File

@@ -9,10 +9,10 @@
<beans:bean id="decider" class="org.springframework.batch.core.configuration.xml.StopJobParserTests$TestDecider"/>
<job id="job">
<step name="failingStep">
<pause on="FAILED" to="step2"/>
<step id="fail" ref="failingStep">
<pause on="FAILED" to="s2"/>
</step>
<step name="step2"/>
<step id="s2" ref="step2"/>
</job>
</beans:beans>

View File

@@ -9,14 +9,14 @@
<beans:bean id="decider" class="org.springframework.batch.core.configuration.xml.StopJobParserTests$TestDecider"/>
<job id="job">
<step name="step1">
<step id="s1" ref="step1">
<pause on="COMPLETED" to="decision"/>
</step>
<decision id="decision" decider="decider">
<next on="FOO" to="step2"/>
<next on="FOO" to="s2"/>
<end on="*" status="FAILED"/>
</decision>
<step name="step2" />
<step id="s2" ref="step2"/>
</job>
</beans:beans>

View File

@@ -7,10 +7,10 @@
<beans:import resource="common-context.xml" />
<job id="job">
<step name="step1">
<next on="*" to="step2" />
<step id="s1" ref="step1">
<next on="*" to="s2" />
</step>
<step name="step2" />
<step id="s2" ref="step2" />
</job>
</beans:beans>

View File

@@ -14,7 +14,7 @@
multiple environments. -->
<job id="loopJob" incrementer="jobParametersIncrementer">
<step name="step1">
<step id="step1">
<tasklet reader="reader" writer="writer" commit-interval="3"/>
</step>
</job>

View File

@@ -9,10 +9,10 @@
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<job id="beanWrapperMapperJob">
<step name="step1" next="step2">
<step id="step1" next="step2">
<tasklet reader="tradeFileItemReader" processor="processor" writer="tradeWriter" commit-interval="1"></tasklet>
</step>
<step name="step2">
<step id="step2">
<tasklet reader="personFileItemReader" writer="personWriter" commit-interval="1"></tasklet>
</step>
</job>

View File

@@ -16,7 +16,7 @@
</beans:description>
<job id="compositeItemWriterJob">
<step name="step1">
<step id="step1">
<tasklet reader="fileItemReader" processor="processor" writer="compositeWriter" commit-interval="1">
<streams>
<stream ref="fileItemReader"/>

View File

@@ -8,7 +8,7 @@
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.0.xsd">
<job id="customerFilterJob">
<step name="uploadCustomer">
<step id="uploadCustomer">
<tasklet reader="customerFileUploadReader"
processor="customerUpdateProcessor"
writer="customerUpdateWriter"

View File

@@ -18,7 +18,7 @@
</beans:description>
<job id="delegateJob">
<step name="step1">
<step id="step1">
<tasklet reader="reader" writer="writer" commit-interval="1"/>
</step>
</job>

View File

@@ -12,15 +12,15 @@
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<job id="footballJob">
<step name="playerload" next="gameLoad">
<step id="playerload" next="gameLoad">
<tasklet reader="playerFileItemReader" writer="playerWriter"
commit-interval="${job.commit.interval}" />
</step>
<step name="gameLoad" next="playerSummarization">
<step id="gameLoad" next="playerSummarization">
<tasklet reader="gameFileItemReader" writer="gameWriter"
commit-interval="${job.commit.interval}" />
</step>
<step name="playerSummarization">
<step id="playerSummarization">
<tasklet reader="playerSummarizationSource" writer="summaryWriter"
commit-interval="${job.commit.interval}" />
</step>

View File

@@ -13,7 +13,7 @@
</beans:description>
<job id="headerFooterSample">
<step name="step1">
<step id="step1">
<tasklet reader="reader" writer="writer" commit-interval="3">
<streams>
<stream ref="reader"/>

View File

@@ -11,7 +11,7 @@
<beans:description>Example for Hibernate integration.</beans:description>
<job id="hibernateJob" restartable="false">
<step name="step1">
<step id="step1">
<tasklet reader="hibernateItemReader"
processor="creditIncreaseProcessor"
writer="hibernateCreditWriter"

View File

@@ -14,7 +14,7 @@
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<job id="ioSampleJob">
<step name="step1">
<step id="step1">
<tasklet reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="2"/>
</step>
</job>

View File

@@ -14,7 +14,7 @@
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<batch:job id="ioSampleJob">
<batch:step name="step1">
<batch:step id="step1">
<batch:tasklet reader="itemReader" writer="itemWriter" commit-interval="2"/>
</batch:step>
</batch:job>

View File

@@ -14,7 +14,7 @@
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<batch:job id="ioSampleJob">
<batch:step name="step1">
<batch:step id="step1">
<batch:tasklet reader="itemReader" writer="itemWriter" commit-interval="2"/>
</batch:step>
</batch:job>

View File

@@ -12,13 +12,13 @@
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<job id="loopFlowSample">
<step name="step1" next="step2">
<step id="step1" next="step2">
<tasklet reader="itemGenerator" writer="itemWriter" commit-interval="1"/>
<listeners>
<listener ref="resettingListener"/>
</listeners>
</step>
<step name="step2" next="limitDecision">
<step id="step2" next="limitDecision">
<tasklet reader="itemGenerator" writer="itemWriter"
commit-interval="1" allow-start-if-complete="true"/>
<listeners>

View File

@@ -11,7 +11,7 @@
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<job id="multilineJob">
<step name="step1">
<step id="step1">
<tasklet reader="reader" writer="writer" commit-interval="1">
<streams>
<stream ref="fileItemReader"/>

View File

@@ -13,7 +13,7 @@
<beans:import resource="multilineOrderIo.xml" />
<job id="multilineOrderJob">
<step name="step1">
<step id="step1">
<tasklet reader="reader" processor="processor" writer="fileItemWriter" commit-interval="">
<streams>
<stream ref="fileItemWriter"/>

View File

@@ -12,13 +12,13 @@
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<job id="parallelJob">
<step name="staging" next="loading">
<step id="staging" next="loading">
<tasklet reader="fileItemReader"
processor="validatingProcessor"
writer="stagingItemWriter"
commit-interval="2"/>
</step>
<step name="loading">
<step id="loading">
<tasklet reader="stagingReader"
processor="stagingProcessor"
writer="tradeWriter"

View File

@@ -12,7 +12,7 @@
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<job id="restartSampleJob" restartable="true">
<step name="step1">
<step id="step1">
<tasklet reader="itemReader" processor="processor" writer="tradeWriter" commit-interval="2">
<streams>
<stream ref="fileItemReader"/>

View File

@@ -12,7 +12,7 @@
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<job id="retrySample">
<step name="step1">
<step id="step1">
<tasklet reader="itemGenerator"
writer="itemWriter"
commit-interval="1"

View File

@@ -13,7 +13,7 @@
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<job id="skipJob" incrementer="incrementer">
<step name="step1">
<step id="step1">
<tasklet reader="fileItemReader" processor="tradeProcessor" writer="tradeWriter"
commit-interval="1" skip-limit="1">
</tasklet>
@@ -28,9 +28,9 @@
</listeners>
</step>
<step name="errorPrint1" next="step2" tasklet="errorLogTasklet"/>
<step id="errorPrint1" next="step2" tasklet="errorLogTasklet"/>
<step name="step2" next="skipCheckingDecision">
<step id="step2" next="skipCheckingDecision">
<tasklet reader="tradeSqlItemReader" processor="tradeProcessor" writer="itemTrackingWriter"
commit-interval="2" skip-limit="1">
<skippable-exception-classes>
@@ -49,7 +49,7 @@
<end on="*"/>
</decision>
<step name="errorPrint2" tasklet="errorLogTasklet"/>
<step id="errorPrint2" tasklet="errorLogTasklet"/>
</job>

View File

@@ -13,7 +13,7 @@
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<job id="tradeJob">
<step name="step1" next="step2">
<step id="step1" next="step2">
<tasklet reader="fileItemReader"
processor="validatingProcessor"
writer="tradeWriter"
@@ -24,10 +24,10 @@
</streams>
</tasklet>
</step>
<step name="step2" next="step3">
<step id="step2" next="step3">
<tasklet reader="tradeSqlItemReader" writer="customerWriter" commit-interval="1"/>
</step>
<step name="step3">
<step id="step3">
<tasklet reader="customerSqlItemReader" writer="creditWriter" commit-interval="1"/>
</step>
</job>

View File

@@ -12,11 +12,25 @@
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<beans:import resource="sample-steps.xml" />
<job id="sampleFlowJob">
<step name="step1" next="step2"/>
<step name="step2"/>
<step id="step1" ref="s1" next="step2"/>
<step id="step2" ref="s2"/>
</job>
<beans:bean id="s1" parent="taskletStep">
<beans:property name="tasklet">
<beans:bean class="org.springframework.batch.test.sample.SampleTasklet">
<beans:constructor-arg value="1" />
</beans:bean>
</beans:property>
</beans:bean>
<beans:bean id="s2" parent="taskletStep">
<beans:property name="tasklet">
<beans:bean class="org.springframework.batch.test.sample.SampleTasklet">
<beans:constructor-arg value="2" />
</beans:bean>
</beans:property>
</beans:bean>
</beans:beans>