code: @Override
  	public List<BatchPartitionWorkUnit> buildOnRestartParallelPartitions(PartitionsBuilderConfig config) throws JobRestartException, JobExecutionAlreadyCompleteException, JobExecutionNotMostRecentException {
  
  		List<JSLJob> jobModels = config.getJobModels();
  		Properties[] partitionProperties = config.getPartitionProperties();
  
  		List<BatchPartitionWorkUnit> batchWorkUnits = new ArrayList<BatchPartitionWorkUnit>(jobModels.size());
  
  		//for now let always use a Properties array. We can add some more convenience methods later for null properties and what not
  
  		int instance = 0;
  		for (JSLJob parallelJob  : jobModels){
  
  			Properties partitionProps = (partitionProperties == null) ? null : partitionProperties[instance];    
  
  			try {
  				long execId = getMostRecentSubJobExecutionId(parallelJob);
  
  				RuntimeJobExecution jobExecution = null;
  				try {		
  					jobExecution = JobExecutionHelper.restartPartition(execId, parallelJob, partitionProps);
  					jobExecution.setPartitionInstance(instance);
  				} catch (NoSuchJobExecutionException e) {
  					String errorMsg = "Caught NoSuchJobExecutionException but this is an internal JobExecution so this shouldn't have happened: execId =" + execId;
  					logger.severe(errorMsg);
  					throw new IllegalStateException(errorMsg, e);
  				}
  
  				if (logger.isLoggable(Level.FINE)) {
  					logger.fine("JobExecution constructed: " + jobExecution);
  				}
  
  				BatchPartitionWorkUnit batchWork = new BatchPartitionWorkUnit(this, jobExecution, config);
  				registerCurrentInstanceAndExecution(jobExecution, batchWork.getController());
  
  				batchWorkUnits.add(batchWork);
  			} catch (JobExecutionAlreadyCompleteException e) {
  				logger.fine("This execution already completed: " + parallelJob.getId());
  			}
  
  			instance++;
  		}
  
  		return batchWorkUnits;
  	}
docs: /*
  There are some assumptions that all partition subjobs have associated DB entries