From fa1ddbf2ea1531bcd8a32237d621a1dd404184c5 Mon Sep 17 00:00:00 2001 From: dsyer Date: Mon, 16 Nov 2009 08:46:56 +0000 Subject: [PATCH] RESOLVED - issue BATCH-1439: Make step names unique within a job --- spring-batch-core/pom.xml | 1 + .../configuration/xml/AbstractFlowParser.java | 19 +- .../configuration/xml/FlowElementParser.java | 11 +- .../configuration/xml/InlineFlowParser.java | 17 +- .../xml/SimpleFlowFactoryBean.java | 179 ++++++++++++++++++ .../core/configuration/xml/SplitParser.java | 14 +- .../configuration/xml/TopLevelFlowParser.java | 4 +- .../job/flow/support/StateTransition.java | 20 +- .../xml/BranchStepJobParserTests.java | 4 +- .../xml/DefaultFailureJobParserTests.java | 8 +- .../xml/DefaultSuccessJobParserTests.java | 8 +- ...TransitionDefaultStatusJobParserTests.java | 4 +- .../xml/EndTransitionJobParserTests.java | 8 +- ...TransitionDefaultStatusJobParserTests.java | 4 +- .../xml/FailTransitionJobParserTests.java | 10 +- .../configuration/xml/FlowJobParserTests.java | 27 ++- .../xml/JobParserExceptionTests.java | 51 +++++ .../configuration/xml/JobParserTests.java | 39 ---- .../xml/NextAttributeJobParserTests.java | 12 +- ...fferentResultsFailFirstJobParserTests.java | 8 +- ...ferentResultsFailSecondJobParserTests.java | 12 +- .../xml/SplitInterruptedJobParserTests.java | 4 +- .../xml/StepWithSimpleTaskJobParserTests.java | 10 +- .../StopAndRestartFailedJobParserTests.java | 8 +- .../xml/StopAndRestartJobParserTests.java | 8 +- .../xml/StopCustomStatusJobParserTests.java | 8 +- .../xml/StopIncompleteJobParserTests.java | 8 +- .../configuration/xml/StopJobParserTests.java | 8 +- ...pRestartOnCompletedStepJobParserTests.java | 6 +- ...StopRestartOnFailedStepJobParserTests.java | 6 +- 30 files changed, 375 insertions(+), 151 deletions(-) create mode 100644 spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SimpleFlowFactoryBean.java create mode 100644 spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/JobParserExceptionTests.java diff --git a/spring-batch-core/pom.xml b/spring-batch-core/pom.xml index e87696d4d..0314d3ed2 100644 --- a/spring-batch-core/pom.xml +++ b/spring-batch-core/pom.xml @@ -5,6 +5,7 @@ jar Core Core domain for batch processing, expressing a domain of Jobs, Steps, Chunks, etc. + http://static.springframework.org/spring-batch/${project.artifactId} org.springframework.batch spring-batch-parent diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractFlowParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractFlowParser.java index 58a09109c..2823dddc5 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractFlowParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractFlowParser.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.Set; import org.springframework.batch.core.job.flow.FlowExecutionStatus; -import org.springframework.batch.core.job.flow.support.SimpleFlow; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; @@ -81,20 +80,8 @@ public abstract class AbstractFlowParser extends AbstractSingleBeanDefinitionPar // For generating unique state names for end transitions private static int endCounter = 0; - private String flowName; - private String jobFactoryRef; - /** - * Convenience method for subclasses to set up the flow name for error - * reporting. - * - * @param flowName - */ - protected void setFlowName(String flowName) { - this.flowName = flowName; - } - /** * Convenience method for subclasses to set the job factory reference if it * is available (null is fine, but the quality of error reports is better if @@ -112,8 +99,8 @@ public abstract class AbstractFlowParser extends AbstractSingleBeanDefinitionPar * @see AbstractSingleBeanDefinitionParser#getBeanClass(Element) */ @Override - protected Class getBeanClass(Element element) { - return SimpleFlow.class; + protected Class getBeanClass(Element element) { + return SimpleFlowFactoryBean.class; } /** @@ -166,6 +153,7 @@ public abstract class AbstractFlowParser extends AbstractSingleBeanDefinitionPar } } + String flowName = (String) builder.getRawBeanDefinition().getAttribute("flowName"); if (!stepExists && !StringUtils.hasText(element.getAttribute("parent"))) { parserContext.getReaderContext().error("The flow [" + flowName + "] must contain at least one step", element); @@ -180,7 +168,6 @@ public abstract class AbstractFlowParser extends AbstractSingleBeanDefinitionPar } } - builder.addConstructorArgValue(flowName); ManagedList managedList = new ManagedList(); @SuppressWarnings( { "unchecked", "unused" }) boolean dummy = managedList.addAll(stateTransitions); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowElementParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowElementParser.java index cfa0be742..8a23b641f 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowElementParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowElementParser.java @@ -17,9 +17,11 @@ package org.springframework.batch.core.configuration.xml; import java.util.Collection; +import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.beans.factory.xml.ParserContext; import org.w3c.dom.Element; @@ -49,7 +51,12 @@ public class FlowElementParser { BeanDefinitionBuilder stateBuilder = BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.job.flow.support.state.FlowState"); - stateBuilder.addConstructorArgValue(new RuntimeBeanReference(refAttribute)); + + AbstractBeanDefinition flowDefinition = new GenericBeanDefinition(); + flowDefinition.setParentName(refAttribute); + MutablePropertyValues propertyValues = flowDefinition.getPropertyValues(); + propertyValues.addPropertyValue("name", idAttribute); + stateBuilder.addConstructorArgValue(flowDefinition); stateBuilder.addConstructorArgValue(idAttribute); return InlineFlowParser.getNextElements(parserContext, stateBuilder.getBeanDefinition(), element); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/InlineFlowParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/InlineFlowParser.java index 23f680e2e..49a88311c 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/InlineFlowParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/InlineFlowParser.java @@ -15,7 +15,6 @@ */ package org.springframework.batch.core.configuration.xml; -import org.springframework.batch.core.job.flow.support.SimpleFlow; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; @@ -27,6 +26,8 @@ import org.w3c.dom.Element; */ public class InlineFlowParser extends AbstractFlowParser { + private final String flowName; + /** * Construct a {@link InlineFlowParser} with the specified name and using the * provided job repository ref. @@ -36,21 +37,11 @@ public class InlineFlowParser extends AbstractFlowParser { * from the enclosing tag */ public InlineFlowParser(String flowName, String jobFactoryRef) { - setFlowName(flowName); + this.flowName = flowName; setJobFactoryRef(jobFactoryRef); } - /* - * (non-Javadoc) - * - * @see AbstractSingleBeanDefinitionParser#getBeanClass(Element) - */ - @Override - protected Class getBeanClass(Element element) { - return SimpleFlow.class; - } - /** * @param element the top level element containing a flow definition * @param parserContext the {@link ParserContext} @@ -58,6 +49,8 @@ public class InlineFlowParser extends AbstractFlowParser { @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + builder.getRawBeanDefinition().setAttribute("flowName", flowName); + builder.addPropertyValue("name", flowName); super.doParse(element, parserContext, builder); builder.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); parserContext.popAndRegisterContainingComponent(); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SimpleFlowFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SimpleFlowFactoryBean.java new file mode 100644 index 000000000..4f4a0daa4 --- /dev/null +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SimpleFlowFactoryBean.java @@ -0,0 +1,179 @@ +package org.springframework.batch.core.configuration.xml; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.batch.core.JobInterruptedException; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.StepExecution; +import org.springframework.batch.core.job.flow.FlowExecutionStatus; +import org.springframework.batch.core.job.flow.FlowExecutor; +import org.springframework.batch.core.job.flow.State; +import org.springframework.batch.core.job.flow.support.SimpleFlow; +import org.springframework.batch.core.job.flow.support.StateTransition; +import org.springframework.batch.core.job.flow.support.state.AbstractState; +import org.springframework.batch.core.job.flow.support.state.StepState; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.util.Assert; + +/** + * Convenience factory for SimpleFlow instances for use in XML namespace. It + * replaces the states in the input with proxies that have a unique name formed + * from the flow name and the original state name (unless the name is already in + * that form, in which case it is not modified). + * + * @author Dave Syer + * + */ +public class SimpleFlowFactoryBean implements FactoryBean, InitializingBean { + + private String name; + + private List stateTransitions; + + private String prefix; + + /** + * The name of the flow that is created by this factory. + * + * @param name the value of the name + */ + public void setName(String name) { + this.name = name; + this.prefix = name + "."; + } + + /** + * The raw state transitions for the flow. They will be transformed into + * proxies that have the same behaviour but unique names prefixed with the + * flow name. + * + * @param name the value of the name + */ + public void setStateTransitions(List stateTransitions) { + this.stateTransitions = stateTransitions; + } + + /** + * Check mandatory properties (name). + * + * @throws Exception + */ + public void afterPropertiesSet() throws Exception { + Assert.hasText(name, "The flow must have a name"); + } + + public Object getObject() throws Exception { + + SimpleFlow flow = new SimpleFlow(name); + + List updatedTransitions = new ArrayList(); + for (StateTransition stateTransition : stateTransitions) { + State state = getProxyState(stateTransition.getState()); + updatedTransitions.add(StateTransition.switchOriginAndDestination(stateTransition, state, getNext(stateTransition.getNext()))); + } + + flow.setStateTransitions(updatedTransitions); + flow.afterPropertiesSet(); + return flow; + + } + + private String getNext(String next) { + if (next == null) { + return null; + } + return (next.startsWith(this.prefix) ? "" : this.prefix) + next; + } + + /** + * Convenience method to get a state that proxies the input but with a + * different name, appropriate to this flow. If the state is a StepState + * then the step name is also changed. + * + * @param state + * @return + */ + private State getProxyState(State state) { + String oldName = state.getName(); + if (oldName.startsWith(prefix)) { + return state; + } + String stateName = prefix + oldName; + if (state instanceof StepState) { + Step step = ((StepState) state).getStep(); + return new StepState(stateName, new DelegateStep(step, stateName)); + } + return new DelegateState(stateName, state); + } + + public Class getObjectType() { + return SimpleFlow.class; + } + + public boolean isSingleton() { + return true; + } + + /** + * A State that proxies a delegate and changes its name but leaves its + * behaviour unchanged. + * + * @author Dave Syer + * + */ + private static class DelegateState extends AbstractState { + private final State state; + + private DelegateState(String name, State state) { + super(name); + this.state = state; + } + + public boolean isEndState() { + return state.isEndState(); + } + + @Override + public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { + return state.handle(executor); + } + } + + /** + * A Step that proxies a delegate and changes its name but leaves its + * behaviour unchanged. + * + * @author Dave Syer + * + */ + private static class DelegateStep implements Step { + + private final Step step; + + private final String name; + + private DelegateStep(Step step, String name) { + this.step = step; + this.name = name; + } + + public boolean isAllowStartIfComplete() { + return step.isAllowStartIfComplete(); + } + + public int getStartLimit() { + return step.getStartLimit(); + } + + public String getName() { + return name; + } + + public void execute(StepExecution stepExecution) throws JobInterruptedException { + step.execute(stepExecution); + } + } + +} diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SplitParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SplitParser.java index 499d9ff5c..1064e01f5 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SplitParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SplitParser.java @@ -18,9 +18,12 @@ package org.springframework.batch.core.configuration.xml; import java.util.Collection; import java.util.List; +import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.util.StringUtils; @@ -86,23 +89,28 @@ public class SplitParser { @SuppressWarnings("unchecked") Collection flows = new ManagedList(); int i = 0; + String prefix = idAttribute.startsWith(jobFactoryRef) ? idAttribute : jobFactoryRef+"."+idAttribute; for (Element nextElement : flowElements) { - InlineFlowParser flowParser = new InlineFlowParser(idAttribute + "#" + i, jobFactoryRef); String ref = nextElement.getAttribute("ref"); if (StringUtils.hasText(ref)) { if (nextElement.getElementsByTagName("*").getLength() > 0) { parserContext.getReaderContext().error("A in a must have ref= or nested , but not both.", nextElement); } - flows.add(new RuntimeBeanReference(ref)); + AbstractBeanDefinition flowDefinition = new GenericBeanDefinition(); + flowDefinition.setParentName(ref); + MutablePropertyValues propertyValues = flowDefinition.getPropertyValues(); + propertyValues.addPropertyValue("name", prefix + "." + i); + flows.add(flowDefinition); } else { + InlineFlowParser flowParser = new InlineFlowParser(prefix + "." + i, jobFactoryRef); flows.add(flowParser.parse(nextElement, parserContext)); } i++; } stateBuilder.addConstructorArgValue(flows); - stateBuilder.addConstructorArgValue(idAttribute); + stateBuilder.addConstructorArgValue(prefix); return InlineFlowParser.getNextElements(parserContext, stateBuilder.getBeanDefinition(), element); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TopLevelFlowParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TopLevelFlowParser.java index 68660e5e5..c77a13508 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TopLevelFlowParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TopLevelFlowParser.java @@ -33,7 +33,9 @@ public class TopLevelFlowParser extends AbstractFlowParser { */ @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - setFlowName(element.getAttribute(ID_ATTR)); + String flowName = element.getAttribute(ID_ATTR); + builder.getRawBeanDefinition().setAttribute("flowName", flowName); + builder.addPropertyValue("name", flowName); super.doParse(element, parserContext, builder); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java index 1805b2c64..1f97a7b8b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java @@ -64,6 +64,20 @@ public class StateTransition implements Comparable { return createStateTransition(state, pattern, null); } + /** + * Convenience method to switch the origin and destination of a transition, + * creating a new instance. + * + * @param stateTransition an existing state transition + * @param state the new state for the origin + * @param next the new name for the destination + * + * @return a {@link StateTransition} + */ + public static StateTransition switchOriginAndDestination(StateTransition stateTransition, State state, String next) { + return createStateTransition(state, stateTransition.pattern, next); + } + /** * Create a new state {@link StateTransition} specification with a wildcard * pattern that matches all outcomes. @@ -101,7 +115,7 @@ public class StateTransition implements Comparable { Assert.notNull(state, "A state is required for a StateTransition"); if (state.isEndState() && StringUtils.hasText(next)) { - throw new IllegalStateException("End state cannot have next: "+state); + throw new IllegalStateException("End state cannot have next: " + state); } this.next = next; @@ -182,8 +196,8 @@ public class StateTransition implements Comparable { */ @Override public String toString() { - return String.format("StateTransition: [state=%s, pattern=%s, next=%s]", state == null ? null : state.getName(), - pattern, next); + return String.format("StateTransition: [state=%s, pattern=%s, next=%s]", + state == null ? null : state.getName(), pattern, next); } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/BranchStepJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/BranchStepJobParserTests.java index 8f9c37684..8272a1bac 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/BranchStepJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/BranchStepJobParserTests.java @@ -67,7 +67,7 @@ public class BranchStepJobParserTests { for (StepExecution stepExecution : jobExecution.getStepExecutions()) { names.add(stepExecution.getStepName()); } - assertTrue(names.contains("s3")); - assertFalse(names.contains("s2")); + assertTrue(names.contains("job.s3")); + assertFalse(names.contains("job.s2")); } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultFailureJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultFailureJobParserTests.java index 822e0b739..8d1b029e4 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultFailureJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultFailureJobParserTests.java @@ -41,17 +41,17 @@ public class DefaultFailureJobParserTests extends AbstractJobParserTests { JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(2, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); - assertTrue(stepNamesList.contains("fail")); + assertTrue(stepNamesList.contains("job.s1")); + assertTrue(stepNamesList.contains("job.fail")); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.fail"); assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultSuccessJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultSuccessJobParserTests.java index f633ee7db..ad9c99372 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultSuccessJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DefaultSuccessJobParserTests.java @@ -41,17 +41,17 @@ public class DefaultSuccessJobParserTests extends AbstractJobParserTests { JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(2, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); - assertTrue(stepNamesList.contains("s2")); + assertTrue(stepNamesList.contains("job.s1")); + assertTrue(stepNamesList.contains("job.s2")); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "s2"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.s2"); assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionDefaultStatusJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionDefaultStatusJobParserTests.java index 6eab69b15..2e6d778b8 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionDefaultStatusJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionDefaultStatusJobParserTests.java @@ -41,12 +41,12 @@ public class EndTransitionDefaultStatusJobParserTests extends AbstractJobParserT JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(1, stepNamesList.size()); - assertTrue(stepNamesList.contains("fail")); + assertTrue(stepNamesList.contains("job.fail")); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.fail"); assertEquals(BatchStatus.FAILED, stepExecution1.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionJobParserTests.java index f46a2c90d..2fcb7f45b 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/EndTransitionJobParserTests.java @@ -46,17 +46,17 @@ public class EndTransitionJobParserTests extends AbstractJobParserTests { JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(2, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); - assertTrue(stepNamesList.contains("fail")); + assertTrue(stepNamesList.contains("job.s1")); + assertTrue(stepNamesList.contains("job.fail")); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals("EARLY TERMINATION", jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.fail"); assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionDefaultStatusJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionDefaultStatusJobParserTests.java index 0971c0517..22b4e54ea 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionDefaultStatusJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionDefaultStatusJobParserTests.java @@ -41,12 +41,12 @@ public class FailTransitionDefaultStatusJobParserTests extends AbstractJobParser JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(1, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); + assertTrue(stepNamesList.contains("job.s1")); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionJobParserTests.java index e74b7bdab..98dbcd69d 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FailTransitionJobParserTests.java @@ -44,18 +44,18 @@ public class FailTransitionJobParserTests extends AbstractJobParserTests { JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(2, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); - assertTrue(stepNamesList.contains("fail")); + assertTrue(stepNamesList.contains("job.s1")); + assertTrue(stepNamesList.contains("job.fail")); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); assertEquals("EARLY TERMINATION", jobExecution.getExitStatus() .getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.fail"); assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2 .getExitStatus().getExitCode()); @@ -67,7 +67,7 @@ public class FailTransitionJobParserTests extends AbstractJobParserTests { jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(1, stepNamesList.size()); - assertTrue(stepNamesList.contains("fail")); + assertTrue(stepNamesList.contains("job.fail")); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FlowJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FlowJobParserTests.java index afc45493c..a7a930c54 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FlowJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/FlowJobParserTests.java @@ -18,6 +18,9 @@ package org.springframework.batch.core.configuration.xml; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import java.util.ArrayList; +import java.util.List; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -25,6 +28,7 @@ import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; import org.springframework.beans.factory.annotation.Autowired; @@ -71,7 +75,9 @@ public class FlowJobParserTests { JobExecution jobExecution = jobRepository.createJobExecution(job1.getName(), new JobParameters()); job1.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); - assertEquals(4, jobExecution.getStepExecutions().size()); + List stepNames = getStepNames(jobExecution); + assertEquals(4, stepNames.size()); + assertEquals("[job1.s1, job1.flow.s2, job1.flow.s3, job1.s4]", stepNames.toString()); } @Test @@ -81,6 +87,9 @@ public class FlowJobParserTests { job2.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(3, jobExecution.getStepExecutions().size()); + List stepNames = getStepNames(jobExecution); + assertEquals(3, stepNames.size()); + assertEquals("[job2.flow.s2, job2.flow.s3, job2.s1]", stepNames.toString()); } @Test @@ -89,7 +98,9 @@ public class FlowJobParserTests { JobExecution jobExecution = jobRepository.createJobExecution(job3.getName(), new JobParameters()); job3.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); - assertEquals(2, jobExecution.getStepExecutions().size()); + List stepNames = getStepNames(jobExecution); + assertEquals(2, stepNames.size()); + assertEquals("[job3.flow.s2, job3.flow.s3]", stepNames.toString()); } @Test @@ -98,7 +109,17 @@ public class FlowJobParserTests { JobExecution jobExecution = jobRepository.createJobExecution(job4.getName(), new JobParameters()); job4.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); - assertEquals(4, jobExecution.getStepExecutions().size()); + List stepNames = getStepNames(jobExecution); + assertEquals(4, stepNames.size()); + assertEquals("[job4.split.0.s2, job4.split.0.s3, job4.split.1.s2, job4.split.1.s3]", stepNames.toString()); + } + + private List getStepNames(JobExecution jobExecution) { + List list = new ArrayList(); + for (StepExecution stepExecution : jobExecution.getStepExecutions()) { + list.add(stepExecution.getStepName()); + } + return list; } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/JobParserExceptionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/JobParserExceptionTests.java new file mode 100644 index 000000000..25600f80c --- /dev/null +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/JobParserExceptionTests.java @@ -0,0 +1,51 @@ +package org.springframework.batch.core.configuration.xml; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import org.junit.Test; +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; +import org.springframework.context.support.ClassPathXmlApplicationContext; + + +public class JobParserExceptionTests { + + @Test + public void testUnreachableStep() { + try { + new ClassPathXmlApplicationContext( + "org/springframework/batch/core/configuration/xml/JobParserUnreachableStepTests-context.xml"); + fail("Error expected"); + } + catch (BeanDefinitionParsingException e) { + assertTrue(e.getMessage().contains("The element [s2] is unreachable")); + } + } + + @Test + public void testUnreachableStepInFlow() { + try { + new ClassPathXmlApplicationContext( + "org/springframework/batch/core/configuration/xml/JobParserUnreachableStepInFlowTests-context.xml"); + fail("Error expected"); + } + catch (BeanDefinitionParsingException e) { + assertTrue(e.getMessage().contains("The element [s4] is unreachable")); + } + } + + @Test + public void testNextOutOfScope() { + try { + new ClassPathXmlApplicationContext( + "org/springframework/batch/core/configuration/xml/JobParserNextOutOfScopeTests-context.xml"); + fail("Error expected"); + } + catch (BeanCreationException e) { + String message = e.getMessage(); + assertTrue("Wrong message: "+message, message.matches(".*Missing state for \\[StateTransition: \\[state=.*s2, pattern=\\*, next=.*s3\\]\\]")); + } + } + +} diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/JobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/JobParserTests.java index 97a08ce94..6201818eb 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/JobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/JobParserTests.java @@ -17,7 +17,6 @@ package org.springframework.batch.core.configuration.xml; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Collection; @@ -33,8 +32,6 @@ import org.springframework.batch.core.job.DefaultJobParametersValidator; import org.springframework.batch.core.listener.JobExecutionListenerSupport; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.SimpleJobRepository; -import org.springframework.beans.factory.BeanCreationException; -import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -148,42 +145,6 @@ public class JobParserTests { return (JobRepository) jobRepository; } - @Test - public void testUnreachableStep() { - try { - new ClassPathXmlApplicationContext( - "org/springframework/batch/core/configuration/xml/JobParserUnreachableStepTests-context.xml"); - fail("Error expected"); - } - catch (BeanDefinitionParsingException e) { - assertTrue(e.getMessage().contains("The element [s2] is unreachable")); - } - } - - @Test - public void testUnreachableStepInFlow() { - try { - new ClassPathXmlApplicationContext( - "org/springframework/batch/core/configuration/xml/JobParserUnreachableStepInFlowTests-context.xml"); - fail("Error expected"); - } - catch (BeanDefinitionParsingException e) { - assertTrue(e.getMessage().contains("The element [s4] is unreachable")); - } - } - - @Test - public void testNextOutOfScope() { - try { - new ClassPathXmlApplicationContext( - "org/springframework/batch/core/configuration/xml/JobParserNextOutOfScopeTests-context.xml"); - fail("Error expected"); - } - catch (BeanCreationException e) { - assertTrue(e.getMessage().contains("Missing state for [StateTransition: [state=s2, pattern=*, next=s3]]")); - } - } - @Test public void testParametersValidator() { ApplicationContext ctx = jobParserParentAttributeTestsCtx; diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/NextAttributeJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/NextAttributeJobParserTests.java index 3da2b9d1d..f6b49aec2 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/NextAttributeJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/NextAttributeJobParserTests.java @@ -44,17 +44,17 @@ public class NextAttributeJobParserTests extends AbstractJobParserTests { JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(2, stepNamesList.size()); //s2 is not executed - assertTrue(stepNamesList.contains("s1")); - assertTrue(stepNamesList.contains("fail")); + assertTrue(stepNamesList.contains("job.s1")); + assertTrue(stepNamesList.contains("job.fail")); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); assertEquals("FAILED", jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.fail"); assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); @@ -65,12 +65,12 @@ public class NextAttributeJobParserTests extends AbstractJobParserTests { jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(1, stepNamesList.size()); //s1,s2 are not executed - assertTrue(stepNamesList.contains("fail")); + assertTrue(stepNamesList.contains("job.fail")); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); assertEquals("FAILED", jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution3 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution3 = getStepExecution(jobExecution, "job.fail"); assertEquals(BatchStatus.FAILED, stepExecution3.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution3.getExitStatus().getExitCode()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests.java index c1b18de63..888af29c1 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailFirstJobParserTests.java @@ -41,17 +41,17 @@ public class SplitDifferentResultsFailFirstJobParserTests extends AbstractJobPar JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(2, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); - assertTrue(stepNamesList.contains("fail")); + assertTrue("Wrong step names: "+stepNamesList, stepNamesList.contains("job.split1.1.s1")); + assertTrue(stepNamesList.contains("job.split1.0.fail")); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.split1.1.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.split1.0.fail"); assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests.java index e34f87238..632fab209 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitDifferentResultsFailSecondJobParserTests.java @@ -41,23 +41,23 @@ public class SplitDifferentResultsFailSecondJobParserTests extends AbstractJobPa JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals("Wrong step names: "+stepNamesList, 3, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); - assertTrue(stepNamesList.contains("fail")); - assertTrue(stepNamesList.contains("s3")); + assertTrue("Wrong step names: "+stepNamesList, stepNamesList.contains("job.split1.0.s1")); + assertTrue("Wrong step names: "+stepNamesList, stepNamesList.contains("job.split1.1.fail")); + assertTrue(stepNamesList.contains("job.s3")); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); // You can't suppress a FAILED exit status assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.split1.0.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.split1.1.fail"); assertEquals(BatchStatus.FAILED, stepExecution2.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution2.getExitStatus().getExitCode()); - StepExecution stepExecution3 = getStepExecution(jobExecution, "s3"); + StepExecution stepExecution3 = getStepExecution(jobExecution, "job.s3"); assertEquals(BatchStatus.COMPLETED, stepExecution3.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution3.getExitStatus()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitInterruptedJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitInterruptedJobParserTests.java index bb20ff2f2..f3f8a6199 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitInterruptedJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/SplitInterruptedJobParserTests.java @@ -52,9 +52,9 @@ public class SplitInterruptedJobParserTests extends AbstractJobParserTests { assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode()); - assertTrue(stepNamesList.contains("stop")); + assertTrue("Wrong step names: "+stepNamesList, stepNamesList.contains("job.split1.0.stop")); - StepExecution stepExecution = getStepExecution(jobExecution, "stop"); + StepExecution stepExecution = getStepExecution(jobExecution, "job.split1.0.stop"); assertEquals(BatchStatus.STOPPED, stepExecution.getStatus()); assertEquals(ExitStatus.STOPPED.getExitCode(), stepExecution.getExitStatus().getExitCode()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StepWithSimpleTaskJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StepWithSimpleTaskJobParserTests.java index fee5df4f7..6243bff40 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StepWithSimpleTaskJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StepWithSimpleTaskJobParserTests.java @@ -65,10 +65,10 @@ public class StepWithSimpleTaskJobParserTests { assertTrue(job instanceof FlowJob); JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), new JobParameters()); - TestTasklet t1 = assertTasklet(job, "step1", "t1"); - TestTasklet t2 = assertTasklet(job, "step2", "t2"); - TestTasklet t3 = assertTasklet(job, "step3", "t3"); - TestTasklet t4 = assertTasklet(job, "step4", "t4"); + TestTasklet t1 = assertTasklet(job, "job.step1", "t1"); + TestTasklet t2 = assertTasklet(job, "job.step2", "t2"); + TestTasklet t3 = assertTasklet(job, "job.step3", "t3"); + TestTasklet t4 = assertTasklet(job, "job.step4", "t4"); job.execute(jobExecution); @@ -83,7 +83,7 @@ public class StepWithSimpleTaskJobParserTests { } private TestTasklet assertTasklet(Job job, String stepName, String taskletName) { - Step step = ((FlowJob) job).getStep(stepName); + Step step = (Step) ReflectionTestUtils.getField(((FlowJob) job).getStep(stepName), "step"); assertTrue(step instanceof TaskletStep); Object tasklet = ReflectionTestUtils.getField(step, "tasklet"); assertTrue(tasklet instanceof TestTasklet); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopAndRestartFailedJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopAndRestartFailedJobParserTests.java index 4547664f0..2664a1644 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopAndRestartFailedJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopAndRestartFailedJobParserTests.java @@ -43,8 +43,8 @@ public class StopAndRestartFailedJobParserTests extends AbstractJobParserTests { // // First Launch // - JobExecution jobExecution = launchAndAssert("[s0, s1]"); - StepExecution stepExecution = getStepExecution(jobExecution, "s1"); + JobExecution jobExecution = launchAndAssert("[job.s0, job.s1]"); + StepExecution stepExecution = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.ABANDONED, stepExecution.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode()); @@ -52,8 +52,8 @@ public class StopAndRestartFailedJobParserTests extends AbstractJobParserTests { // Second Launch // stepNamesList.clear(); - jobExecution = launchAndAssert("[s0, s2]"); - stepExecution = getStepExecution(jobExecution, "s2"); + jobExecution = launchAndAssert("[job.s0, job.s2]"); + stepExecution = getStepExecution(jobExecution, "job.s2"); assertEquals(BatchStatus.COMPLETED, stepExecution.getStatus()); assertEquals(ExitStatus.COMPLETED.getExitCode(), stepExecution.getExitStatus().getExitCode()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopAndRestartJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopAndRestartJobParserTests.java index da1662dea..88317e29a 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopAndRestartJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopAndRestartJobParserTests.java @@ -44,12 +44,12 @@ public class StopAndRestartJobParserTests extends AbstractJobParserTests { JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(1, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); + assertTrue(stepNamesList.contains("job.s1")); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED.getExitCode(), stepExecution1.getExitStatus().getExitCode()); @@ -60,12 +60,12 @@ public class StopAndRestartJobParserTests extends AbstractJobParserTests { jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(1, stepNamesList.size()); // step1 is not executed - assertTrue(stepNamesList.contains("s2")); + assertTrue(stepNamesList.contains("job.s2")); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "s2"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.s2"); assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopCustomStatusJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopCustomStatusJobParserTests.java index 1f6172552..12c111609 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopCustomStatusJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopCustomStatusJobParserTests.java @@ -43,13 +43,13 @@ public class StopCustomStatusJobParserTests extends AbstractJobParserTests { // JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); - assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("stop")); + assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("job.stop")); assertEquals(1, stepNamesList.size()); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "stop"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.stop"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals("FOO", stepExecution1.getExitStatus().getExitCode()); @@ -59,13 +59,13 @@ public class StopCustomStatusJobParserTests extends AbstractJobParserTests { stepNamesList.clear(); jobExecution = createJobExecution(); job.execute(jobExecution); - assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("s2")); + assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("job.s2")); assertEquals(1, stepNamesList.size()); // step1 is not executed assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "s2"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.s2"); assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopIncompleteJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopIncompleteJobParserTests.java index 5a0fb046d..ba56f04c6 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopIncompleteJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopIncompleteJobParserTests.java @@ -43,13 +43,13 @@ public class StopIncompleteJobParserTests extends AbstractJobParserTests { // JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); - assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("fail")); + assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("job.fail")); assertEquals(1, stepNamesList.size()); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.fail"); assertEquals(BatchStatus.ABANDONED, stepExecution1.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode()); @@ -59,13 +59,13 @@ public class StopIncompleteJobParserTests extends AbstractJobParserTests { stepNamesList.clear(); jobExecution = createJobExecution(); job.execute(jobExecution); - assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("s2")); + assertTrue("Wrong steps executed: "+stepNamesList, stepNamesList.contains("job.s2")); assertEquals(1, stepNamesList.size()); // step1 is not executed assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "s2"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.s2"); assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java index bcbe30528..0d45b2e3b 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java @@ -46,12 +46,12 @@ public class StopJobParserTests extends AbstractJobParserTests { JobExecution jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(1, stepNamesList.size()); - assertTrue(stepNamesList.contains("s1")); + assertTrue(stepNamesList.contains("job.s1")); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution1.getExitStatus()); @@ -62,12 +62,12 @@ public class StopJobParserTests extends AbstractJobParserTests { jobExecution = createJobExecution(); job.execute(jobExecution); assertEquals(1, stepNamesList.size()); // step1 is not executed - assertTrue(stepNamesList.contains("s2")); + assertTrue(stepNamesList.contains("job.s2")); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); - StepExecution stepExecution2 = getStepExecution(jobExecution, "s2"); + StepExecution stepExecution2 = getStepExecution(jobExecution, "job.s2"); assertEquals(BatchStatus.COMPLETED, stepExecution2.getStatus()); assertEquals(ExitStatus.COMPLETED, stepExecution2.getExitStatus()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopRestartOnCompletedStepJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopRestartOnCompletedStepJobParserTests.java index a8b6a6ded..83175e54e 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopRestartOnCompletedStepJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopRestartOnCompletedStepJobParserTests.java @@ -43,13 +43,13 @@ public class StopRestartOnCompletedStepJobParserTests extends AbstractJobParserT // // First Launch // - launchAndAssert("[s1]"); + launchAndAssert("[job.s1]"); // // Second Launch // stepNamesList.clear(); - launchAndAssert("[s1]"); + launchAndAssert("[job.s1]"); } @@ -62,7 +62,7 @@ public class StopRestartOnCompletedStepJobParserTests extends AbstractJobParserT assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "s1"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.s1"); assertEquals(BatchStatus.COMPLETED, stepExecution1.getStatus()); assertEquals(ExitStatus.COMPLETED.getExitCode(), stepExecution1.getExitStatus().getExitCode()); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopRestartOnFailedStepJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopRestartOnFailedStepJobParserTests.java index 70fb3d694..e2b3695f6 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopRestartOnFailedStepJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopRestartOnFailedStepJobParserTests.java @@ -43,13 +43,13 @@ public class StopRestartOnFailedStepJobParserTests extends AbstractJobParserTest // // First Launch // - launchAndAssert("[s0, fail]"); + launchAndAssert("[job.s0, job.fail]"); // // Second Launch // stepNamesList.clear(); - launchAndAssert("[fail]"); + launchAndAssert("[job.fail]"); } @@ -62,7 +62,7 @@ public class StopRestartOnFailedStepJobParserTests extends AbstractJobParserTest assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(ExitStatus.STOPPED.getExitCode(), jobExecution.getExitStatus().getExitCode()); - StepExecution stepExecution1 = getStepExecution(jobExecution, "fail"); + StepExecution stepExecution1 = getStepExecution(jobExecution, "job.fail"); assertEquals(BatchStatus.FAILED, stepExecution1.getStatus()); assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution1.getExitStatus().getExitCode()); }