Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2012 International Business Machines Corp.
   * 
   * See the NOTICE file distributed with this work for additional information
   * regarding copyright ownership. 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 com.ibm.jbatch.container.impl;
 
 import java.util.List;
 
 
 
 public class ExecutionTransitioner {
 
 	private final static String CLASSNAME = ExecutionTransitioner.class.getName();
 	private final static Logger logger = Logger.getLogger();
 
 	private long rootJobExecutionId;
 	
 	private List<LongstepExecIds;
 	
 	public ExecutionTransitioner(RuntimeJobExecution jobExecutionlong rootJobExecutionIdModelNavigator<?> modelNavigator) {
 		this. = jobExecution;
 		this. = rootJobExecutionId;
 		this. = modelNavigator;
 		this. = jobExecution.getJobContext(); 
 	}
 	
 	public ExecutionTransitioner(RuntimeJobExecution jobExecutionlong rootJobExecutionIdModelNavigator<JSLJobjobNavigatorBlockingQueue<PartitionDataWrapperanalyzerQueue) {
 		this. = jobExecution;
 		this. = rootJobExecutionId;
 		this. = jobNavigator;
 		this. = jobExecution.getJobContext(); 
 		this. = analyzerQueue;
 	}

Used for job and flow.

Returns:
 
 
 		final String methodName = "doExecutionLoop";
 		ExecutionElement previousExecutionElement = null;
 		IController previousElementController = null;
 		ExecutionElement currentExecutionElement = null;
 
 		try {
 		} catch (IllegalTransitionException e) {
 			String errorMsg = "Could not transition to first execution element within job.";
 			.warning(errorMsg);
 			throw new IllegalArgumentException(errorMsge);
 		}
 
 		.fine("First execution element = " + currentExecutionElement.getId());
 
 		while (true) {
 
				.fine(methodName + " Exiting execution loop as job is now in stopping state.");
			}
			if (!(currentExecutionElement instanceof Step) && !(currentExecutionElement instanceof Decision) && !(currentExecutionElement instanceof Flow) && !(currentExecutionElement instanceof Split)) {
				throw new IllegalStateException("Found unknown currentExecutionElement type = " + currentExecutionElement.getClass().getName());
			}
			.fine("Next execution element = " + currentExecutionElement.getId());
			IController elementController =null;
			String executionElementExitStatus = null;
			if (currentExecutionElement instanceof Decision) {
				Decision decision = (Decision)currentExecutionElement;
				elementController = ExecutionElementControllerFactory.getDecisionController(decision);			
				DecisionControllerImpl decisionController = (DecisionControllerImpl)elementController;
				decisionController.setPreviousStepExecutions(previousExecutionElementpreviousElementController);
else if (currentExecutionElement instanceof Flow) {
				Flow flow = (Flow)currentExecutionElement;
				elementController = ExecutionElementControllerFactory.getFlowController(flow);
else if (currentExecutionElement instanceof Split) {
				Split split = (Split)currentExecutionElement;
				elementController = ExecutionElementControllerFactory.getSplitController(split);
else if (currentExecutionElement instanceof Step) {
				Step step = (Step)currentExecutionElement;
				StepContextImpl stepContext = new StepContextImpl(step.getId());
				elementController = ExecutionElementControllerFactory.getStepController(stepstepContext);
			}
			// Supports stop processing
			 = elementController;
			if (currentExecutionElement instanceof Decision) {
				executionElementExitStatus = ((DecisionControllerImpl)elementController).execute();
else if (currentExecutionElement instanceof Flow) {
				JobOrFlowStatus flowStatus = ((FlowControllerImpl)elementController).execute(); // recursive
				JobOrFlowBatchStatus flowBatchStatus = flowStatus.getBatchStatus();
				// Exit status and restartOn should both be in the job context.
					.fine("Breaking out of loop with return status = " + flowBatchStatus.name());
					return flowStatus;
				}
				executionElementExitStatus = flowStatus.getExitStatus();
				.fine("Normal retrun from flow with exit status = " + executionElementExitStatus);
else if (currentExecutionElement instanceof Split) {
				SplitStatus splitStatus = ((SplitControllerImpl)elementController).execute();
				JobOrFlowBatchStatus determiningBatchStatus = splitStatus.getDeterminingFlowBatchStatus();
				if (!determiningBatchStatus.equals(.)) {
					.fine("Breaking out of loop with return status = " + determiningBatchStatus.name());
					return new JobOrFlowStatus(determiningBatchStatus);
				}
				// We could use a special "unset" value here but we just use 'null'.  Splits don't have
				// transition elements and will only transition via @next attribute.
				executionElementExitStatus = null;
else if (currentExecutionElement instanceof Step) {
				executionElementExitStatus = ((BaseStepControllerImpl)elementController).execute();
			}
			// Throw an exception on fail 
				.warning("Sub-execution returned its own BatchStatus of FAILED.  Deal with this by throwing exception to the next layer.");
				throw new BatchContainerRuntimeException("Sub-execution returned its own BatchStatus of FAILED.  Deal with this by throwing exception to the next layer.");
			}
			// set the execution element controller to null so we don't try to
			// call stop on it after the element has finished executing
			previousElementController = elementController;
			.fine("Done executing element=" + currentExecutionElement.getId() + ", exitStatus=" + executionElementExitStatus);
				.fine(methodName + " Exiting as job has been stopped");
			}
			Transition nextTransition = null;
			try {
				nextTransition = .getNextTransition(currentExecutionElementexecutionElementExitStatus);
				String errorMsg = "Problem transitioning to next execution element.";
				.warning(errorMsg);
				throw new IllegalArgumentException(errorMsge);
			}
			// Break out of loop since there's nothing left to execute.  
			// In this case we actually flow the exit status back as well, unlike in the termination because of
			// transition element case.
			if (nextTransition == null) {
				.fine(methodName + "No next execution element, and no transition element found either.  Looks like we're done and ready for COMPLETED state.");
				this. =  elementController.getLastRunStepExecutions();
				return new JobOrFlowStatus(.executionElementExitStatus);
			}
			// Loop back to the top.
			if (nextTransition.getNextExecutionElement() != null) {
				// hold on to the previous execution element for the decider
				// we need it because we need to inject the context of the
				// previous execution element into the decider
				previousExecutionElement = currentExecutionElement;
				currentExecutionElement = nextTransition.getNextExecutionElement();
else if (nextTransition.getTransitionElement() != null) {
				.finer(methodName + " , Breaking out of execution loop after processing terminating transition element.");
				return terminatingStatus;
else {
				throw new IllegalStateException("Not sure how we'd end up in this state...aborting rather than looping.");
			}
		}
	}
		.fine("Found terminating transition element (stop, end, or fail).");
		if (transitionElement instanceof Stop) {
			Stop stopElement = (Stop)transitionElement;
			String restartOn = stopElement.getRestart();
			String exitStatusFromJSL = stopElement.getExitStatus();
			.fine("Next transition element is a <stop> : " + transitionElement + " with restartOn=" + restartOn + 
					" , and JSL exit status = " + exitStatusFromJSL);
			if (exitStatusFromJSL != null) {
				.setExitStatus(exitStatusFromJSL);  
				retVal.setExitStatus(exitStatusFromJSL);  
			}
			if (restartOn != null) {
				retVal.setRestartOn(restartOn);				
			}
else if (transitionElement instanceof End) {
			End endElement = (End)transitionElement;
			String exitStatusFromJSL = endElement.getExitStatus();
			.fine("Next transition element is an <end> : " + transitionElement + 
					" with JSL exit status = " + exitStatusFromJSL);
			if (exitStatusFromJSL != null) {
				.setExitStatus(exitStatusFromJSL);  
				retVal.setExitStatus(exitStatusFromJSL);  
			}
else if (transitionElement instanceof Fail) {
			Fail failElement = (Fail)transitionElement;
			String exitStatusFromJSL = failElement.getExitStatus();
			.fine("Next transition element is a <fail> : " + transitionElement + 
					" with JSL exit status = " + exitStatusFromJSL);
			if (exitStatusFromJSL != null) {
				.setExitStatus(exitStatusFromJSL);  
				retVal.setExitStatus(exitStatusFromJSL);  
			}
else {
			throw new IllegalStateException("Not sure how we'd get here...aborting.");
		}
		return retVal;
	}
	}
    public List<LonggetStepExecIds() {
        return ;
    }
New to GrepCode? Check out our FAQ X