BATCH-2089: Added ability to remap ExitStatus
This commit is contained in:
committed by
Chris Schaefer
parent
10e58baf80
commit
fba258c8e5
@@ -35,6 +35,7 @@ import org.springframework.batch.core.JobInterruptedException;
|
||||
import org.springframework.batch.core.JobParameters;
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.StepExecution;
|
||||
import org.springframework.batch.core.job.flow.support.DefaultStateTransitionComparator;
|
||||
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.DecisionState;
|
||||
@@ -49,6 +50,7 @@ import org.springframework.batch.core.step.StepSupport;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
* @author Michael Minella
|
||||
*
|
||||
*/
|
||||
public class FlowJobTests {
|
||||
@@ -422,6 +424,7 @@ public class FlowJobTests {
|
||||
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.FAILED, "end2")));
|
||||
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end3")));
|
||||
flow.setStateTransitions(transitions);
|
||||
flow.setStateTransitionComparator(new DefaultStateTransitionComparator());
|
||||
job.setFlow(flow);
|
||||
job.afterPropertiesSet();
|
||||
job.doExecute(jobExecution);
|
||||
@@ -473,6 +476,7 @@ public class FlowJobTests {
|
||||
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.FAILED, "end2")));
|
||||
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end3")));
|
||||
flow.setStateTransitions(transitions);
|
||||
flow.setStateTransitionComparator(new DefaultStateTransitionComparator());
|
||||
|
||||
job.setFlow(flow);
|
||||
job.doExecute(jobExecution);
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright 2013 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.job.flow.support;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.batch.core.job.flow.State;
|
||||
import org.springframework.batch.core.job.flow.StateSupport;
|
||||
|
||||
public class DefaultStateTransitionComparatorTests {
|
||||
|
||||
private State state = new StateSupport("state1");
|
||||
private Comparator<StateTransition> comparator;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
comparator = new DefaultStateTransitionComparator();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingEqual() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start");
|
||||
assertEquals(0, comparator.compare(transition, transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingMoreGeneral() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start");
|
||||
assertEquals(1, comparator.compare(transition, other));
|
||||
assertEquals(-1, comparator.compare(other, transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingMostGeneral() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "*", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start");
|
||||
assertEquals(1, comparator.compare(transition, other));
|
||||
assertEquals(-1, comparator.compare(other, transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSubstringAndWildcard() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CONTIN*", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start");
|
||||
assertEquals(1, comparator.compare(transition, other));
|
||||
assertEquals(-1, comparator.compare(other, transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingMostToNextGeneral() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "*", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "C?", "start");
|
||||
assertEquals(1, comparator.compare(transition, other));
|
||||
assertEquals(-1, comparator.compare(other, transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingAdjacent() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CON*", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "CON?", "start");
|
||||
assertEquals(1, comparator.compare(transition, other));
|
||||
assertEquals(-1, comparator.compare(other, transition));
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
* Copyright 2006-2013 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.
|
||||
@@ -36,7 +36,8 @@ import org.springframework.batch.core.job.flow.StateSupport;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
* @author Michael Minella
|
||||
*
|
||||
*/
|
||||
public class SimpleFlowTests {
|
||||
|
||||
@@ -177,7 +178,8 @@ public class SimpleFlowTests {
|
||||
flow.setStateTransitions(collect(StateTransition.createStateTransition(new StubState("step1"), "step2"),
|
||||
StateTransition.createStateTransition(new StubState("step1"), ExitStatus.COMPLETED.getExitCode(), "step3"),
|
||||
StateTransition.createEndStateTransition(new StubState("step2")), StateTransition
|
||||
.createEndStateTransition(new StubState("step3"))));
|
||||
.createEndStateTransition(new StubState("step3"))));
|
||||
flow.setStateTransitionComparator(new DefaultStateTransitionComparator());
|
||||
flow.afterPropertiesSet();
|
||||
FlowExecution execution = flow.start(executor);
|
||||
assertEquals(FlowExecutionStatus.COMPLETED, execution.getStatus());
|
||||
@@ -224,7 +226,7 @@ public class SimpleFlowTests {
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*
|
||||
*/
|
||||
private static class StubState extends StateSupport {
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
* Copyright 2006-2013 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.
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package org.springframework.batch.core.job.flow.support;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@@ -25,12 +24,13 @@ import org.springframework.batch.core.job.flow.StateSupport;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
* @author Michael Minella
|
||||
*
|
||||
*/
|
||||
public class StateTransitionTests {
|
||||
|
||||
State state = new StateSupport("state1");
|
||||
|
||||
|
||||
@Test
|
||||
public void testIsEnd() {
|
||||
StateTransition transition = StateTransition.createEndStateTransition(state, "");
|
||||
@@ -74,52 +74,6 @@ public class StateTransitionTests {
|
||||
assertTrue(transition.matches("CONTINUABLE"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingEqual() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start");
|
||||
assertEquals(0, transition.compareTo(transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingMoreGeneral() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start");
|
||||
assertEquals(1, transition.compareTo(other));
|
||||
assertEquals(-1, other.compareTo(transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingMostGeneral() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "*", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start");
|
||||
assertEquals(1, transition.compareTo(other));
|
||||
assertEquals(-1, other.compareTo(transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSubstringAndWildcard() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CONTIN*", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "CONTINUABLE", "start");
|
||||
assertEquals(1, transition.compareTo(other));
|
||||
assertEquals(-1, other.compareTo(transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingMostToNextGeneral() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "*", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "C?", "start");
|
||||
assertEquals(1, transition.compareTo(other));
|
||||
assertEquals(-1, other.compareTo(transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOrderingAdjacent() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CON*", "start");
|
||||
StateTransition other = StateTransition.createStateTransition(state, "CON?", "start");
|
||||
assertEquals(1, transition.compareTo(other));
|
||||
assertEquals(-1, other.compareTo(transition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToString() {
|
||||
StateTransition transition = StateTransition.createStateTransition(state, "CONTIN???LE", "start");
|
||||
|
||||
@@ -25,6 +25,8 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.batch.api.Decider;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.batch.core.BatchStatus;
|
||||
@@ -59,7 +61,7 @@ import org.springframework.batch.core.step.StepSupport;
|
||||
*/
|
||||
public class JsrFlowJobTests {
|
||||
|
||||
private JsrFlowJob job = new JsrFlowJob();
|
||||
private JsrFlowJob job;
|
||||
|
||||
private JobExecution jobExecution;
|
||||
|
||||
@@ -71,6 +73,7 @@ public class JsrFlowJobTests {
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
job = new JsrFlowJob();
|
||||
MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean();
|
||||
factory.afterPropertiesSet();
|
||||
jobExecutionDao = factory.getJobExecutionDao();
|
||||
@@ -431,7 +434,7 @@ public class JsrFlowJobTests {
|
||||
job.setFlow(flow);
|
||||
job.afterPropertiesSet();
|
||||
job.doExecute(jobExecution);
|
||||
StepExecution stepExecution = getStepExecution(jobExecution, "step3");
|
||||
StepExecution stepExecution = getStepExecution(jobExecution, "step2");
|
||||
assertEquals(ExitStatus.COMPLETED, stepExecution.getExitStatus());
|
||||
assertEquals(2, jobExecution.getStepExecutions().size());
|
||||
}
|
||||
@@ -455,19 +458,21 @@ public class JsrFlowJobTests {
|
||||
public void testDecisionFlow() throws Throwable {
|
||||
|
||||
SimpleFlow flow = new SimpleFlow("job");
|
||||
JobExecutionDecider decider = new JobExecutionDecider() {
|
||||
Decider decider = new Decider() {
|
||||
|
||||
@Override
|
||||
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
|
||||
assertNotNull(stepExecution);
|
||||
return new FlowExecutionStatus("SWITCH");
|
||||
public String decide(javax.batch.runtime.StepExecution[] executions)
|
||||
throws Exception {
|
||||
assertNotNull(executions);
|
||||
return "SWITCH";
|
||||
}
|
||||
};
|
||||
|
||||
List<StateTransition> transitions = new ArrayList<StateTransition>();
|
||||
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "decision"));
|
||||
DecisionState decision = new DecisionState(decider, "decision");
|
||||
transitions.add(StateTransition.createStateTransition(decision, "step2"));
|
||||
StepState decision = new StepState(new StubDecisionStep("decision", decider));
|
||||
transitions.add(StateTransition.createStateTransition(decision, "SWITCH", "step3"));
|
||||
transitions.add(StateTransition.createStateTransition(decision, "step2"));
|
||||
StepState step2 = new StepState(new StubStep("step2"));
|
||||
transitions.add(StateTransition.createStateTransition(step2, ExitStatus.COMPLETED.getExitCode(), "end0"));
|
||||
transitions.add(StateTransition.createStateTransition(step2, ExitStatus.FAILED.getExitCode(), "end1"));
|
||||
@@ -482,13 +487,14 @@ public class JsrFlowJobTests {
|
||||
|
||||
job.setFlow(flow);
|
||||
job.doExecute(jobExecution);
|
||||
|
||||
StepExecution stepExecution = getStepExecution(jobExecution, "step3");
|
||||
if (!jobExecution.getAllFailureExceptions().isEmpty()) {
|
||||
throw jobExecution.getAllFailureExceptions().get(0);
|
||||
}
|
||||
|
||||
assertEquals(BatchStatus.COMPLETED, stepExecution.getStatus());
|
||||
assertEquals(2, jobExecution.getStepExecutions().size());
|
||||
assertEquals(3, jobExecution.getStepExecutions().size());
|
||||
|
||||
}
|
||||
|
||||
@@ -672,7 +678,6 @@ public class JsrFlowJobTests {
|
||||
assertEquals("[step1, step2]", names.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
@@ -692,6 +697,32 @@ public class JsrFlowJobTests {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @author Michael Minella
|
||||
*
|
||||
*/
|
||||
private class StubDecisionStep extends StepSupport {
|
||||
|
||||
private Decider decider;
|
||||
|
||||
private StubDecisionStep(String name, Decider decider) {
|
||||
super(name);
|
||||
this.decider = decider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(StepExecution stepExecution) throws JobInterruptedException {
|
||||
stepExecution.setStatus(BatchStatus.COMPLETED);
|
||||
try {
|
||||
stepExecution.setExitStatus(new ExitStatus(decider.decide(new javax.batch.runtime.StepExecution [] {new org.springframework.batch.core.jsr.StepExecution(stepExecution)})));
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
jobRepository.update(stepExecution);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param jobExecution
|
||||
* @param stepName
|
||||
|
||||
Reference in New Issue
Block a user