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 SplitControllerImpl implements IExecutionElementController {
 
 	private final static String sourceClass = SplitControllerImpl.class.getName();
 	private final static Logger logger = Logger.getLogger();
 
 
 
 	private final ServicesManager servicesManager;
 	private final IBatchKernelService batchKernel;
 
 	final List<JSLJobsubJobs = new ArrayList<JSLJob>();
 
 	protected Split split;
 
 	public SplitControllerImpl(RuntimeJobContextJobExecutionBridge jobExecutionImplSplit split) {
 		this. = jobExecutionImpl;
 		this. = split;
 
 		 = ServicesManagerImpl.getInstance();
 
 	}
 
 	public void stop() { 
 
 		// It's possible we may try to stop a split before any
 		// sub steps have been started.
 
 		synchronized () {
 
 			if ( != null) {
 				for (BatchWorkUnit subJob : ) {
 					try {
 					} catch (Exception e) {
 						// TODO - Is this what we want to know.  
 						// Blow up if it happens to force the issue.
 						throw new IllegalStateException(e);
 					}
 				}
 			}
 		}
 
 	}
 
 		String sourceMethod = "execute";
 			.entering(sourceMethod);
		}
		List<Flowflows = this..getFlows();
		// Build all sub jobs from flows in split
		synchronized () {
			for (Flow flow : flows) {
				.add(PartitionedStepBuilder.buildSubJob(.getExecutionId(), .getJobContext(), this.flownull));
			}
			for (JSLJob job : ) {
				int count = .getJobInstanceCount(job.getId());
				if (count == 0) {
					.add(.buildNewBatchWorkUnit(jobnullnullcompletedWorkQueuerootJobExecution));
else if (count == 1) {
					.add(.buildRestartableBatchWorkUnit(jobnullnullcompletedWorkQueuerootJobExecution));
else {
					throw new IllegalStateException("There is an inconsistency somewhere in the internal subjob creation");
				}
			}
		}
		// Then start or restart all subjobs in parallel
			assert (count <= 1);
			if (count == 1) {
else if (count > 1) {
else {
				throw new IllegalStateException("There is an inconsistency somewhere in the internal subjob creation");
			}
		}
		//check the batch status of each subJob after it's done to see if it stopped or failed
		boolean someFlowFailed = false;
		boolean someFlowStopped = false;
		for (int i=0; i < .size(); i++) {
			BatchWorkUnit batchWork;
			try {
				batchWork = completedWorkQueue.take(); //wait for each thread to finish and then look at it's status
catch (InterruptedException e) {
			}
			if (batchStatus.equals(.)) {
					.fine("Subjob " + batchWork.getJobExecutionImpl().getExecutionId() + "ended with status '" + batchStatus + "'" );
				}
				someFlowFailed = true;
else if (batchStatus.equals(.)){
					.fine("Subjob " + batchWork.getJobExecutionImpl().getExecutionId() + "ended with status '" + batchStatus + "'" );
				}
				someFlowStopped = true;
			}
		}
		// Remember it's only an implementation detail that there even is an exit status, but maybe it will make our
		// code be more consistent?
		InternalExecutionElementStatus splitStatus = null;
		// First in order of precedence is to fail
		if (someFlowFailed) {
else if (someFlowStopped) {
else {
		}
			.finer("Exiting with: " + splitStatus);
		}
		return splitStatus;
	}
	public void setStepContext(StepContextImpl stepContext) {
		throw new BatchContainerRuntimeException("Incorrect usage: step context is not in scope within a flow.");
	}
	public void setAnalyzerQueue(BlockingQueue<PartitionDataWrapperanalyzerQueue) {
		// no-op
	}
	}
New to GrepCode? Check out our FAQ X