IN PROGRESS - BATCH-518: ExecutionContextDao injected directly into SimpleJobRepository

This commit is contained in:
robokaso
2008-07-29 12:47:59 +00:00
parent 51f087351d
commit fad0ea2441
14 changed files with 69 additions and 17 deletions

View File

@@ -4,6 +4,7 @@ import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.NameMatchMethodPointcut;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.dao.ExecutionContextDao;
import org.springframework.batch.core.repository.dao.JobExecutionDao;
import org.springframework.batch.core.repository.dao.JobInstanceDao;
import org.springframework.batch.core.repository.dao.StepExecutionDao;
@@ -53,6 +54,11 @@ public abstract class AbstractJobRepositoryFactoryBean implements FactoryBean, I
* @return fully configured {@link StepExecutionDao} implementation.
*/
protected abstract StepExecutionDao createStepExecutionDao() throws Exception;
/**
* @return fully configured {@link ExecutionContextDao} implementation.
*/
protected abstract ExecutionContextDao createExecutionContextDao() throws Exception;
public Object getObject() throws Exception {
return proxyFactory.getProxy();
@@ -95,7 +101,7 @@ public abstract class AbstractJobRepositoryFactoryBean implements FactoryBean, I
}
private Object getTarget() throws Exception {
return new SimpleJobRepository(createJobInstanceDao(), createJobExecutionDao(), createStepExecutionDao());
return new SimpleJobRepository(createJobInstanceDao(), createJobExecutionDao(), createStepExecutionDao(), createExecutionContextDao());
}
/**

View File

@@ -19,6 +19,8 @@ package org.springframework.batch.core.repository.support;
import javax.sql.DataSource;
import org.springframework.batch.core.repository.dao.AbstractJdbcBatchMetadataDao;
import org.springframework.batch.core.repository.dao.ExecutionContextDao;
import org.springframework.batch.core.repository.dao.JdbcExecutionContextDao;
import org.springframework.batch.core.repository.dao.JdbcJobExecutionDao;
import org.springframework.batch.core.repository.dao.JdbcJobInstanceDao;
import org.springframework.batch.core.repository.dao.JdbcStepExecutionDao;
@@ -126,4 +128,13 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean {
dao.afterPropertiesSet();
return dao;
}
@Override
protected ExecutionContextDao createExecutionContextDao() throws Exception {
JdbcExecutionContextDao dao = new JdbcExecutionContextDao();
dao.setJdbcTemplate(jdbcTemplate);
dao.setTablePrefix(tablePrefix);
dao.afterPropertiesSet();
return dao;
}
}

View File

@@ -1,7 +1,9 @@
package org.springframework.batch.core.repository.support;
import org.springframework.batch.core.repository.dao.ExecutionContextDao;
import org.springframework.batch.core.repository.dao.JobExecutionDao;
import org.springframework.batch.core.repository.dao.JobInstanceDao;
import org.springframework.batch.core.repository.dao.MapExecutionContextDao;
import org.springframework.batch.core.repository.dao.MapJobExecutionDao;
import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
@@ -29,4 +31,9 @@ public class MapJobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBea
return new MapStepExecutionDao();
}
@Override
protected ExecutionContextDao createExecutionContextDao() throws Exception {
return new MapExecutionContextDao();
}
}

View File

@@ -30,6 +30,7 @@ import org.springframework.batch.core.repository.JobExecutionAlreadyRunningExcep
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.batch.core.repository.dao.ExecutionContextDao;
import org.springframework.batch.core.repository.dao.JobExecutionDao;
import org.springframework.batch.core.repository.dao.JobInstanceDao;
import org.springframework.batch.core.repository.dao.StepExecutionDao;
@@ -62,6 +63,8 @@ public class SimpleJobRepository implements JobRepository {
private StepExecutionDao stepExecutionDao;
private ExecutionContextDao ecDao;
/**
* Provide default constructor with low visibility in case user wants to use
* use aop:proxy-target-class="true" for AOP interceptor.
@@ -70,11 +73,12 @@ public class SimpleJobRepository implements JobRepository {
}
public SimpleJobRepository(JobInstanceDao jobInstanceDao, JobExecutionDao jobExecutionDao,
StepExecutionDao stepExecutionDao) {
StepExecutionDao stepExecutionDao, ExecutionContextDao ecDao) {
super();
this.jobInstanceDao = jobInstanceDao;
this.jobExecutionDao = jobExecutionDao;
this.stepExecutionDao = stepExecutionDao;
this.ecDao = ecDao;
}
/**
@@ -236,7 +240,7 @@ public class SimpleJobRepository implements JobRepository {
stepExecutionDao.updateStepExecution(stepExecution);
}
private void validateStepExecution(StepExecution stepExecution) {
Assert.notNull(stepExecution, "StepExecution cannot be null.");
Assert.notNull(stepExecution.getStepName(), "StepExecution's step name cannot be null.");
@@ -246,14 +250,14 @@ public class SimpleJobRepository implements JobRepository {
/*
* (non-Javadoc)
*
* @seeorg.springframework.batch.core.repository.JobRepository#
* saveOrUpdateExecutionContext
* @see org.springframework.batch.core.repository.JobRepository#
* persistExecutionContext
* (org.springframework.batch.core.domain.StepExecution)
*/
public void persistExecutionContext(StepExecution stepExecution) {
// Until there is an interface change (
stepExecutionDao.persistExecutionContext(stepExecution);
jobExecutionDao.persistExecutionContext(stepExecution.getJobExecution());
ecDao.persistExecutionContext(stepExecution.getJobExecution());
ecDao.persistExecutionContext(stepExecution);
}
/**

View File

@@ -38,8 +38,10 @@ import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.UnexpectedJobExecutionException;
import org.springframework.batch.core.listener.JobExecutionListenerSupport;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.dao.ExecutionContextDao;
import org.springframework.batch.core.repository.dao.JobExecutionDao;
import org.springframework.batch.core.repository.dao.JobInstanceDao;
import org.springframework.batch.core.repository.dao.MapExecutionContextDao;
import org.springframework.batch.core.repository.dao.MapJobExecutionDao;
import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
@@ -64,6 +66,8 @@ public class SimpleJobTests extends TestCase {
private JobExecutionDao jobExecutionDao;
private StepExecutionDao stepExecutionDao;
private ExecutionContextDao ecDao;
private List<Serializable> list = new ArrayList<Serializable>();
@@ -89,10 +93,12 @@ public class SimpleJobTests extends TestCase {
MapJobInstanceDao.clear();
MapJobExecutionDao.clear();
MapStepExecutionDao.clear();
MapExecutionContextDao.clear();
jobInstanceDao = new MapJobInstanceDao();
jobExecutionDao = new MapJobExecutionDao();
stepExecutionDao = new MapStepExecutionDao();
jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao);
ecDao = new MapExecutionContextDao();
jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao, ecDao);
job = new SimpleJob();
job.setJobRepository(jobRepository);

View File

@@ -13,7 +13,8 @@ public class MapStepExecutionDaoTests extends AbstractStepExecutionDaoTests {
MapJobInstanceDao.clear();
MapJobExecutionDao.clear();
MapStepExecutionDao.clear();
return new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(), new MapStepExecutionDao());
return new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(), new MapStepExecutionDao(),
new MapExecutionContextDao());
}
}

View File

@@ -30,6 +30,7 @@ import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.job.JobSupport;
import org.springframework.batch.core.repository.dao.ExecutionContextDao;
import org.springframework.batch.core.repository.dao.JobExecutionDao;
import org.springframework.batch.core.repository.dao.JobInstanceDao;
import org.springframework.batch.core.repository.dao.StepExecutionDao;
@@ -60,6 +61,8 @@ public class SimpleJobRepositoryTests extends TestCase {
JobInstanceDao jobInstanceDao;
StepExecutionDao stepExecutionDao;
ExecutionContextDao ecDao;
JobInstance databaseJob;
@@ -75,8 +78,9 @@ public class SimpleJobRepositoryTests extends TestCase {
jobExecutionDao = createMock(JobExecutionDao.class);
jobInstanceDao = createMock(JobInstanceDao.class);
stepExecutionDao = createMock(StepExecutionDao.class);
ecDao = createMock(ExecutionContextDao.class);
jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao);
jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao, ecDao);
jobParameters = new JobParametersBuilder().toJobParameters();

View File

@@ -35,6 +35,7 @@ import org.springframework.batch.core.StepExecutionListener;
import org.springframework.batch.core.UnexpectedJobExecutionException;
import org.springframework.batch.core.job.JobSupport;
import org.springframework.batch.core.listener.StepExecutionListenerSupport;
import org.springframework.batch.core.repository.dao.MapExecutionContextDao;
import org.springframework.batch.core.repository.dao.MapJobExecutionDao;
import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
@@ -156,7 +157,7 @@ public class ItemOrientedStepTests extends TestCase {
public void testRepository() throws Exception {
SimpleJobRepository repository = new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(),
new MapStepExecutionDao());
new MapStepExecutionDao(), new MapExecutionContextDao());
itemOrientedStep.setJobRepository(repository);
JobExecution jobExecution = repository.createJobExecution(job, jobInstance.getJobParameters());

View File

@@ -32,6 +32,7 @@ import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.job.AbstractJob;
import org.springframework.batch.core.job.SimpleJob;
import org.springframework.batch.core.listener.ItemListenerSupport;
import org.springframework.batch.core.repository.dao.MapExecutionContextDao;
import org.springframework.batch.core.repository.dao.MapJobExecutionDao;
import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
@@ -58,7 +59,7 @@ public class SimpleStepFactoryBeanTests extends TestCase {
private List<Exception> recovered = new ArrayList<Exception>();
private SimpleJobRepository repository = new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(),
new MapStepExecutionDao());
new MapStepExecutionDao(), new MapExecutionContextDao());
private List<String> written = new ArrayList<String>();

View File

@@ -32,6 +32,7 @@ import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepListener;
import org.springframework.batch.core.job.JobSupport;
import org.springframework.batch.core.listener.SkipListenerSupport;
import org.springframework.batch.core.repository.dao.MapExecutionContextDao;
import org.springframework.batch.core.repository.dao.MapJobExecutionDao;
import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
@@ -67,7 +68,7 @@ public class StatefulRetryStepFactoryBeanTests extends TestCase {
int count = 0;
private SimpleJobRepository repository = new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(),
new MapStepExecutionDao());
new MapStepExecutionDao(), new MapExecutionContextDao());
JobExecution jobExecution;

View File

@@ -25,6 +25,7 @@ import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.job.JobSupport;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.dao.MapExecutionContextDao;
import org.springframework.batch.core.repository.dao.MapJobExecutionDao;
import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
@@ -54,7 +55,7 @@ public class StepExecutorInterruptionTests extends TestCase {
MapStepExecutionDao.clear();
JobRepository jobRepository = new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(),
new MapStepExecutionDao());
new MapStepExecutionDao(), new MapExecutionContextDao());
JobSupport jobConfiguration = new JobSupport();
step = new ItemOrientedStep("interruptedStep");

View File

@@ -9,6 +9,11 @@
<constructor-arg ref="jobInstanceDao" />
<constructor-arg ref="jobExecutionDao" />
<constructor-arg ref="stepExecutionDao" />
<constructor-arg ref="executionContextDao" />
</bean>
<bean id="executionContextDao" class="org.springframework.batch.core.repository.dao.JdbcExecutionContextDao" >
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="jobInstanceDao" class="org.springframework.batch.core.repository.dao.JdbcJobInstanceDao" >

View File

@@ -20,6 +20,7 @@ import org.springframework.batch.core.job.SimpleJob;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.batch.core.repository.dao.MapExecutionContextDao;
import org.springframework.batch.core.repository.dao.MapJobExecutionDao;
import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
@@ -63,7 +64,7 @@ public class ChunkMessageItemWriterIntegrationTests {
factory = new SimpleStepFactoryBean<Object>();
jobRepository = new SimpleJobRepository(new MapJobInstanceDao(),
new MapJobExecutionDao(), new MapStepExecutionDao());
new MapJobExecutionDao(), new MapStepExecutionDao(), new MapExecutionContextDao());
factory.setJobRepository(jobRepository);
factory.setTransactionManager(new ResourcelessTransactionManager());
factory.setBeanName("step");

View File

@@ -22,8 +22,11 @@
class="org.springframework.batch.core.repository.support.SimpleJobRepository">
<constructor-arg ref="mapJobInstanceDao" />
<constructor-arg ref="mapJobExecutionDao" />
<constructor-arg ref="mapStepExecutionDao" />
</bean>
<constructor-arg ref="mapStepExecutionDao" />
<constructor-arg ref="mapExecutionContextDao" />
</bean>
<bean id="mapExecutionContextDao" lazy-init="true"
class="org.springframework.batch.core.repository.dao.MapExecutionContextDao" />
<bean id="mapJobInstanceDao" lazy-init="true"
class="org.springframework.batch.core.repository.dao.MapJobInstanceDao" />
<bean id="mapJobExecutionDao" lazy-init="true"