RESOLVED - issue BATCH-1311: SimpleJobExplorer should return null when a StepExecution cannot be found

This commit is contained in:
dsyer
2009-06-26 21:09:21 +00:00
parent e25e9b1ca8
commit 4b8ee536ca
5 changed files with 338 additions and 258 deletions

View File

@@ -45,7 +45,7 @@ public class SimpleJobExplorer implements JobExplorer {
private JobInstanceDao jobInstanceDao;
private JobExecutionDao jobExecutionDao;
private StepExecutionDao stepExecutionDao;
private ExecutionContextDao ecDao;
@@ -57,7 +57,9 @@ 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;
@@ -65,78 +67,118 @@ public class SimpleJobExplorer implements JobExplorer {
this.ecDao = ecDao;
}
/* (non-Javadoc)
* @see org.springframework.batch.core.explore.JobExplorer#findJobExecutions(org.springframework.batch.core.JobInstance)
/*
* (non-Javadoc)
*
* @see
* org.springframework.batch.core.explore.JobExplorer#findJobExecutions(
* org.springframework.batch.core.JobInstance)
*/
public List<JobExecution> getJobExecutions(JobInstance jobInstance) {
List<JobExecution> executions = jobExecutionDao.findJobExecutions(jobInstance);
for(JobExecution jobExecution:executions){
List<JobExecution> executions = jobExecutionDao
.findJobExecutions(jobInstance);
for (JobExecution jobExecution : executions) {
getJobExecutionDependencies(jobExecution);
}
return executions;
}
/* (non-Javadoc)
* @see org.springframework.batch.core.explore.JobExplorer#findRunningJobExecutions(java.lang.String)
/*
* (non-Javadoc)
*
* @see
* org.springframework.batch.core.explore.JobExplorer#findRunningJobExecutions
* (java.lang.String)
*/
public Set<JobExecution> findRunningJobExecutions(String jobName) {
Set<JobExecution> executions = jobExecutionDao.findRunningJobExecutions(jobName);
for(JobExecution jobExecution:executions){
Set<JobExecution> executions = jobExecutionDao
.findRunningJobExecutions(jobName);
for (JobExecution jobExecution : executions) {
getJobExecutionDependencies(jobExecution);
}
return executions;
}
/* (non-Javadoc)
* @see org.springframework.batch.core.explore.JobExplorer#getJobExecution(java.lang.Long)
/*
* (non-Javadoc)
*
* @see
* org.springframework.batch.core.explore.JobExplorer#getJobExecution(java
* .lang.Long)
*/
public JobExecution getJobExecution(Long executionId) {
JobExecution jobExecution = jobExecutionDao.getJobExecution(executionId);
if (jobExecution==null) {
if (executionId == null) {
return null;
}
JobExecution jobExecution = jobExecutionDao
.getJobExecution(executionId);
if (jobExecution == null) {
return null;
}
getJobExecutionDependencies(jobExecution);
return jobExecution;
}
/* (non-Javadoc)
* @see org.springframework.batch.core.explore.JobExplorer#getStepExecution(java.lang.Long)
/*
* (non-Javadoc)
*
* @see
* org.springframework.batch.core.explore.JobExplorer#getStepExecution(java
* .lang.Long)
*/
public StepExecution getStepExecution(Long jobExecutionId, Long executionId) {
StepExecution stepExecution = stepExecutionDao.getStepExecution(getJobExecution(jobExecutionId), executionId);
JobExecution jobExecution = getJobExecution(jobExecutionId);
if (jobExecution == null) {
return null;
}
StepExecution stepExecution = stepExecutionDao.getStepExecution(
jobExecution, executionId);
getStepExecutionDependencies(stepExecution);
return stepExecution;
}
/* (non-Javadoc)
* @see org.springframework.batch.core.explore.JobExplorer#getJobInstance(java.lang.Long)
/*
* (non-Javadoc)
*
* @see
* org.springframework.batch.core.explore.JobExplorer#getJobInstance(java
* .lang.Long)
*/
public JobInstance getJobInstance(Long instanceId) {
return jobInstanceDao.getJobInstance(instanceId);
}
/* (non-Javadoc)
* @see org.springframework.batch.core.explore.JobExplorer#getLastJobInstances(java.lang.String, int)
/*
* (non-Javadoc)
*
* @see
* 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);
}
/*
* Find all dependencies for a JobExecution, including JobInstance (which requires JobParameters)
* plus StepExecutions
* Find all dependencies for a JobExecution, including JobInstance (which
* requires JobParameters) plus StepExecutions
*/
private void getJobExecutionDependencies(JobExecution jobExecution){
private void getJobExecutionDependencies(JobExecution jobExecution) {
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) {
stepExecution.setExecutionContext(ecDao.getExecutionContext(stepExecution));
if (stepExecution != null) {
stepExecution.setExecutionContext(ecDao
.getExecutionContext(stepExecution));
}
}
}

View File

@@ -39,7 +39,7 @@ import org.springframework.batch.core.repository.dao.JobInstanceDao;
import org.springframework.batch.core.repository.dao.StepExecutionDao;
/**
* Test {@link SimpleJobExplorer}.
* Test {@link SimpleJobExplorer}.
*
* @author Dave Syer
*
@@ -49,13 +49,14 @@ public class SimpleJobExplorerTests extends TestCase {
private SimpleJobExplorer jobExplorer;
private JobExecutionDao jobExecutionDao;
private JobInstanceDao jobInstanceDao;
private StepExecutionDao stepExecutionDao;
private JobInstance jobInstance = new JobInstance(111L, new JobParameters(), "job");
private JobInstance jobInstance = new JobInstance(111L,
new JobParameters(), "job");
private ExecutionContextDao ecDao;
private JobExecution jobExecution = new JobExecution(jobInstance, 123L);
@@ -67,14 +68,16 @@ public class SimpleJobExplorerTests extends TestCase {
stepExecutionDao = createMock(StepExecutionDao.class);
ecDao = createMock(ExecutionContextDao.class);
jobExplorer = new SimpleJobExplorer(jobInstanceDao, jobExecutionDao, stepExecutionDao, ecDao);
jobExplorer = new SimpleJobExplorer(jobInstanceDao, jobExecutionDao,
stepExecutionDao, ecDao);
}
@Test
public void testGetJobExecution() throws Exception {
expect(jobExecutionDao.getJobExecution(123L)).andReturn(jobExecution);
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(jobInstance);
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(
jobInstance);
stepExecutionDao.addStepExecutions(jobExecution);
expectLastCall();
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
@@ -94,7 +97,8 @@ public class SimpleJobExplorerTests extends TestCase {
public void testGetStepExecution() throws Exception {
expect(jobExecutionDao.getJobExecution(123L)).andReturn(jobExecution);
StepExecution stepExecution = jobExecution.createStepExecution("foo");
expect(stepExecutionDao.getStepExecution(jobExecution, 123L)).andReturn(stepExecution);
expect(stepExecutionDao.getStepExecution(jobExecution, 123L))
.andReturn(stepExecution);
expect(ecDao.getExecutionContext(jobExecution)).andReturn(null);
expect(ecDao.getExecutionContext(stepExecution)).andReturn(null);
stepExecutionDao.addStepExecutions(jobExecution);
@@ -104,10 +108,33 @@ public class SimpleJobExplorerTests extends TestCase {
verify(jobExecutionDao, stepExecutionDao, ecDao);
}
@Test
public void testGetStepExecutionMissing() throws Exception {
expect(jobExecutionDao.getJobExecution(123L)).andReturn(jobExecution);
stepExecutionDao.addStepExecutions(jobExecution);
expectLastCall();
expect(ecDao.getExecutionContext(jobExecution)).andReturn(null);
expect(stepExecutionDao.getStepExecution(jobExecution, 123L))
.andReturn(null);
replay(jobExecutionDao, stepExecutionDao, ecDao);
assertNull(jobExplorer.getStepExecution(jobExecution.getId(), 123L));
verify(jobExecutionDao, stepExecutionDao, ecDao);
}
@Test
public void testGetStepExecutionMissingJobExecution() throws Exception {
expect(jobExecutionDao.getJobExecution(123L)).andReturn(null);
replay(jobExecutionDao, stepExecutionDao, ecDao);
assertNull(jobExplorer.getStepExecution(jobExecution.getId(), 123L));
verify(jobExecutionDao, stepExecutionDao, ecDao);
}
@Test
public void testFindRunningJobExecutions() throws Exception {
expect(jobExecutionDao.findRunningJobExecutions("job")).andReturn(Collections.singleton(jobExecution));
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(jobInstance);
expect(jobExecutionDao.findRunningJobExecutions("job")).andReturn(
Collections.singleton(jobExecution));
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(
jobInstance);
stepExecutionDao.addStepExecutions(jobExecution);
expectLastCall();
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
@@ -117,8 +144,10 @@ public class SimpleJobExplorerTests extends TestCase {
@Test
public void testFindJobExecutions() throws Exception {
expect(jobExecutionDao.findJobExecutions(jobInstance)).andReturn(Collections.singletonList(jobExecution));
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(jobInstance);
expect(jobExecutionDao.findJobExecutions(jobInstance)).andReturn(
Collections.singletonList(jobExecution));
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(
jobInstance);
stepExecutionDao.addStepExecutions(jobExecution);
expectLastCall();
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
@@ -138,7 +167,8 @@ public class SimpleJobExplorerTests extends TestCase {
@Test
public void testGetLastJobInstances() throws Exception {
jobInstanceDao.getJobInstances("foo", 0, 1);
EasyMock.expectLastCall().andReturn(Collections.singletonList(jobInstance));
EasyMock.expectLastCall().andReturn(
Collections.singletonList(jobInstance));
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
jobExplorer.getJobInstances("foo", 0, 1);
verify(jobExecutionDao, jobInstanceDao, stepExecutionDao);