IN PROGRESS - issue BATCH-340: Refactor JobRepository for greater clarity and consistency.

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

removed obsolete JobDao interface
This commit is contained in:
robokaso
2008-02-18 13:07:20 +00:00
parent dad1ba02e1
commit ac83e929b1
4 changed files with 73 additions and 90 deletions

View File

@@ -31,7 +31,6 @@ import org.springframework.batch.core.domain.StepInstance;
import org.springframework.batch.core.repository.BatchRestartException;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.execution.repository.dao.JobDao;
import org.springframework.batch.execution.repository.dao.JobExecutionDao;
import org.springframework.batch.execution.repository.dao.JobInstanceDao;
import org.springframework.batch.execution.repository.dao.StepExecutionDao;

View File

@@ -1,28 +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;
/**
* Data Access Object for jobs.
*
* @author Lucas Ward
*
*/
public interface JobDao extends JobInstanceDao, JobExecutionDao {
}

View File

@@ -30,7 +30,7 @@ import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
public class MapJobDao implements JobDao {
public class MapJobDao implements JobInstanceDao, JobExecutionDao {
private static Map jobsById;
private static Map executionsById;

View File

@@ -36,7 +36,8 @@ import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.core.domain.StepInstance;
import org.springframework.batch.core.domain.StepSupport;
import org.springframework.batch.core.repository.BatchRestartException;
import org.springframework.batch.execution.repository.dao.JobDao;
import org.springframework.batch.execution.repository.dao.JobExecutionDao;
import org.springframework.batch.execution.repository.dao.JobInstanceDao;
import org.springframework.batch.execution.repository.dao.StepExecutionDao;
import org.springframework.batch.execution.repository.dao.StepInstanceDao;
import org.springframework.batch.item.ExecutionContext;
@@ -61,13 +62,17 @@ public class SimpleJobRepositoryTests extends TestCase {
Step stepConfiguration2;
MockControl jobDaoControl = MockControl.createControl(JobDao.class);
MockControl jobExecutionDaoControl = MockControl.createControl(JobExecutionDao.class);
MockControl jobInstanceDaoControl = MockControl.createControl(JobInstanceDao.class);
MockControl stepExecutionDaoControl = MockControl.createControl(StepExecutionDao.class);
MockControl stepInstanceDaoControl = MockControl.createControl(StepInstanceDao.class);
JobDao jobDao;
JobExecutionDao jobExecutionDao;
JobInstanceDao jobInstanceDao;
StepExecutionDao stepExecutionDao;
@@ -89,11 +94,12 @@ public class SimpleJobRepositoryTests extends TestCase {
public void setUp() throws Exception {
jobDao = (JobDao) jobDaoControl.getMock();
jobExecutionDao = (JobExecutionDao) jobExecutionDaoControl.getMock();
jobInstanceDao = (JobInstanceDao) jobInstanceDaoControl.getMock();
stepExecutionDao = (StepExecutionDao) stepExecutionDaoControl.getMock();
stepInstanceDao = (StepInstanceDao) stepInstanceDaoControl.getMock();
jobRepository = new SimpleJobRepository(jobDao, jobDao, stepInstanceDao, stepExecutionDao);
jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepInstanceDao, stepExecutionDao);
jobParameters = new JobParametersBuilder().toJobParameters();
@@ -137,16 +143,16 @@ public class SimpleJobRepositoryTests extends TestCase {
List jobExecutions = new ArrayList();
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobDaoControl.setReturnValue(jobExecutions);
jobDao.createJobInstance(jobConfiguration.getName(), jobParameters);
jobDaoControl.setReturnValue(databaseJob);
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobInstanceDaoControl.setReturnValue(jobExecutions);
jobInstanceDao.createJobInstance(jobConfiguration.getName(), jobParameters);
jobInstanceDaoControl.setReturnValue(databaseJob);
stepInstanceDao.createStepInstance(databaseJob, "TestStep1");
stepInstanceDaoControl.setReturnValue(databaseStep1);
stepInstanceDao.createStepInstance(databaseJob, "TestStep2");
stepInstanceDaoControl.setReturnValue(databaseStep2);
jobDao.saveJobExecution(new JobExecution(databaseJob));
jobDaoControl.setMatcher(new ArgumentsMatcher() {
jobExecutionDao.saveJobExecution(new JobExecution(databaseJob));
jobExecutionDaoControl.setMatcher(new ArgumentsMatcher() {
public boolean matches(Object[] expected, Object[] actual) {
return ((JobExecution) actual[0]).getJobInstance().equals(databaseJob);
}
@@ -157,7 +163,8 @@ public class SimpleJobRepositoryTests extends TestCase {
});
stepExecutionDaoControl.replay();
stepInstanceDaoControl.replay();
jobDaoControl.replay();
jobExecutionDaoControl.replay();
jobInstanceDaoControl.replay();
JobInstance job = jobRepository.createJobExecution(jobConfiguration, jobParameters).getJobInstance();
assertTrue(job.equals(databaseJob));
List jobSteps = job.getStepInstances();
@@ -181,9 +188,9 @@ public class SimpleJobRepositoryTests extends TestCase {
Entity databaseStep2Exec = new StepExecution(databaseStep2, execution, new Long(2));
List jobs = new ArrayList();
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobs.add(databaseJob);
jobDaoControl.setReturnValue(jobs);
jobInstanceDaoControl.setReturnValue(jobs);
stepInstanceDao.findStepInstance(databaseJob, "TestStep1");
stepInstanceDaoControl.setReturnValue(databaseStep1);
stepExecutionDao.getLastStepExecution(databaseStep1, jobExecution);
@@ -202,12 +209,12 @@ public class SimpleJobRepositoryTests extends TestCase {
stepExecutionDaoControl.setReturnValue(1);
stepExecutionDaoControl.replay();
stepInstanceDaoControl.replay();
jobDao.getJobExecutionCount(databaseJob.getId());
jobDaoControl.setReturnValue(1);
jobDao.findJobExecutions(databaseJob);
jobDaoControl.setReturnValue(executions);
jobDao.saveJobExecution(new JobExecution(databaseJob));
jobDaoControl.setMatcher(new ArgumentsMatcher() {
jobExecutionDao.getJobExecutionCount(databaseJob.getId());
jobExecutionDaoControl.setReturnValue(1);
jobExecutionDao.findJobExecutions(databaseJob);
jobExecutionDaoControl.setReturnValue(executions);
jobExecutionDao.saveJobExecution(new JobExecution(databaseJob));
jobExecutionDaoControl.setMatcher(new ArgumentsMatcher() {
public boolean matches(Object[] expected, Object[] actual) {
JobExecution execution = (JobExecution) actual[0];
return execution.getJobInstance().equals(databaseJob);
@@ -217,8 +224,9 @@ public class SimpleJobRepositoryTests extends TestCase {
return "" + arguments[0];
}
});
jobDaoControl.setVoidCallable();
jobDaoControl.replay();
jobExecutionDaoControl.setVoidCallable();
jobExecutionDaoControl.replay();
jobInstanceDaoControl.replay();
JobInstance job = jobRepository.createJobExecution(jobConfiguration, jobParameters).getJobInstance();
assertTrue(job.equals(databaseJob));
List jobSteps = job.getStepInstances();
@@ -238,9 +246,9 @@ public class SimpleJobRepositoryTests extends TestCase {
List jobs = new ArrayList();
jobs.add(databaseJob);
jobs.add(new JobInstance(new Long(127), jobParameters));
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobDaoControl.setReturnValue(jobs);
jobDaoControl.replay();
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobInstanceDaoControl.setReturnValue(jobs);
jobInstanceDaoControl.replay();
try {
jobRepository.createJobExecution(jobConfiguration, jobParameters);
@@ -250,7 +258,7 @@ public class SimpleJobRepositoryTests extends TestCase {
// expected
}
jobDaoControl.verify();
jobInstanceDaoControl.verify();
}
public void testRestartJobStartLimitExceeded() throws Exception {
@@ -258,14 +266,15 @@ public class SimpleJobRepositoryTests extends TestCase {
jobConfiguration.setStartLimit(1);
List jobs = new ArrayList();
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobs.add(databaseJob);
jobDaoControl.setReturnValue(jobs);
jobDao.getJobExecutionCount(databaseJob.getId());
jobInstanceDaoControl.setReturnValue(jobs);
jobExecutionDao.getJobExecutionCount(databaseJob.getId());
// return a greater execution count then the start limit, should throw
// exception
jobDaoControl.setReturnValue(2);
jobDaoControl.replay();
jobExecutionDaoControl.setReturnValue(2);
jobExecutionDaoControl.replay();
jobInstanceDaoControl.replay();
try {
jobRepository.createJobExecution(jobConfiguration, jobParameters);
@@ -275,7 +284,7 @@ public class SimpleJobRepositoryTests extends TestCase {
// expected
}
jobDaoControl.verify();
jobExecutionDaoControl.verify();
}
public void testCreateNonRestartableJob() throws Exception {
@@ -283,16 +292,16 @@ public class SimpleJobRepositoryTests extends TestCase {
List jobs = new ArrayList();
jobConfiguration.setRestartable(false);
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobDaoControl.setReturnValue(jobs);
jobDao.createJobInstance(jobConfiguration.getName(), jobParameters);
jobDaoControl.setReturnValue(databaseJob);
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobInstanceDaoControl.setReturnValue(jobs);
jobInstanceDao.createJobInstance(jobConfiguration.getName(), jobParameters);
jobInstanceDaoControl.setReturnValue(databaseJob);
stepInstanceDao.createStepInstance(databaseJob, "TestStep1");
stepInstanceDaoControl.setReturnValue(databaseStep1);
stepInstanceDao.createStepInstance(databaseJob, "TestStep2");
stepInstanceDaoControl.setReturnValue(databaseStep2);
jobDao.saveJobExecution(new JobExecution(databaseJob));
jobDaoControl.setMatcher(new ArgumentsMatcher() {
jobExecutionDao.saveJobExecution(new JobExecution(databaseJob));
jobExecutionDaoControl.setMatcher(new ArgumentsMatcher() {
public boolean matches(Object[] expected, Object[] actual) {
return ((JobExecution) actual[0]).getJobInstance().equals(databaseJob);
}
@@ -303,7 +312,8 @@ public class SimpleJobRepositoryTests extends TestCase {
});
stepExecutionDaoControl.replay();
stepInstanceDaoControl.replay();
jobDaoControl.replay();
jobExecutionDaoControl.replay();
jobInstanceDaoControl.replay();
JobInstance job = jobRepository.createJobExecution(jobConfiguration, jobParameters).getJobInstance();
assertTrue(job.equals(databaseJob));
List jobSteps = job.getStepInstances();
@@ -333,15 +343,15 @@ public class SimpleJobRepositoryTests extends TestCase {
JobExecution jobExecution = new JobExecution(new JobInstance(new Long(1), jobParameters));
// new execution - call save on job dao
jobDao.saveJobExecution(jobExecution);
jobDaoControl.replay();
jobExecutionDao.saveJobExecution(jobExecution);
jobExecutionDaoControl.replay();
jobRepository.saveOrUpdate(jobExecution);
jobDaoControl.reset();
jobExecutionDaoControl.reset();
// update existing execution
jobExecution.setId(new Long(5));
jobDao.updateJobExecution(jobExecution);
jobDaoControl.replay();
jobExecutionDao.updateJobExecution(jobExecution);
jobExecutionDaoControl.replay();
jobRepository.saveOrUpdate(jobExecution);
}
@@ -390,16 +400,16 @@ public class SimpleJobRepositoryTests extends TestCase {
List jobs = new ArrayList();
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobDaoControl.setReturnValue(jobs);
jobDao.createJobInstance(jobConfiguration.getName(), jobParameters);
jobDaoControl.setReturnValue(databaseJob);
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobInstanceDaoControl.setReturnValue(jobs);
jobInstanceDao.createJobInstance(jobConfiguration.getName(), jobParameters);
jobInstanceDaoControl.setReturnValue(databaseJob);
stepInstanceDao.createStepInstance(databaseJob, "TestStep1");
stepInstanceDaoControl.setReturnValue(databaseStep1);
stepInstanceDao.createStepInstance(databaseJob, "TestStep2");
stepInstanceDaoControl.setReturnValue(databaseStep2);
jobDao.saveJobExecution(new JobExecution(databaseJob));
jobDaoControl.setMatcher(new ArgumentsMatcher() {
jobExecutionDao.saveJobExecution(new JobExecution(databaseJob));
jobExecutionDaoControl.setMatcher(new ArgumentsMatcher() {
public boolean matches(Object[] expected, Object[] actual) {
return ((JobExecution) actual[0]).getJobInstance().equals(databaseJob);
}
@@ -410,7 +420,8 @@ public class SimpleJobRepositoryTests extends TestCase {
});
stepExecutionDaoControl.replay();
stepInstanceDaoControl.replay();
jobDaoControl.replay();
jobExecutionDaoControl.replay();
jobInstanceDaoControl.replay();
JobInstance job = jobRepository.createJobExecution(jobConfiguration, jobParameters).getJobInstance();
List jobSteps = job.getStepInstances();
Iterator it = jobSteps.iterator();
@@ -426,9 +437,9 @@ public class SimpleJobRepositoryTests extends TestCase {
Entity databaseStep2Exec = new StepExecution(databaseStep2, null, new Long(2));
List jobs = new ArrayList();
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobs.add(databaseJob);
jobDaoControl.setReturnValue(jobs);
jobInstanceDaoControl.setReturnValue(jobs);
stepInstanceDao.findStepInstance(databaseJob, "TestStep1");
stepInstanceDaoControl.setReturnValue(databaseStep1);
stepExecutionDao.getLastStepExecution(databaseStep1, null);
@@ -448,12 +459,12 @@ public class SimpleJobRepositoryTests extends TestCase {
stepExecutionDaoControl.replay();
stepInstanceDaoControl.replay();
jobDao.getJobExecutionCount(databaseJob.getId());
jobDaoControl.setReturnValue(1);
jobDao.findJobExecutions(databaseJob);
jobDaoControl.setReturnValue(new ArrayList());
jobDao.saveJobExecution(new JobExecution(databaseJob));
jobDaoControl.setMatcher(new ArgumentsMatcher() {
jobExecutionDao.getJobExecutionCount(databaseJob.getId());
jobExecutionDaoControl.setReturnValue(1);
jobExecutionDao.findJobExecutions(databaseJob);
jobExecutionDaoControl.setReturnValue(new ArrayList());
jobExecutionDao.saveJobExecution(new JobExecution(databaseJob));
jobExecutionDaoControl.setMatcher(new ArgumentsMatcher() {
public boolean matches(Object[] expected, Object[] actual) {
return ((JobExecution) actual[0]).getJobInstance().equals(databaseJob);
}
@@ -462,7 +473,8 @@ public class SimpleJobRepositoryTests extends TestCase {
return "" + arguments[0];
}
});
jobDaoControl.replay();
jobExecutionDaoControl.replay();
jobInstanceDaoControl.replay();
JobInstance job = jobRepository.createJobExecution(jobConfiguration, jobParameters).getJobInstance();
assertTrue(job.equals(databaseJob));
List jobSteps = job.getStepInstances();