OPEN - issue BATCH-90: StepExecution and StepExecutionContext are parallel domains, and StepExecution is by comparison anaemic

http://opensource.atlassian.com/projects/spring/browse/BATCH-90

Tidy the JobInstance up a bit (no need for setter of identifier)
This commit is contained in:
dsyer
2007-09-30 11:47:49 +00:00
parent 5cafc9dfde
commit 21a4ea540e
14 changed files with 64 additions and 56 deletions

View File

@@ -127,7 +127,7 @@ public class SimpleJobExecutorFacade implements JobExecutorFacade, StatisticsPro
.getJobConfiguration(jobRuntimeInformation.getName());
final JobInstance job = jobRepository.findOrCreateJob(jobConfiguration, jobRuntimeInformation);
JobExecutionContext jobExecutionContext = jobExecutionRegistry.register(jobRuntimeInformation, job);
JobExecutionContext jobExecutionContext = jobExecutionRegistry.register(job);
ExitStatus exitStatus = ExitStatus.FAILED;
try {

View File

@@ -98,7 +98,10 @@ public class VolatileJobExecutionRegistry implements JobExecutionRegistry {
* @see org.springframework.batch.container.common.executor.JobExecutionRegistry#register(org.springframework.batch.container.common.runtime.JobRuntimeInformation,
* org.springframework.batch.container.common.domain.JobExecution)
*/
public JobExecutionContext register(JobIdentifier jobIdentifier, JobInstance job) {
public JobExecutionContext register(JobInstance job) {
JobIdentifier jobIdentifier = job.getIdentifier();
if (isRegistered(jobIdentifier)) {
return get(jobIdentifier);
}

View File

@@ -51,8 +51,7 @@ public class HibernateJobDao extends HibernateDaoSupport implements JobDao {
validateJobIdentifier(jobIdentifier);
JobInstance job = new JobInstance();
job.setIdentifier(jobIdentifier);
JobInstance job = new JobInstance(jobIdentifier);
Long jobId = (Long) getHibernateTemplate().save(job);

View File

@@ -45,8 +45,7 @@ public class MapJobDao implements JobDao {
}
public JobInstance createJob(JobIdentifier jobIdentifier) {
JobInstance job = new JobInstance(new Long(currentId++));
job.setIdentifier(jobIdentifier);
JobInstance job = new JobInstance(jobIdentifier, new Long(currentId++));
jobsById.put(job.getId(), job);
return job;

View File

@@ -119,8 +119,7 @@ public class SqlJobDao implements JobDao, InitializingBean {
new Long(defaultJobId.getJobRun()) };
jdbcTemplate.update(getCreateJobQuery(), parameters);
JobInstance job = new JobInstance(jobId);
job.setIdentifier(jobIdentifier);
JobInstance job = new JobInstance(jobIdentifier, jobId);
return job;
}
@@ -145,9 +144,8 @@ public class SqlJobDao implements JobDao, InitializingBean {
RowMapper rowMapper = new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
JobInstance job = new JobInstance(new Long(rs.getLong(1)));
JobInstance job = new JobInstance(jobIdentifier, new Long(rs.getLong(1)));
job.setStatus(BatchStatus.getStatus(rs.getString(2)));
job.setIdentifier(jobIdentifier);
return job;
}

View File

@@ -25,7 +25,7 @@
<subclass entity-name="ScheduledJobInstance" name="JobInstance"
discriminator-value="Scheduled">
<component name="identifier"
<component name="identifier" access="field"
class="org.springframework.batch.execution.runtime.ScheduledJobIdentifier">
<property name="name" update="false" column="JOB_NAME" />
<property name="jobStream" update="false"
@@ -38,7 +38,7 @@
<subclass entity-name="SimpleJobInstance" name="JobInstance"
discriminator-value="Simple">
<component name="identifier"
<component name="identifier" access="field"
class="org.springframework.batch.core.runtime.SimpleJobIdentifier">
<property name="name" update="false" column="JOB_NAME" />
</component>

View File

@@ -80,11 +80,10 @@ public class SimpleJobExecutorFacaderTests extends TestCase {
jobRepository.findOrCreateJob(jobConfiguration, jobRuntimeInformation);
jobExecutor = new JobExecutor() {
public ExitStatus run(JobConfiguration configuration, JobExecutionContext jobExecutionContext) throws BatchCriticalException {
jobExecutionContext.getJob().setIdentifier(jobRuntimeInformation);
return ExitStatus.FINISHED;
}
};
JobInstance job = new JobInstance();
JobInstance job = new JobInstance(jobRuntimeInformation);
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobRuntimeInformation, job);
jobRepositoryControl.setReturnValue(job);
jobExecutor.run(jobConfiguration, jobExecutionContext);
@@ -127,7 +126,7 @@ public class SimpleJobExecutorFacaderTests extends TestCase {
});
final SimpleJobIdentifier jobRuntimeInformation = new SimpleJobIdentifier("foo");
jobRepository.findOrCreateJob(jobConfiguration, jobRuntimeInformation);
JobInstance job = new JobInstance();
JobInstance job = new JobInstance(jobRuntimeInformation);
jobRepositoryControl.setReturnValue(job);
jobRepositoryControl.replay();
@@ -188,7 +187,7 @@ public class SimpleJobExecutorFacaderTests extends TestCase {
JobExecutionRegistry jobExecutionRegistry = new VolatileJobExecutionRegistry();
simpleContainer.setJobExecutionRegistry(jobExecutionRegistry);
SimpleJobIdentifier runtimeInformation = new SimpleJobIdentifier("TestJob");
JobExecutionContext context = jobExecutionRegistry.register(runtimeInformation, new JobInstance(new Long(0)));
JobExecutionContext context = jobExecutionRegistry.register(new JobInstance(runtimeInformation, new Long(0)));
RepeatContextSupport stepContext = new RepeatContextSupport(null);
RepeatContextSupport chunkContext = new RepeatContextSupport(stepContext);
@@ -213,7 +212,7 @@ public class SimpleJobExecutorFacaderTests extends TestCase {
JobExecutionRegistry jobExecutionRegistry = (JobExecutionRegistry) control.getMock();
simpleContainer.setJobExecutionRegistry(jobExecutionRegistry);
SimpleJobIdentifier runtimeInformation = new SimpleJobIdentifier("TestJob");
JobExecutionContext jobExecutionContext = new JobExecutionContext(runtimeInformation, new JobInstance(new Long(0)));
JobExecutionContext jobExecutionContext = new JobExecutionContext(runtimeInformation, new JobInstance(runtimeInformation, new Long(0)));
jobExecutionContext.registerStepContext(new RepeatContextSupport(null));
jobExecutionContext.registerChunkContext(new RepeatContextSupport(null));
control.expectAndReturn(jobExecutionRegistry.findAll(), Collections.singleton(jobExecutionContext));

View File

@@ -30,41 +30,50 @@ import org.springframework.batch.core.runtime.SimpleJobIdentifier;
public class VolatileJobExecutionRegistryTests extends TestCase {
private SimpleJobIdentifier runtimeInformation = new SimpleJobIdentifier("foo");
private JobInstance job = new JobInstance(new Long(0));
private JobInstance job = new JobInstance(runtimeInformation, new Long(0));
private VolatileJobExecutionRegistry registry = new VolatileJobExecutionRegistry();
public void testAddAndRetrieveSingle() throws Exception {
JobExecutionContext context = registry.register(runtimeInformation, job);
JobExecutionContext context = registry.register(job);
assertEquals(context, registry.get(runtimeInformation));
}
public void testAddAndFindAll() throws Exception {
JobExecutionContext context = registry.register(runtimeInformation, job);
JobExecutionContext context = registry.register(job);
Collection list = registry.findAll();
assertEquals(1, list.size());
assertTrue(list.contains(context));
}
public void testAddAndFindAllMultiple() throws Exception {
JobExecutionContext context1 = registry.register(runtimeInformation, job);
JobExecutionContext context2 = registry.register(new SimpleJobIdentifier("spam"), job);
JobExecutionContext context1 = registry.register(job);
JobExecutionContext context2 = registry.register(new JobInstance(new SimpleJobIdentifier("bar"), new Long(1)));
Collection list = registry.findAll();
assertEquals(2, list.size());
assertTrue(list.contains(context1));
assertTrue(list.contains(context2));
}
public void testRegisterSamejobTwice() throws Exception {
JobExecutionContext context1 = registry.register(job);
JobExecutionContext context2 = registry.register(job);
Collection list = registry.findAll();
assertEquals(1, list.size());
assertTrue(list.contains(context1));
assertTrue(list.contains(context2));
}
public void testAddAndFindByName() throws Exception {
JobExecutionContext context = registry.register(runtimeInformation, job);
registry.register(new SimpleJobIdentifier("bar"), job);
JobExecutionContext context = registry.register(job);
registry.register(job);
Collection list = registry.findByName(runtimeInformation.getName());
assertEquals(1, list.size());
assertTrue(list.contains(context));
}
public void testAddAndUnregister() throws Exception {
registry.register(runtimeInformation, job);
registry.register(job);
assertTrue(registry.isRegistered(runtimeInformation));
registry.unregister(runtimeInformation);
assertFalse(registry.isRegistered(runtimeInformation));
@@ -72,7 +81,7 @@ public class VolatileJobExecutionRegistryTests extends TestCase {
public void testAddAndIsRegistered() throws Exception {
assertFalse(registry.isRegistered(runtimeInformation));
registry.register(runtimeInformation, job);
registry.register(job);
assertTrue(registry.isRegistered(runtimeInformation));
}
}

View File

@@ -97,7 +97,7 @@ public class SimpleJobRepositoryTests extends TestCase {
jobConfiguration.setSteps(stepConfigurations);
databaseJob = new JobInstance(new Long(1));
databaseJob = new JobInstance(jobRuntimeInformation, new Long(1));
databaseStep1 = new StepInstance(new Long(1));
databaseStep2 = new StepInstance(new Long(2));
@@ -168,7 +168,7 @@ public class SimpleJobRepositoryTests extends TestCase {
List jobs = new ArrayList();
jobs.add(databaseJob);
jobs.add(new JobInstance());
jobs.add(new JobInstance(jobRuntimeInformation));
jobDao.findJobs(jobRuntimeInformation);
jobDaoControl.setReturnValue(jobs);
jobDaoControl.replay();
@@ -254,7 +254,7 @@ public class SimpleJobRepositoryTests extends TestCase {
}
// successful update
updateJob = new JobInstance(new Long(0L));
updateJob = new JobInstance(null, new Long(0L));
jobDao.update(updateJob);
jobDaoControl.replay();
jobRepository.update(updateJob);

View File

@@ -13,28 +13,24 @@ public class EntityNameInterceptorTests extends TestCase {
private EntityNameInterceptor interceptor = new EntityNameInterceptor();
public void testGetEntityNameForScheduledJobIdentifier() {
JobInstance job = new JobInstance();
job.setIdentifier(new ScheduledJobIdentifier("foo"));
JobInstance job = new JobInstance(new ScheduledJobIdentifier("foo"));
assertEquals("ScheduledJobInstance", interceptor.getEntityName(job));
}
public void testGetEntityNameForSimpleJobIdentifier() {
JobInstance job = new JobInstance();
job.setIdentifier(new SimpleJobIdentifier("foo"));
JobInstance job = new JobInstance(new SimpleJobIdentifier("foo"));
assertEquals("SimpleJobInstance", interceptor.getEntityName(job));
}
public void testSetIdentifierTypesWithString() {
interceptor.setIdentifierTypes(Collections.singletonMap(ScheduledJobIdentifier.class.getName(), "foo"));
JobInstance job = new JobInstance();
job.setIdentifier(new ScheduledJobIdentifier("foo"));
JobInstance job = new JobInstance(new ScheduledJobIdentifier("foo"));
assertEquals("foo", interceptor.getEntityName(job));
}
public void testSetIdentifierTypesWithClass() {
interceptor.setIdentifierTypes(Collections.singletonMap(ScheduledJobIdentifier.class, "foo"));
JobInstance job = new JobInstance();
job.setIdentifier(new ScheduledJobIdentifier("foo"));
JobInstance job = new JobInstance(new ScheduledJobIdentifier("foo"));
assertEquals("foo", interceptor.getEntityName(job));
}

View File

@@ -40,7 +40,7 @@ public class MapStepDaoTests extends TestCase {
protected void setUp() throws Exception {
MapStepDao.clear();
job = new JobInstance(new Long(jobId++));
job = new JobInstance(null, new Long(jobId++));
step = dao.createStep(job, "foo");
}
@@ -79,7 +79,7 @@ public class MapStepDaoTests extends TestCase {
}
public void testFindSingleWithEmptyResults() throws Exception {
StepInstance result = dao.findStep(new JobInstance(new Long(22)), "bar");
StepInstance result = dao.findStep(new JobInstance(null, new Long(22)), "bar");
assertEquals(null, result);
}

View File

@@ -26,7 +26,7 @@ public class SqlStepDaoPrefixTests extends TestCase {
StepExecution stepExecution = new StepExecution(new Long(1), new Long(2));
StepInstance step = new StepInstance(new Long(1));
JobInstance job = new JobInstance(new Long(1));
JobInstance job = new JobInstance(null, new Long(1));
MockControl stepExecutionIncrementerControl = MockControl.createControl(DataFieldMaxValueIncrementer.class);
DataFieldMaxValueIncrementer stepExecutionIncrementer;

View File

@@ -94,7 +94,8 @@ public class DefaultStepExecutorTests extends TestCase {
public void testStepExecutor() throws Exception {
StepInstance step = new StepInstance(new Long(9));
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
stepExecutor.process(stepConfiguration, stepExecutionContext);
@@ -111,7 +112,8 @@ public class DefaultStepExecutorTests extends TestCase {
StepInstance step = new StepInstance(new Long(1));
step.setStepExecution(new StepExecution(new Long(1), new Long(2)));
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(1)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(1)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
stepExecutor.processChunk(stepConfiguration, stepExecutionContext);
@@ -129,7 +131,8 @@ public class DefaultStepExecutorTests extends TestCase {
final StepInstance step = new StepInstance(new Long(1));
step.setStepExecution(new StepExecution(new Long(1),new Long(1)));
final JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
final JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
final StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
stepConfiguration.setTasklet(new Tasklet() {
@@ -154,16 +157,12 @@ public class DefaultStepExecutorTests extends TestCase {
stepExecutor.setRepository(repository);
StepInstance step = new StepInstance(new Long(1));
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
JobInstance job = new JobInstance(new Long(1));
job.setIdentifier(new SimpleJobIdentifier("foo_bar"));
stepExecutor.process(stepConfiguration, stepExecutionContext);
assertEquals(1, processed.size());
// assertEquals(1, repository.findJobs(job.?).size());
}
public void testIncrementRollbackCount(){
@@ -185,7 +184,8 @@ public class DefaultStepExecutorTests extends TestCase {
StepInstance step = new StepInstance(new Long(1));
stepConfiguration.setTasklet(tasklet);
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
try{
@@ -216,7 +216,8 @@ public class DefaultStepExecutorTests extends TestCase {
StepInstance step = new StepInstance(new Long(1));
stepConfiguration.setTasklet(tasklet);
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
try{
@@ -238,7 +239,8 @@ public class DefaultStepExecutorTests extends TestCase {
MockRestartableTasklet tasklet = new MockRestartableTasklet();
stepConfiguration.setTasklet(tasklet);
stepConfiguration.setSaveRestartData(true);
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
try{
@@ -261,7 +263,8 @@ public class DefaultStepExecutorTests extends TestCase {
MockRestartableTasklet tasklet = new MockRestartableTasklet();
stepConfiguration.setTasklet(tasklet);
stepConfiguration.setSaveRestartData(true);
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
try{
@@ -284,7 +287,8 @@ public class DefaultStepExecutorTests extends TestCase {
MockRestartableTasklet tasklet = new MockRestartableTasklet();
stepConfiguration.setTasklet(tasklet);
stepConfiguration.setSaveRestartData(false);
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
try{
@@ -310,7 +314,8 @@ public class DefaultStepExecutorTests extends TestCase {
return ExitStatus.FINISHED;
}});
stepConfiguration.setSaveRestartData(true);
JobExecutionContext jobExecutionContext = new JobExecutionContext(new SimpleJobIdentifier("FOO"), new JobInstance(new Long(3)));
SimpleJobIdentifier jobIdentifier = new SimpleJobIdentifier("FOO");
JobExecutionContext jobExecutionContext = new JobExecutionContext(jobIdentifier, new JobInstance(jobIdentifier, new Long(3)));
StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
try{

View File

@@ -73,7 +73,7 @@ public class StepExecutorInterruptionTests extends TestCase {
List steps = job.getSteps();
final StepInstance step = (StepInstance) steps.get(0);
JobExecutionContext jobExecutionContext = new JobExecutionContext(null, new JobInstance(new Long(0)));
JobExecutionContext jobExecutionContext = new JobExecutionContext(null, new JobInstance(null, new Long(0)));
final StepExecutionContext stepExecutionContext = new StepExecutionContext(jobExecutionContext, step);
stepConfiguration.setTasklet(new Tasklet() {
public ExitStatus execute() throws Exception {