IN PROGRESS - BATCH-505: Job-level ExecutionContext

JobExecutionContext is now persisted (together with StepExecutionContext) and retrieved on restart
(changed jobExecution's start time to be not null so that last execution can be always found).
This commit is contained in:
robokaso
2008-05-23 10:26:29 +00:00
parent abc9111b20
commit fd6fad60dc
17 changed files with 102 additions and 19 deletions

View File

@@ -71,7 +71,6 @@ public class JobExecutionTests extends TestCase {
* {@link org.springframework.batch.core.JobExecution#getStartTime()}.
*/
public void testGetStartTime() {
assertNull(execution.getStartTime());
execution.setStartTime(new Date(0L));
assertEquals(0L, execution.getStartTime().getTime());
}

View File

@@ -164,6 +164,9 @@ public class SimpleJobTests extends TestCase {
checkRepository(BatchStatus.COMPLETED);
assertNotNull(jobExecution.getEndTime());
assertNotNull(jobExecution.getStartTime());
assertTrue(step1.passedInJobContext.isEmpty());
assertFalse(step2.passedInJobContext.isEmpty());
}
public void testRunNormallyWithListener() throws Exception {
@@ -342,8 +345,8 @@ public class SimpleJobTests extends TestCase {
catch (RuntimeException e) {
assertSame(exception, e);
}
assertTrue(step1.passedInContext.isEmpty());
assertFalse(step2.passedInContext.isEmpty());
assertTrue(step1.passedInStepContext.isEmpty());
assertFalse(step2.passedInStepContext.isEmpty());
}
@@ -397,7 +400,9 @@ public class SimpleJobTests extends TestCase {
private JobRepository jobRepository;
private Properties passedInContext;
private Properties passedInStepContext;
private Properties passedInJobContext;
/**
* @param string
@@ -427,8 +432,10 @@ public class SimpleJobTests extends TestCase {
public void execute(StepExecution stepExecution) throws JobInterruptedException,
UnexpectedJobExecutionException {
passedInContext = stepExecution.getExecutionContext().getProperties();
stepExecution.getExecutionContext().putString("key", "value");
passedInJobContext = stepExecution.getJobExecution().getExecutionContext().getProperties();
passedInStepContext = stepExecution.getExecutionContext().getProperties();
stepExecution.getExecutionContext().putString("stepKey", "stepValue");
stepExecution.getJobExecution().getExecutionContext().putString("jobKey", "jobValue");
jobRepository.saveOrUpdateExecutionContext(stepExecution);
if (exception instanceof RuntimeException) {

View File

@@ -112,6 +112,16 @@ public abstract class AbstractJobExecutionDaoTests extends AbstractTransactional
ExecutionContext retrieved = dao.findExecutionContext(execution);
assertEquals(ctx, retrieved);
}
public void testSaveAndFindEmptyContext() {
dao.saveJobExecution(execution);
ExecutionContext ctx = new ExecutionContext();
execution.setExecutionContext(ctx);
dao.saveOrUpdateExecutionContext(execution);
ExecutionContext retrieved = dao.findExecutionContext(execution);
assertEquals(ctx, retrieved);
}
public void testUpdateContext() {
dao.saveJobExecution(execution);

View File

@@ -161,6 +161,16 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona
ExecutionContext retrieved = dao.findExecutionContext(stepExecution);
assertEquals(ctx, retrieved);
}
public void testSaveAndFindEmptyContext() {
dao.saveStepExecution(stepExecution);
ExecutionContext ctx = new ExecutionContext();
stepExecution.setExecutionContext(ctx);
dao.saveOrUpdateExecutionContext(stepExecution);
ExecutionContext retrieved = dao.findExecutionContext(stepExecution);
assertEquals(ctx, retrieved);
}
public void testUpdateContext() {
dao.saveStepExecution(stepExecution);

View File

@@ -89,7 +89,8 @@ public class SimpleJobRepositoryIntegrationTests extends AbstractTransactionalDa
job.setRestartable(true);
JobExecution firstExecution = jobRepository.createJobExecution(job, jobParameters);
firstExecution.setEndTime(new Date());
firstExecution.setStartTime(new Date(0));
firstExecution.setEndTime(new Date(1));
jobRepository.saveOrUpdate(firstExecution);
JobExecution secondExecution = jobRepository.createJobExecution(job, jobParameters);
@@ -163,6 +164,8 @@ public class SimpleJobRepositoryIntegrationTests extends AbstractTransactionalDa
}
};
JobExecution jobExec = jobRepository.createJobExecution(job, jobParameters);
jobExec.setStartTime(new Date(0));
jobExec.setExecutionContext(ctx);
Step step = new StepSupport("step1");
StepExecution stepExec = new StepExecution(step.getName(), jobExec);
stepExec.setExecutionContext(ctx);
@@ -170,9 +173,13 @@ public class SimpleJobRepositoryIntegrationTests extends AbstractTransactionalDa
jobRepository.saveOrUpdate(stepExec);
jobRepository.saveOrUpdateExecutionContext(stepExec);
StepExecution retrievedExec = jobRepository.getLastStepExecution(jobExec.getJobInstance(), step);
assertEquals(stepExec, retrievedExec);
assertEquals(ctx, retrievedExec.getExecutionContext());
StepExecution retrievedStepExec = jobRepository.getLastStepExecution(jobExec.getJobInstance(), step);
assertEquals(stepExec, retrievedStepExec);
assertEquals(ctx, retrievedStepExec.getExecutionContext());
// JobExecution retrievedJobExec = jobRepository.getLastJobExecution(jobExec.getJobInstance());
// assertEquals(jobExec, retrievedJobExec);
// assertEquals(ctx, retrievedJobExec.getExecutionContext());
}
/**

View File

@@ -68,4 +68,12 @@ public class JobRepositorySupport implements JobRepository {
return 0;
}
public int getJobExecutionCount(JobInstance jobInstance) {
return 0;
}
public JobExecution getLastJobExecution(JobInstance jobInstance) {
return null;
}
}