BATCH-1713: add explicit ExecutionContext re-hydration for step executions in JobExplorer

This commit is contained in:
Dave Syer
2011-03-18 14:55:51 +00:00
parent 90644cd1b0
commit ce209c6a55
3 changed files with 32 additions and 30 deletions

View File

@@ -21,6 +21,7 @@ import java.util.Set;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobInstance;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.item.ExecutionContext;
/**
* Entry point for browsing executions of running or historical jobs and steps.
@@ -45,7 +46,11 @@ public interface JobExplorer {
List<JobInstance> getJobInstances(String jobName, int start, int count);
/**
* Retrieve a {@link JobExecution} by its id.
* Retrieve a {@link JobExecution} by its id. The complete object graph for
* this execution should be returned (unless otherwise indicated) including
* the parent {@link JobInstance} and associated {@link ExecutionContext}
* and {@link StepExecution} instances (also including their execution
* contexts).
*
* @param executionId the job execution id
* @return the {@link JobExecution} with this id, or null if not found
@@ -54,11 +59,15 @@ public interface JobExplorer {
/**
* Retrieve a {@link StepExecution} by its id and parent
* {@link JobExecution} id.
* {@link JobExecution} id. The execution context for the step should be
* available in the result, and the parent job execution should have its
* primitive properties, but may not contain the job instance information.
*
* @param jobExecutionId the parent job execution id
* @param stepExecutionId the step execution id
* @return the {@link StepExecution} with this id, or null if not found
*
* @see #getJobExecution(Long)
*/
StepExecution getStepExecution(Long jobExecutionId, Long stepExecutionId);

View File

@@ -57,9 +57,8 @@ public class SimpleJobExplorer implements JobExplorer {
SimpleJobExplorer() {
}
public SimpleJobExplorer(JobInstanceDao jobInstanceDao,
JobExecutionDao jobExecutionDao, StepExecutionDao stepExecutionDao,
ExecutionContextDao ecDao) {
public SimpleJobExplorer(JobInstanceDao jobInstanceDao, JobExecutionDao jobExecutionDao,
StepExecutionDao stepExecutionDao, ExecutionContextDao ecDao) {
super();
this.jobInstanceDao = jobInstanceDao;
this.jobExecutionDao = jobExecutionDao;
@@ -75,8 +74,7 @@ public class SimpleJobExplorer implements JobExplorer {
* org.springframework.batch.core.JobInstance)
*/
public List<JobExecution> getJobExecutions(JobInstance jobInstance) {
List<JobExecution> executions = jobExecutionDao
.findJobExecutions(jobInstance);
List<JobExecution> executions = jobExecutionDao.findJobExecutions(jobInstance);
for (JobExecution jobExecution : executions) {
getJobExecutionDependencies(jobExecution);
}
@@ -91,8 +89,7 @@ public class SimpleJobExplorer implements JobExplorer {
* (java.lang.String)
*/
public Set<JobExecution> findRunningJobExecutions(String jobName) {
Set<JobExecution> executions = jobExecutionDao
.findRunningJobExecutions(jobName);
Set<JobExecution> executions = jobExecutionDao.findRunningJobExecutions(jobName);
for (JobExecution jobExecution : executions) {
getJobExecutionDependencies(jobExecution);
}
@@ -110,12 +107,14 @@ public class SimpleJobExplorer implements JobExplorer {
if (executionId == null) {
return null;
}
JobExecution jobExecution = jobExecutionDao
.getJobExecution(executionId);
JobExecution jobExecution = jobExecutionDao.getJobExecution(executionId);
if (jobExecution == null) {
return null;
}
getJobExecutionDependencies(jobExecution);
for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
getStepExecutionDependencies(stepExecution);
}
return jobExecution;
}
@@ -127,12 +126,11 @@ public class SimpleJobExplorer implements JobExplorer {
* .lang.Long)
*/
public StepExecution getStepExecution(Long jobExecutionId, Long executionId) {
JobExecution jobExecution = getJobExecution(jobExecutionId);
JobExecution jobExecution = jobExecutionDao.getJobExecution(jobExecutionId);
if (jobExecution == null) {
return null;
}
StepExecution stepExecution = stepExecutionDao.getStepExecution(
jobExecution, executionId);
StepExecution stepExecution = stepExecutionDao.getStepExecution(jobExecution, executionId);
getStepExecutionDependencies(stepExecution);
return stepExecution;
}
@@ -155,12 +153,13 @@ public class SimpleJobExplorer implements JobExplorer {
* org.springframework.batch.core.explore.JobExplorer#getLastJobInstances
* (java.lang.String, int)
*/
public List<JobInstance> getJobInstances(String jobName, int start,
int count) {
public List<JobInstance> getJobInstances(String jobName, int start, int count) {
return jobInstanceDao.getJobInstances(jobName, start, count);
}
/* (non-Javadoc)
/*
* (non-Javadoc)
*
* @see org.springframework.batch.core.explore.JobExplorer#getJobNames()
*/
public List<String> getJobNames() {
@@ -176,15 +175,13 @@ public class SimpleJobExplorer implements JobExplorer {
JobInstance jobInstance = jobInstanceDao.getJobInstance(jobExecution);
stepExecutionDao.addStepExecutions(jobExecution);
jobExecution.setJobInstance(jobInstance);
jobExecution.setExecutionContext(ecDao
.getExecutionContext(jobExecution));
jobExecution.setExecutionContext(ecDao.getExecutionContext(jobExecution));
}
private void getStepExecutionDependencies(StepExecution stepExecution) {
if (stepExecution != null) {
stepExecution.setExecutionContext(ecDao
.getExecutionContext(stepExecution));
stepExecution.setExecutionContext(ecDao.getExecutionContext(stepExecution));
}
}

View File

@@ -59,7 +59,7 @@ public class SimpleJobExplorerTests extends TestCase {
private ExecutionContextDao ecDao;
private JobExecution jobExecution = new JobExecution(jobInstance, 123L);
private JobExecution jobExecution = new JobExecution(jobInstance, 1234L);
public void setUp() throws Exception {
@@ -95,13 +95,11 @@ public class SimpleJobExplorerTests extends TestCase {
@Test
public void testGetStepExecution() throws Exception {
expect(jobExecutionDao.getJobExecution(123L)).andReturn(jobExecution);
expect(jobExecutionDao.getJobExecution(jobExecution.getId())).andReturn(jobExecution);
StepExecution stepExecution = jobExecution.createStepExecution("foo");
expect(stepExecutionDao.getStepExecution(jobExecution, 123L))
.andReturn(stepExecution);
expect(ecDao.getExecutionContext(jobExecution)).andReturn(null);
expect(ecDao.getExecutionContext(stepExecution)).andReturn(null);
stepExecutionDao.addStepExecutions(jobExecution);
expectLastCall();
replay(jobExecutionDao, stepExecutionDao, ecDao);
jobExplorer.getStepExecution(jobExecution.getId(), 123L);
@@ -110,10 +108,8 @@ public class SimpleJobExplorerTests extends TestCase {
@Test
public void testGetStepExecutionMissing() throws Exception {
expect(jobExecutionDao.getJobExecution(123L)).andReturn(jobExecution);
stepExecutionDao.addStepExecutions(jobExecution);
expect(jobExecutionDao.getJobExecution(jobExecution.getId())).andReturn(jobExecution);
expectLastCall();
expect(ecDao.getExecutionContext(jobExecution)).andReturn(null);
expect(stepExecutionDao.getStepExecution(jobExecution, 123L))
.andReturn(null);
replay(jobExecutionDao, stepExecutionDao, ecDao);
@@ -123,7 +119,7 @@ public class SimpleJobExplorerTests extends TestCase {
@Test
public void testGetStepExecutionMissingJobExecution() throws Exception {
expect(jobExecutionDao.getJobExecution(123L)).andReturn(null);
expect(jobExecutionDao.getJobExecution(jobExecution.getId())).andReturn(null);
replay(jobExecutionDao, stepExecutionDao, ecDao);
assertNull(jobExplorer.getStepExecution(jobExecution.getId(), 123L));
verify(jobExecutionDao, stepExecutionDao, ecDao);