@RequestMapping(value = "/{executionId}", method = RequestMethod.GET)
	@ResponseStatus(HttpStatus.OK)
	public JobExecutionInfoResource getJobExecutionInfo(@PathVariable long executionId) {

		final JobExecution jobExecution;

		try {
			jobExecution = jobService.getJobExecution(executionId);
		}
		catch (org.springframework.batch.core.launch.NoSuchJobExecutionException e) {
			throw new NoSuchJobExecutionException(executionId);
		}

		final Set<String> restartableJobs = new HashSet<String>(jobLocator.getAllRestartableJobs());
		final Set<String> deployedJobs = new HashSet<String>(jobLocator.getJobNames());
		final Set<String> jobDefinitionNames = new HashSet<String>(getJobDefinitionNames());

		final JobExecutionInfoResource jobExecutionInfoResource = getJobExecutionInfoResource(jobExecution,
				restartableJobs, deployedJobs, jobDefinitionNames);

		for (JobExecution childJobExecution : jobService.getChildJobExecutions(jobExecution.getId())) {
			jobExecutionInfoResource.setComposedJob(true);
			stepExecutionDao.addStepExecutions(childJobExecution);
			final JobExecutionInfoResource childJobExecutionInfoResource = getJobExecutionInfoResource(
					childJobExecution,
					restartableJobs, deployedJobs, jobDefinitionNames);
			boolean isComposed = jobService.isComposedJobExecution(childJobExecution.getId());
			childJobExecutionInfoResource.setComposedJob(isComposed);

			jobExecutionInfoResource.getChildJobExecutions().add(childJobExecutionInfoResource);
		}

		return jobExecutionInfoResource;
	}
@param executionId Id of the {@link JobExecution}
@return JobExecutionInfo for the given job name
@throws NoSuchJobExecutionException Thrown if the {@link JobExecution} does not exist
spring-xd-dirt/src/main/java/org/springframework/xd/dirt/rest/BatchJobExecutionsController.java