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;
 	
 	// 'volatile' since it receives stop on separate thread.
 
 	
 	
 	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";
 		
 		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 = " + .getId());
		while (true) {
				.fine(methodName + " Exiting execution loop as job is now in stopping state.");
			}
			 = currentElementController;
			ExecutionStatus status = currentElementController.execute();
			// Nothing special for decision or step except to get exit status.  For flow and split we want to bubble up though.
			if (( instanceof Split) || ( instanceof Flow)) {
				// Exit status and restartOn should both be in the job context.
					.fine("Breaking out of loop with return status = " + status.getExtendedBatchStatus().name());
					return status;
				}
			// Seems like this should only happen if an Error is thrown at the step level, since normally a step-level
			// exception is caught and the fact that it was thrown capture in the ExecutionStatus
				String errorMsg = "Sub-execution returned its own BatchStatus of FAILED.  Deal with this by throwing exception to the next layer.";
				.warning(errorMsg);
				throw new BatchContainerRuntimeException(errorMsg);
			}
			// set the execution element controller to null so we don't try to call stop on it after the element has finished executing
			.fine("Done executing element=" + .getId() + ", exitStatus=" + status.getExitStatus());
				.fine(methodName + " Exiting as job has been stopped");
			}
			Transition nextTransition = null;
			try {
				String errorMsg = "Problem transitioning to next execution element.";
				.warning(errorMsg);
				throw new BatchContainerRuntimeException(errorMsge);
			//
			// We will find ourselves in one of four states now.  
			// 
			// 1. Finished transitioning after a normal execution, but nothing to do 'next'.
			// 2. We just executed a step which through an exception, but didn't match a transition element.
			// 3. We are going to 'next' to another execution element (and jump back to the top of this '
			//    'while'-loop.
			// 4. We matched a terminating transition element (<end>, <stop> or <fail).
			//
			// 1.
			if (nextTransition.isFinishedTransitioning()) {
				.fine(methodName + "No next execution element, and no transition element found either.  Looks like we're done and ready for COMPLETED state.");
				this. =  currentElementController.getLastRunStepExecutions();
				// Consider just passing the last 'status' back, but let's unwrap the exit status and pass a new NORMAL_COMPLETION
				// status back instead.
			// 2.
else if (nextTransition.noTransitionElementMatchedAfterException()) {
			// 3.
else 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
				 = currentElementController;
			// 4.
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.");
			}
		}
	}
		IExecutionElementController elementController =null;
		if ( instanceof Decision) {
			elementController = ExecutionElementControllerFactory.getDecisionController(decision);			
			DecisionControllerImpl decisionController = (DecisionControllerImpl)elementController;
else if ( instanceof Flow) {
			elementController = ExecutionElementControllerFactory.getFlowController(flow);
else if ( instanceof Split) {
			elementController = ExecutionElementControllerFactory.getSplitController(split);
else if ( instanceof Step) {
			StepContextImpl stepContext = new StepContextImpl(step.getId());
			elementController = ExecutionElementControllerFactory.getStepController(stepstepContext);
		}
		.fine("Next execution element controller = " + elementController);
		return elementController;
	}
		.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