RESOLVED - issue BATCH-1311: SimpleJobExplorer should return null when a StepExecution cannot be found
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user