IN PROGRESS - issue BATCH-453: Killed batches cannot be restarted

http://jira.springframework.org/browse/BATCH-453

Minor adjustments to repository dao's (JobExecution no longer needs instance and step execution)
This commit is contained in:
lucasward
2008-08-28 20:26:52 +00:00
parent 6919398745
commit f25fbb5c15
23 changed files with 192 additions and 104 deletions

View File

@@ -100,7 +100,7 @@ public class JobExecutionTests extends TestCase {
* {@link org.springframework.batch.core.JobExecution#getJobId()}.
*/
public void testGetJobIdForNullJob() {
execution = new JobExecution(null);
execution = new JobExecution(null, null);
assertEquals(null, execution.getJobId());
}

View File

@@ -14,7 +14,12 @@ import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
/**
*
*
* @author Lucas Ward
*
*/
public class ClassPathXmlJobRegistryTests {
ClassPathXmlJobRegistry registry;

View File

@@ -117,7 +117,7 @@ public class JobExplorerFactoryBeanTests {
expect(incrementerFactory.isSupportedIncrementerType("foo")).andReturn(true);
expect(incrementerFactory.getSupportedIncrementerTypes()).andReturn(new String[0]);
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "JOB_SEQ")).andReturn(new StubIncrementer()).times(2);
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "JOB_SEQ")).andReturn(new StubIncrementer());
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "JOB_EXECUTION_SEQ")).andReturn(new StubIncrementer());
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "STEP_EXECUTION_SEQ")).andReturn(new StubIncrementer());
replay(incrementerFactory);

View File

@@ -16,7 +16,7 @@
package org.springframework.batch.core.exlore.support;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.*;
import java.util.Collections;
@@ -30,6 +30,7 @@ import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.explore.support.SimpleJobExplorer;
import org.springframework.batch.core.repository.dao.JobExecutionDao;
import org.springframework.batch.core.repository.dao.JobInstanceDao;
import org.springframework.batch.core.repository.dao.StepExecutionDao;
/**
* Test {@link SimpleJobExplorer}.
@@ -44,6 +45,8 @@ public class SimpleJobExplorerTests extends TestCase {
JobExecutionDao jobExecutionDao;
JobInstanceDao jobInstanceDao;
StepExecutionDao stepExecutionDao;
JobInstance jobInstance = new JobInstance(111L, new JobParameters(), "job");
@@ -53,72 +56,76 @@ public class SimpleJobExplorerTests extends TestCase {
jobExecutionDao = createMock(JobExecutionDao.class);
jobInstanceDao = createMock(JobInstanceDao.class);
stepExecutionDao = createMock(StepExecutionDao.class);
jobExplorer = new SimpleJobExplorer(jobInstanceDao, jobExecutionDao);
jobExplorer = new SimpleJobExplorer(jobInstanceDao, jobExecutionDao, stepExecutionDao);
}
@Test
public void testGetJobExecution() throws Exception {
jobExecutionDao.getJobExecution(123L);
EasyMock.expectLastCall().andReturn(jobExecution);
EasyMock.replay(jobExecutionDao, jobInstanceDao);
expect(jobExecutionDao.getJobExecution(123L)).andReturn(jobExecution);
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(jobInstance);
expect(stepExecutionDao.getStepExecutions(jobExecution)).andReturn(null);
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
jobExplorer.getJobExecution(123L);
EasyMock.verify(jobExecutionDao, jobInstanceDao);
verify(jobExecutionDao, jobInstanceDao, stepExecutionDao);
}
@Test
public void testFindRunningJobExecutions() throws Exception {
jobExecutionDao.findRunningJobExecutions("job");
EasyMock.expectLastCall().andReturn(Collections.singleton(jobExecution));
EasyMock.replay(jobExecutionDao, jobInstanceDao);
expect(jobExecutionDao.findRunningJobExecutions("job")).andReturn(Collections.singleton(jobExecution));
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(jobInstance);
expect(stepExecutionDao.getStepExecutions(jobExecution)).andReturn(null);
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
jobExplorer.findRunningJobExecutions("job");
EasyMock.verify(jobExecutionDao, jobInstanceDao);
verify(jobExecutionDao, jobInstanceDao, stepExecutionDao);
}
@Test
public void testFindJobExecutions() throws Exception {
jobExecutionDao.findJobExecutions(jobInstance);
EasyMock.expectLastCall().andReturn(Collections.singletonList(jobExecution));
EasyMock.replay(jobExecutionDao, jobInstanceDao);
expect(jobExecutionDao.findJobExecutions(jobInstance)).andReturn(Collections.singletonList(jobExecution));
expect(jobInstanceDao.getJobInstance(jobExecution)).andReturn(jobInstance);
expect(stepExecutionDao.getStepExecutions(jobExecution)).andReturn(null);
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
jobExplorer.findJobExecutions(jobInstance);
EasyMock.verify(jobExecutionDao, jobInstanceDao);
verify(jobExecutionDao, jobInstanceDao, stepExecutionDao);
}
@Test
public void testGetJobInstance() throws Exception {
jobInstanceDao.getJobInstance(111L);
EasyMock.expectLastCall().andReturn(jobInstance);
EasyMock.replay(jobExecutionDao, jobInstanceDao);
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
jobExplorer.getJobInstance(111L);
EasyMock.verify(jobExecutionDao, jobInstanceDao);
verify(jobExecutionDao, jobInstanceDao, stepExecutionDao);
}
@Test
public void testGetLastJobInstances() throws Exception {
jobInstanceDao.getLastJobInstances("foo", 1);
EasyMock.expectLastCall().andReturn(Collections.singletonList(jobInstance));
EasyMock.replay(jobExecutionDao, jobInstanceDao);
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
jobExplorer.getLastJobInstances("foo", 1);
EasyMock.verify(jobExecutionDao, jobInstanceDao);
verify(jobExecutionDao, jobInstanceDao, stepExecutionDao);
}
@Test
public void testIsJobInstanceFalse() throws Exception {
jobInstanceDao.getJobInstance("foo", new JobParameters());
EasyMock.expectLastCall().andReturn(null);
EasyMock.replay(jobExecutionDao, jobInstanceDao);
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
assertFalse(jobExplorer.isJobInstanceExists("foo", new JobParameters()));
EasyMock.verify(jobExecutionDao, jobInstanceDao);
verify(jobExecutionDao, jobInstanceDao, stepExecutionDao);
}
@Test
public void testIsJobInstanceTrue() throws Exception {
jobInstanceDao.getJobInstance("foo", new JobParameters());
EasyMock.expectLastCall().andReturn(jobInstance);
EasyMock.replay(jobExecutionDao, jobInstanceDao);
replay(jobExecutionDao, jobInstanceDao, stepExecutionDao);
assertTrue(jobExplorer.isJobInstanceExists("foo", new JobParameters()));
EasyMock.verify(jobExecutionDao, jobInstanceDao);
verify(jobExecutionDao, jobInstanceDao, stepExecutionDao);
}
}

View File

@@ -64,7 +64,7 @@ public class SimpleJobLauncherTests {
@Test
public void testRun() throws Exception {
JobExecution jobExecution = new JobExecution(null);
JobExecution jobExecution = new JobExecution(null, null);
expect(jobRepository.createJobExecution(job, jobParameters)).andReturn(jobExecution);

View File

@@ -160,7 +160,6 @@ public abstract class AbstractJobExecutionDaoTests extends AbstractTransactional
JobExecution value = values.iterator().next();
assertEquals(exec, value);
assertEquals(5L, value.getLastUpdated().getTime());
assertEquals(1, value.getStepExecutions().size());
}
/**
@@ -193,7 +192,6 @@ public abstract class AbstractJobExecutionDaoTests extends AbstractTransactional
JobExecution value = dao.getJobExecution(exec.getId());
assertEquals(exec, value);
assertEquals(1, value.getStepExecutions().size());
}
/**

View File

@@ -22,7 +22,7 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ
private static final long DATE = 777;
private JobInstanceDao dao = new MapJobInstanceDao();
protected JobInstanceDao dao = new MapJobInstanceDao();
private String fooJob = "foo";
@@ -149,5 +149,10 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ
assertNotNull(jobInstance.getVersion());
}
public void testGetJobInstanceByExecutionId(){
}
}

View File

@@ -1,7 +1,11 @@
package org.springframework.batch.core.repository.dao;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobInstance;
import org.springframework.batch.core.JobParameters;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.junit.Assert;
import org.junit.runner.RunWith;
@@ -14,5 +18,16 @@ public class JdbcJobInstanceDaoTests extends AbstractJobInstanceDaoTests {
"BATCH_JOB_PARAMS", "BATCH_JOB_INSTANCE");
return (JobInstanceDao) applicationContext.getBean("jobInstanceDao");
}
public void testFindJobInstanceByExecution(){
JobExecutionDao jobExecutionDao = (JobExecutionDao) applicationContext.getBean("jobExecutionDao");
JobInstance jobInstance = dao.createJobInstance("testInstance", new JobParameters());
JobExecution jobExecution = new JobExecution(jobInstance, 2L);
jobExecutionDao.saveJobExecution(jobExecution);
JobInstance returnedInstance = dao.getJobInstance(jobExecution);
Assert.assertEquals(jobInstance, returnedInstance);
}
}

View File

@@ -140,9 +140,9 @@ public class JobRepositoryFactoryBeanTests {
expect(incrementerFactory.isSupportedIncrementerType("foo")).andReturn(true);
expect(incrementerFactory.getSupportedIncrementerTypes()).andReturn(new String[0]);
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "JOB_SEQ")).andReturn(new StubIncrementer()).times(2);
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "JOB_SEQ")).andReturn(new StubIncrementer());
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "JOB_EXECUTION_SEQ")).andReturn(new StubIncrementer());
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "STEP_EXECUTION_SEQ")).andReturn(new StubIncrementer()).times(2);
expect(incrementerFactory.getIncrementer(databaseType, tablePrefix + "STEP_EXECUTION_SEQ")).andReturn(new StubIncrementer());
replay(incrementerFactory);
factory.afterPropertiesSet();

View File

@@ -118,7 +118,7 @@ public class SimpleJobRepositoryTests {
public void testSaveOrUpdateInvalidJobExecution() {
// failure scenario - must have job ID
JobExecution jobExecution = new JobExecution(null);
JobExecution jobExecution = new JobExecution(null, null);
try {
jobRepository.update(jobExecution);
fail();