IN PROGRESS - issue BATCH-384: consolidate map dao implementations

http://jira.springframework.org/browse/BATCH-384

MapJobDao split to MapJobInstanceDao and MapJobExecutionDao.
JobInstanceDao now has getJobInstance(Job,Params) rather than findJobInstances(Job,Params)
This commit is contained in:
robokaso
2008-02-27 16:14:26 +00:00
parent dc656d248d
commit a25680d7f4
17 changed files with 270 additions and 266 deletions

View File

@@ -145,7 +145,6 @@ public class SimpleJobRepository implements JobRepository {
Assert.notNull(job, "Job must not be null.");
Assert.notNull(jobParameters, "JobParameters must not be null.");
List jobInstances = new ArrayList();
JobInstance jobInstance;
/*
@@ -157,15 +156,14 @@ public class SimpleJobRepository implements JobRepository {
* has finished.
*/
jobInstances = jobInstanceDao.findJobInstances(job, jobParameters);
if ((jobInstances.size() > 0) && (job.isRestartable() == false)) {
throw new BatchRestartException("JobInstance already exists and is not restartable");
}
jobInstance = jobInstanceDao.getJobInstance(job, jobParameters);
if (jobInstances.size() == 1) {
// One job was found
jobInstance = (JobInstance) jobInstances.get(0);
// existing job instance found
if (jobInstance != null) {
if (!job.isRestartable()) {
throw new BatchRestartException("JobInstance already exists and is not restartable");
}
jobInstance.setJobExecutionCount(jobExecutionDao.getJobExecutionCount(jobInstance));
if (jobInstance.getJobExecutionCount() > job.getStartLimit()) {
throw new BatchRestartException("Restart Max exceeded for Job: " + jobInstance.toString());
@@ -190,15 +188,10 @@ public class SimpleJobRepository implements JobRepository {
}
jobInstance.setLastExecution(lastExecution);
}
else if (jobInstances.size() == 0) {
else {
// no job found, create one
jobInstance = jobInstanceDao.createJobInstance(job, jobParameters);
}
else {
// More than one job found, throw exception
throw new BatchRestartException("Error restarting job, more than one JobInstance found for: "
+ job.toString());
}
return generateJobExecution(jobInstance);

View File

@@ -158,7 +158,7 @@ public class JdbcJobInstanceDao extends AbstractJdbcBatchMetadataDao implements
* @throws IllegalArgumentException if any {@link JobIdentifier} fields are
* null.
*/
public List findJobInstances(final Job job, final JobParameters jobParameters) {
public JobInstance getJobInstance(final Job job, final JobParameters jobParameters) {
Assert.notNull(job, "Job must not be null.");
Assert.hasLength(job.getName(), "Job must have a name");
@@ -172,8 +172,15 @@ public class JdbcJobInstanceDao extends AbstractJdbcBatchMetadataDao implements
return jobInstance;
}
};
return getJdbcTemplate().query(getQuery(FIND_JOBS), parameters, rowMapper);
List instances = getJdbcTemplate().query(getQuery(FIND_JOBS), parameters, rowMapper);
if (instances.isEmpty()) {
return null;
} else {
Assert.state(instances.size() == 1);
return (JobInstance) instances.get(0);
}
}
/**

View File

@@ -37,6 +37,6 @@ public interface JobInstanceDao {
* @return List of {@link JobInstance} objects matching
* {@link JobIdentifier}
*/
List findJobInstances(Job job, JobParameters jobParameters);
JobInstance getJobInstance(Job job, JobParameters jobParameters);
}

View File

@@ -1,100 +0,0 @@
/*
* Copyright 2006-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.execution.repository.dao;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.batch.core.domain.Job;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
public class MapJobDao implements JobInstanceDao, JobExecutionDao {
private static Map jobsById;
private static Map executionsById;
private long currentId = 0;
static {
jobsById = TransactionAwareProxyFactory.createTransactionalMap();
executionsById = TransactionAwareProxyFactory.createTransactionalMap();
}
public static void clear() {
jobsById.clear();
executionsById.clear();
}
public JobInstance createJobInstance(Job job, JobParameters jobParameters) {
JobInstance jobInstance = new JobInstance(new Long(currentId++), jobParameters, job);
jobsById.put(jobInstance.getId(), jobInstance);
return jobInstance;
}
public List findJobInstances(Job job, JobParameters jobParameters) {
List list = new ArrayList();
for (Iterator iter = jobsById.values().iterator(); iter.hasNext();) {
JobInstance jobInstance = (JobInstance) iter.next();
if (jobInstance.getJobName().equals(job.getName()) && jobInstance.getJobParameters().equals(jobParameters)) {
list.add(jobInstance);
}
}
return list;
}
public int getJobExecutionCount(JobInstance jobInstance) {
Set executions = (Set) executionsById.get(jobInstance.getId());
if (executions==null) return 0;
return executions.size(); }
public void saveJobExecution(JobExecution jobExecution) {
Set executions = (Set) executionsById.get(jobExecution.getJobId());
if (executions==null) {
executions = TransactionAwareProxyFactory.createTransactionalSet();
executionsById.put(jobExecution.getJobId(), executions);
}
executions.add(jobExecution);
jobExecution.setId(new Long(currentId++));
}
public List findJobExecutions(JobInstance jobInstance) {
Set executions = (Set) executionsById.get(jobInstance.getId());
if( executions == null ){
return new ArrayList();
}
else{
return new ArrayList(executions);
}
}
public void updateJobExecution(JobExecution jobExecution) {
// no-op
}
public JobExecution getLastJobExecution(JobInstance jobInstance) {
// no-op
return null;
}
}

View File

@@ -0,0 +1,58 @@
package org.springframework.batch.execution.repository.dao;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
import org.springframework.util.Assert;
public class MapJobExecutionDao implements JobExecutionDao {
private static Map executionsByJobInstanceId = TransactionAwareProxyFactory.createTransactionalMap();
private static long currentId;
public static void clear() {
executionsByJobInstanceId.clear();
}
public int getJobExecutionCount(JobInstance jobInstance) {
Set executions = (Set) executionsByJobInstanceId.get(jobInstance.getId());
if (executions == null)
return 0;
return executions.size();
}
public void saveJobExecution(JobExecution jobExecution) {
Set executions = (Set) executionsByJobInstanceId.get(jobExecution.getJobId());
if (executions == null) {
executions = TransactionAwareProxyFactory.createTransactionalSet();
executionsByJobInstanceId.put(jobExecution.getJobId(), executions);
}
executions.add(jobExecution);
jobExecution.setId(new Long(currentId++));
}
public List findJobExecutions(JobInstance jobInstance) {
Set executions = (Set) executionsByJobInstanceId.get(jobInstance.getId());
if (executions == null) {
return new ArrayList();
}
else {
return new ArrayList(executions);
}
}
public void updateJobExecution(JobExecution jobExecution) {
Assert.notNull(jobExecution.getJobId());
}
public JobExecution getLastJobExecution(JobInstance jobInstance) {
Assert.notNull(jobInstance.getId());
return null;
}
}

View File

@@ -0,0 +1,45 @@
package org.springframework.batch.execution.repository.dao;
import java.util.Collection;
import java.util.Iterator;
import org.springframework.batch.core.domain.Job;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
public class MapJobInstanceDao implements JobInstanceDao {
private static Collection jobInstances = TransactionAwareProxyFactory.createTransactionalList();
private long currentId = 0;
public static void clear() {
jobInstances.clear();
}
public JobInstance createJobInstance(Job job, JobParameters jobParameters) {
if (getJobInstance(job, jobParameters) != null) {
throw new IllegalArgumentException("JobInstance already exists for given job and parameters");
}
JobInstance jobInstance = new JobInstance(new Long(currentId++), jobParameters, job);
jobInstances.add(jobInstance);
return jobInstance;
}
public JobInstance getJobInstance(Job job, JobParameters jobParameters) {
for (Iterator iterator = jobInstances.iterator(); iterator.hasNext();) {
JobInstance instance = (JobInstance) iterator.next();
if (instance.getJobName().equals(job.getName()) && instance.getJobParameters().equals(jobParameters)) {
return instance;
}
}
return null;
}
}

View File

@@ -30,11 +30,11 @@ import org.springframework.batch.core.domain.Step;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.runtime.ExitStatusExceptionClassifier;
import org.springframework.batch.execution.job.SimpleJob;
import org.springframework.batch.execution.repository.SimpleJobRepository;
import org.springframework.batch.execution.repository.dao.JobExecutionDao;
import org.springframework.batch.execution.repository.dao.JobInstanceDao;
import org.springframework.batch.execution.repository.dao.MapJobDao;
import org.springframework.batch.execution.repository.dao.MapJobExecutionDao;
import org.springframework.batch.execution.repository.dao.MapJobInstanceDao;
import org.springframework.batch.execution.repository.dao.MapStepDao;
import org.springframework.batch.execution.repository.dao.StepExecutionDao;
import org.springframework.batch.execution.step.AbstractStep;
@@ -83,10 +83,11 @@ public class SimpleJobTests extends TestCase {
protected void setUp() throws Exception {
super.setUp();
MapJobDao.clear();
MapJobInstanceDao.clear();
MapJobExecutionDao.clear();
MapStepDao.clear();
jobInstanceDao = new MapJobDao();
jobExecutionDao = new MapJobDao();
jobInstanceDao = new MapJobInstanceDao();
jobExecutionDao = new MapJobExecutionDao();
stepExecutionDao = new MapStepDao();
jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao);
job = new SimpleJob();
@@ -255,7 +256,7 @@ public class SimpleJobTests extends TestCase {
* Check JobRepository to ensure status is being saved.
*/
private void checkRepository(BatchStatus status, ExitStatus exitStatus) {
assertEquals(jobInstance, jobInstanceDao.findJobInstances(jobInstance.getJob(), jobParameters).get(0));
assertEquals(jobInstance, jobInstanceDao.getJobInstance(jobInstance.getJob(), jobParameters));
// because map dao stores in memory, it can be checked directly
JobExecution jobExecution = (JobExecution) jobExecutionDao.findJobExecutions(jobInstance).get(0);
assertEquals(jobInstance.getId(), jobExecution.getJobId());

View File

@@ -30,7 +30,8 @@ import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.execution.job.SimpleJob;
import org.springframework.batch.execution.repository.SimpleJobRepository;
import org.springframework.batch.execution.repository.dao.MapJobDao;
import org.springframework.batch.execution.repository.dao.MapJobExecutionDao;
import org.springframework.batch.execution.repository.dao.MapJobInstanceDao;
import org.springframework.batch.execution.repository.dao.MapStepDao;
import org.springframework.batch.execution.step.AbstractStep;
import org.springframework.batch.execution.step.ItemOrientedStep;
@@ -48,7 +49,7 @@ public class SimpleJobTests extends TestCase {
private List recovered = new ArrayList();
private SimpleJobRepository repository = new SimpleJobRepository(new MapJobDao(), new MapJobDao(), new MapStepDao());
private SimpleJobRepository repository = new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(), new MapStepDao());
private List processed = new ArrayList();
@@ -65,7 +66,8 @@ public class SimpleJobTests extends TestCase {
protected void setUp() throws Exception {
super.setUp();
job.setJobRepository(repository);
MapJobDao.clear();
MapJobInstanceDao.clear();
MapJobExecutionDao.clear();
MapStepDao.clear();
}

View File

@@ -226,36 +226,12 @@ public class SimpleJobRepositoryTests extends TestCase {
//// assertTrue(step.getStepExecutionCount() == 1);
}
// Test that a restartable job that has multiple instances throws an
// exception.
public void testFindRestartableJobWithMultipleInstances() throws Exception {
List jobs = new ArrayList();
jobs.add(databaseJob);
jobs.add(new JobInstance(new Long(127), jobParameters, jobConfiguration));
jobInstanceDao.findJobInstances(jobConfiguration, jobParameters);
jobInstanceDaoControl.setReturnValue(jobs);
jobInstanceDaoControl.replay();
try {
jobRepository.createJobExecution(jobConfiguration, jobParameters);
fail("Expected BatchRestartException");
}
catch (BatchRestartException e) {
// expected
}
jobInstanceDaoControl.verify();
}
public void testRestartJobStartLimitExceeded() throws Exception {
jobConfiguration.setStartLimit(1);
List jobs = new ArrayList();
jobInstanceDao.findJobInstances(jobConfiguration, jobParameters);
jobs.add(databaseJob);
jobInstanceDaoControl.setReturnValue(jobs);
jobInstanceDao.getJobInstance(jobConfiguration, jobParameters);
jobInstanceDaoControl.setReturnValue(databaseJob);
jobExecutionDao.getJobExecutionCount(databaseJob);
// return a greater execution count then the start limit, should throw
// exception

View File

@@ -99,23 +99,22 @@ public abstract class AbstractJobDaoTests extends AbstractTransactionalDataSourc
public void testFindNonExistentJob() {
// No job should be found since it hasn't been created.
List jobs = jobInstanceDao.findJobInstances(new JobSupport("nonexistentJob"), jobParameters);
assertTrue(jobs.size() == 0);
JobInstance jobInstance = jobInstanceDao.getJobInstance(new JobSupport("nonexistentJob"), jobParameters);
assertNull(jobInstance);
}
public void testFindJob() {
List jobs = jobInstanceDao.findJobInstances(job, jobParameters);
assertTrue(jobs.size() == 1);
JobInstance tempJob = (JobInstance) jobs.get(0);
assertTrue(jobInstance.equals(tempJob));
assertEquals(jobParameters, tempJob.getJobParameters());
JobInstance instance = jobInstanceDao.getJobInstance(job, jobParameters);
assertNotNull(instance);
assertTrue(jobInstance.equals(instance));
assertEquals(jobParameters, instance.getJobParameters());
}
public void testFindJobWithNullRuntime() {
try {
jobInstanceDao.findJobInstances(null, null);
jobInstanceDao.getJobInstance(null, null);
fail();
}
catch (IllegalArgumentException ex) {
@@ -137,14 +136,13 @@ public abstract class AbstractJobDaoTests extends AbstractTransactionalDataSourc
// JobInstance
JobParameters tempProps = new JobParametersBuilder().addString("job.key", "testKey1").toJobParameters();
List jobs;
jobs = jobInstanceDao.findJobInstances(scheduledJob, jobParameters);
assertEquals(1, jobs.size());
JobInstance jobInstance = (JobInstance) jobs.get(0);
assertEquals(jobParameters, jobInstance.getJobParameters());
JobInstance instance;
instance = jobInstanceDao.getJobInstance(scheduledJob, jobParameters);
assertNotNull(instance);
assertEquals(jobParameters, instance.getJobParameters());
jobs = jobInstanceDao.findJobInstances(scheduledJob, tempProps);
assertEquals(0, jobs.size());
instance = jobInstanceDao.getJobInstance(scheduledJob, tempProps);
assertNull(instance);
}
@@ -231,10 +229,10 @@ public abstract class AbstractJobDaoTests extends AbstractTransactionalDataSourc
// Create job.
jobInstance = jobInstanceDao.createJobInstance(testDefaultJob, jobParameters);
List jobs = jobInstanceDao.findJobInstances(testDefaultJob, jobParameters);
JobInstance instance = jobInstanceDao.getJobInstance(testDefaultJob, jobParameters);
assertEquals(1, jobs.size());
assertEquals(jobParameters.getString("job.key"), ((JobInstance) jobs.get(0)).getJobParameters().getString(
assertNotNull(instance);
assertEquals(jobParameters.getString("job.key"), instance.getJobParameters().getString(
"job.key"));
}

View File

@@ -1,81 +0,0 @@
/*
* Copyright 2006-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.execution.repository.dao;
import java.util.List;
import junit.framework.TestCase;
import org.springframework.batch.core.domain.Job;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.execution.job.JobSupport;
public class MapJobDaoTests extends TestCase {
MapJobDao dao = new MapJobDao();
JobParameters jobParameters = new JobParameters();
Job fooJob = new JobSupport("foo");
protected void setUp() throws Exception {
MapJobDao.clear();
}
public void testCreateAndRetrieveSingle() throws Exception {
JobInstance job = dao.createJobInstance(fooJob, jobParameters);
List result = dao.findJobInstances(fooJob, jobParameters);
assertTrue(result.contains(job));
}
public void testCreateAndRetrieveMultiple() throws Exception {
JobInstance job = dao.createJobInstance(fooJob, jobParameters);
Job barJob = new JobSupport("bar");
job = dao.createJobInstance(barJob, jobParameters);
List result = dao.findJobInstances(barJob, jobParameters);
assertEquals(1, result.size());
assertTrue(result.contains(job));
}
public void testNoExecutionsForNewJob() throws Exception {
JobInstance job = dao.createJobInstance(fooJob, jobParameters);
assertEquals(0, dao.getJobExecutionCount(job));
}
public void testSaveExecutionUpdatesId() throws Exception {
JobInstance job = dao.createJobInstance(fooJob, jobParameters);
JobExecution execution = new JobExecution(job);
assertNull(execution.getId());
dao.saveJobExecution(execution);
assertNotNull(execution.getId());
}
public void testCorrectExecutionCountForExistingJob() throws Exception {
JobInstance job = dao.createJobInstance(fooJob, jobParameters);
dao.saveJobExecution(new JobExecution(job));
assertEquals(1, dao.getJobExecutionCount(job));
}
public void testMultipleExecutionsPerExisting() throws Exception {
JobInstance job = dao.createJobInstance(fooJob, jobParameters);
dao.saveJobExecution(new JobExecution(job));
Thread.sleep(50L); // Hack, hack, hackety, hack - job executions are not unique if created too close together!
dao.saveJobExecution(new JobExecution(job));
assertEquals(2, dao.getJobExecutionCount(job));
}
}

View File

@@ -0,0 +1,57 @@
package org.springframework.batch.execution.repository.dao;
import java.util.List;
import junit.framework.TestCase;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.execution.job.JobSupport;
public class MapJobExecutionDaoTests extends TestCase {
JobExecutionDao dao = new MapJobExecutionDao();
JobInstance jobInstance = new JobInstance(new Long(1), new JobParameters(), new JobSupport("execTestJob"));
protected void setUp() throws Exception {
MapJobExecutionDao.clear();
}
/**
* Save and find a job execution.
*/
public void testSaveAndFind() {
JobExecution exec = new JobExecution(jobInstance);
dao.saveJobExecution(exec);
List executions = dao.findJobExecutions(jobInstance);
assertTrue(executions.size() == 1);
assertEquals(exec, executions.get(0));
}
/**
* Saving sets id to the entity.
*/
public void testSaveAddsId() {
JobExecution exec = new JobExecution(jobInstance);
assertNull(exec.getId());
dao.saveJobExecution(exec);
assertNotNull(exec.getId());
}
/**
* Execution count increases by one with every save
* for the same job instance.
*/
public void testGetExecutionCount() {
JobExecution exec1 = new JobExecution(jobInstance);
JobExecution exec2 = new JobExecution(jobInstance);
dao.saveJobExecution(exec1);
assertEquals(1, dao.getJobExecutionCount(jobInstance));
dao.saveJobExecution(exec2);
assertEquals(2, dao.getJobExecutionCount(jobInstance));
}
}

View File

@@ -0,0 +1,38 @@
package org.springframework.batch.execution.repository.dao;
import junit.framework.TestCase;
import org.springframework.batch.core.domain.Job;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.core.domain.JobParametersBuilder;
import org.springframework.batch.execution.job.JobSupport;
public class MapJobInstanceDaoTests extends TestCase {
JobInstanceDao dao = new MapJobInstanceDao();
protected void setUp() throws Exception {
MapJobInstanceDao.clear();
}
protected void tearDown() throws Exception {
MapJobInstanceDao.clear();
}
/**
* Create and retrieve a job instance.
*/
public void testCreateAndRetrieve() throws Exception {
Job fooJob = new JobSupport("foo");
JobParameters fooParams = new JobParametersBuilder().addString("fooKey", "fooValue").toJobParameters();
JobInstance fooInstance = dao.createJobInstance(fooJob, fooParams);
assertNotNull(fooInstance.getId());
assertEquals(fooJob, fooInstance.getJob());
assertEquals(fooParams, fooInstance.getJobParameters());
JobInstance retrievedInstance = dao.getJobInstance(fooJob, fooParams);
assertEquals(fooInstance, retrievedInstance);
}
}

View File

@@ -32,7 +32,8 @@ import org.springframework.batch.core.domain.StepContribution;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.execution.job.JobSupport;
import org.springframework.batch.execution.repository.SimpleJobRepository;
import org.springframework.batch.execution.repository.dao.MapJobDao;
import org.springframework.batch.execution.repository.dao.MapJobExecutionDao;
import org.springframework.batch.execution.repository.dao.MapJobInstanceDao;
import org.springframework.batch.execution.repository.dao.MapStepDao;
import org.springframework.batch.execution.scope.StepSynchronizationManager;
import org.springframework.batch.execution.step.support.JobRepositorySupport;
@@ -195,7 +196,7 @@ public class ItemOrientedStepTests extends TestCase {
public void testRepository() throws Exception {
SimpleJobRepository repository = new SimpleJobRepository(new MapJobDao(), new MapJobDao(), new MapStepDao());
SimpleJobRepository repository = new SimpleJobRepository(new MapJobInstanceDao(), new MapJobExecutionDao(), new MapStepDao());
itemOrientedStep.setJobRepository(repository);
Step step = new StepSupport("stepName");

View File

@@ -29,7 +29,8 @@ import org.springframework.batch.execution.job.JobSupport;
import org.springframework.batch.execution.repository.SimpleJobRepository;
import org.springframework.batch.execution.repository.dao.JobExecutionDao;
import org.springframework.batch.execution.repository.dao.JobInstanceDao;
import org.springframework.batch.execution.repository.dao.MapJobDao;
import org.springframework.batch.execution.repository.dao.MapJobExecutionDao;
import org.springframework.batch.execution.repository.dao.MapJobInstanceDao;
import org.springframework.batch.execution.repository.dao.MapStepDao;
import org.springframework.batch.execution.repository.dao.StepExecutionDao;
import org.springframework.batch.execution.step.ItemOrientedStep;
@@ -44,16 +45,17 @@ public class StepExecutorInterruptionTests extends TestCase {
private JobRepository jobRepository;
private JobInstanceDao jobInstanceDao = new MapJobDao();
private JobInstanceDao jobInstanceDao = new MapJobInstanceDao();
private JobExecutionDao jobExecutionDao = new MapJobDao();
private JobExecutionDao jobExecutionDao = new MapJobExecutionDao();
private StepExecutionDao stepExecutionDao = new MapStepDao();
private ItemOrientedStep step;
public void setUp() throws Exception {
MapJobDao.clear();
MapJobInstanceDao.clear();
MapJobExecutionDao.clear();
MapStepDao.clear();
jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao);

View File

@@ -44,13 +44,17 @@
<bean id="simpleJobRepository"
class="org.springframework.batch.execution.repository.SimpleJobRepository">
<constructor-arg ref="jobDao" />
<constructor-arg ref="jobDao" />
<constructor-arg ref="jobInstanceDao" />
<constructor-arg ref="jobExecutionDao" />
<constructor-arg ref="stepDao" />
</bean>
<bean id="jobDao"
class="org.springframework.batch.execution.repository.dao.MapJobDao" />
<bean id="jobInstanceDao"
class="org.springframework.batch.execution.repository.dao.MapJobInstanceDao" />
<!-- init-method="clear"/-->
<bean id="jobExecutionDao"
class="org.springframework.batch.execution.repository.dao.MapJobExecutionDao" />
<!-- init-method="clear"/-->
<bean id="stepDao"

View File

@@ -71,10 +71,13 @@
ref="stepExecutionIncrementer" />
</bean>
<bean id="mapJobDao" lazy-init="true"
class="org.springframework.batch.execution.repository.dao.MapJobDao" />
<bean id="mapJobInstanceDao" lazy-init="true"
class="org.springframework.batch.execution.repository.dao.MapJobInstanceDao" />
<bean id="mapJobExecutionDao" lazy-init="true"
class="org.springframework.batch.execution.repository.dao.MapJobExecutionDao" />
<bean id="mapStepDao" lazy-init="true"
<bean id="mapStepExecutionDao" lazy-init="true"
class="org.springframework.batch.execution.repository.dao.MapStepDao" />
<bean id="jdbcTemplate"