BATCH-762: changed ExecutionContext storage strategy to use JSON for serialization in a single String/CLOB

This commit is contained in:
trisberg
2008-09-08 13:21:25 +00:00
parent 2b470683f9
commit d272105479
27 changed files with 466 additions and 350 deletions

View File

@@ -11,6 +11,7 @@ import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.transaction.annotation.Transactional;
/**
@@ -18,17 +19,51 @@ import org.springframework.transaction.annotation.Transactional;
*/
public abstract class AbstractExecutionContextDaoTests extends AbstractTransactionalJUnit4SpringContextTests {
private ExecutionContextDao dao;
private JobInstanceDao jobInstanceDao;
private JobExecutionDao jobExecutionDao;
private JobExecution jobExecution = new JobExecution(new JobInstance(1L, new JobParameters(), "jobName"), 1L);
private StepExecutionDao stepExecutionDao;
private StepExecution stepExecution = new StepExecution("stepName", jobExecution, 1L);
private ExecutionContextDao contextDao;
private JobExecution jobExecution;
private StepExecution stepExecution;
@Before
public void setUp() {
dao = getExecutionContextDao();
jobInstanceDao = getJobInstanceDao();
jobExecutionDao = getJobExecutionDao();
stepExecutionDao = getStepExecutionDao();
contextDao = getExecutionContextDao();
JobInstance ji = jobInstanceDao.createJobInstance("testJob", new JobParameters());
jobExecution = new JobExecution(ji);
jobExecutionDao.saveJobExecution(jobExecution);
stepExecution = new StepExecution("stepName", jobExecution);
stepExecutionDao.saveStepExecution(stepExecution);
}
/**
* @return Configured {@link ExecutionContextDao} implementation ready for
* use.
*/
protected abstract JobExecutionDao getJobExecutionDao();
/**
* @return Configured {@link ExecutionContextDao} implementation ready for
* use.
*/
protected abstract JobInstanceDao getJobInstanceDao();
/**
* @return Configured {@link ExecutionContextDao} implementation ready for
* use.
*/
protected abstract StepExecutionDao getStepExecutionDao();
/**
* @return Configured {@link ExecutionContextDao} implementation ready for
* use.
@@ -41,9 +76,9 @@ public abstract class AbstractExecutionContextDaoTests extends AbstractTransacti
ExecutionContext ctx = new ExecutionContext(Collections.<String, Object> singletonMap("key", "value"));
jobExecution.setExecutionContext(ctx);
dao.persistExecutionContext(jobExecution);
contextDao.persistExecutionContext(jobExecution);
ExecutionContext retrieved = dao.getExecutionContext(jobExecution);
ExecutionContext retrieved = contextDao.getExecutionContext(jobExecution);
assertEquals(ctx, retrieved);
}
@@ -53,9 +88,9 @@ public abstract class AbstractExecutionContextDaoTests extends AbstractTransacti
ExecutionContext ctx = new ExecutionContext();
jobExecution.setExecutionContext(ctx);
dao.persistExecutionContext(jobExecution);
contextDao.persistExecutionContext(jobExecution);
ExecutionContext retrieved = dao.getExecutionContext(jobExecution);
ExecutionContext retrieved = contextDao.getExecutionContext(jobExecution);
assertEquals(ctx, retrieved);
}
@@ -66,12 +101,12 @@ public abstract class AbstractExecutionContextDaoTests extends AbstractTransacti
ExecutionContext ctx = new ExecutionContext(Collections
.<String, Object> singletonMap("key", "value"));
jobExecution.setExecutionContext(ctx);
dao.persistExecutionContext(jobExecution);
contextDao.persistExecutionContext(jobExecution);
ctx.putLong("longKey", 7);
dao.persistExecutionContext(jobExecution);
contextDao.persistExecutionContext(jobExecution);
ExecutionContext retrieved = dao.getExecutionContext(jobExecution);
ExecutionContext retrieved = contextDao.getExecutionContext(jobExecution);
assertEquals(ctx, retrieved);
assertEquals(7, retrieved.getLong("longKey"));
}
@@ -82,9 +117,9 @@ public abstract class AbstractExecutionContextDaoTests extends AbstractTransacti
ExecutionContext ctx = new ExecutionContext(Collections.<String, Object> singletonMap("key", "value"));
stepExecution.setExecutionContext(ctx);
dao.persistExecutionContext(stepExecution);
contextDao.persistExecutionContext(stepExecution);
ExecutionContext retrieved = dao.getExecutionContext(stepExecution);
ExecutionContext retrieved = contextDao.getExecutionContext(stepExecution);
assertEquals(ctx, retrieved);
}
@@ -94,9 +129,9 @@ public abstract class AbstractExecutionContextDaoTests extends AbstractTransacti
ExecutionContext ctx = new ExecutionContext();
stepExecution.setExecutionContext(ctx);
dao.persistExecutionContext(stepExecution);
contextDao.persistExecutionContext(stepExecution);
ExecutionContext retrieved = dao.getExecutionContext(stepExecution);
ExecutionContext retrieved = contextDao.getExecutionContext(stepExecution);
assertEquals(ctx, retrieved);
}
@@ -106,12 +141,12 @@ public abstract class AbstractExecutionContextDaoTests extends AbstractTransacti
ExecutionContext ctx = new ExecutionContext(Collections.<String, Object> singletonMap("key", "value"));
stepExecution.setExecutionContext(ctx);
dao.persistExecutionContext(stepExecution);
contextDao.persistExecutionContext(stepExecution);
ctx.putLong("longKey", 7);
dao.persistExecutionContext(stepExecution);
contextDao.persistExecutionContext(stepExecution);
ExecutionContext retrieved = dao.getExecutionContext(stepExecution);
ExecutionContext retrieved = contextDao.getExecutionContext(stepExecution);
assertEquals(ctx, retrieved);
assertEquals(7, retrieved.getLong("longKey"));
}
@@ -123,8 +158,8 @@ public abstract class AbstractExecutionContextDaoTests extends AbstractTransacti
ExecutionContext ec = new ExecutionContext();
ec.put("intValue", new Integer(343232));
stepExecution.setExecutionContext(ec);
dao.persistExecutionContext(stepExecution);
ExecutionContext restoredEc = dao.getExecutionContext(stepExecution);
contextDao.persistExecutionContext(stepExecution);
ExecutionContext restoredEc = contextDao.getExecutionContext(stepExecution);
assertEquals(ec, restoredEc);
}

View File

@@ -8,6 +8,21 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration(locations = {"sql-dao-test.xml"})
public class JdbcExecutionContextDaoTests extends AbstractExecutionContextDaoTests {
@Override
protected JobInstanceDao getJobInstanceDao() {
return (JobInstanceDao) applicationContext.getBean("jobInstanceDao", JobInstanceDao.class);
}
@Override
protected JobExecutionDao getJobExecutionDao() {
return (JobExecutionDao) applicationContext.getBean("jobExecutionDao", JdbcJobExecutionDao.class);
}
@Override
protected StepExecutionDao getStepExecutionDao() {
return (StepExecutionDao) applicationContext.getBean("stepExecutionDao", StepExecutionDao.class);
}
@Override
protected ExecutionContextDao getExecutionContextDao() {
return (ExecutionContextDao) applicationContext.getBean("executionContextDao", JdbcExecutionContextDao.class);

View File

@@ -22,7 +22,7 @@ public class JdbcJobExecutionDaoTests extends AbstractJobExecutionDaoTests {
@Override
protected JobExecutionDao getJobExecutionDao() {
deleteFromTables("BATCH_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION", "BATCH_JOB_PARAMS",
deleteFromTables("BATCH_JOB_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION", "BATCH_JOB_PARAMS",
"BATCH_JOB_INSTANCE");
// job instance needs to exist before job execution can be created

View File

@@ -14,7 +14,7 @@ import org.junit.runner.RunWith;
public class JdbcJobInstanceDaoTests extends AbstractJobInstanceDaoTests {
protected JobInstanceDao getJobInstanceDao() {
deleteFromTables("BATCH_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION",
deleteFromTables("BATCH_JOB_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION",
"BATCH_JOB_PARAMS", "BATCH_JOB_INSTANCE");
return (JobInstanceDao) applicationContext.getBean("jobInstanceDao");
}

View File

@@ -20,7 +20,7 @@ public class JdbcStepExecutionDaoTests extends AbstractStepExecutionDaoTests {
}
protected JobRepository getJobRepository() {
deleteFromTables("BATCH_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION",
deleteFromTables("BATCH_JOB_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION",
"BATCH_JOB_PARAMS", "BATCH_JOB_INSTANCE");
return (JobRepository) applicationContext.getBean("jobRepository");
}

View File

@@ -9,6 +9,24 @@ import org.junit.runner.RunWith;
@RunWith(JUnit4ClassRunner.class)
public class MapExecutionContextDaoTests extends AbstractExecutionContextDaoTests {
@Override
protected JobInstanceDao getJobInstanceDao() {
MapJobInstanceDao.clear();
return new MapJobInstanceDao();
}
@Override
protected JobExecutionDao getJobExecutionDao() {
MapJobExecutionDao.clear();
return new MapJobExecutionDao();
}
@Override
protected StepExecutionDao getStepExecutionDao() {
MapStepExecutionDao.clear();
return new MapStepExecutionDao();
}
@Override
protected ExecutionContextDao getExecutionContextDao() {
return new MapExecutionContextDao();