IN PROGRESS - BATCH-518: ExecutionContextDao injected directly into SimpleJobRepository
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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>();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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" >
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user