From ac83e929b1e2eed977de867f1ab03429451f65b5 Mon Sep 17 00:00:00 2001 From: robokaso Date: Mon, 18 Feb 2008 13:07:20 +0000 Subject: [PATCH] IN PROGRESS - issue BATCH-340: Refactor JobRepository for greater clarity and consistency. http://jira.springframework.org/browse/BATCH-340 removed obsolete JobDao interface --- .../repository/SimpleJobRepository.java | 1 - .../execution/repository/dao/JobDao.java | 28 ---- .../execution/repository/dao/MapJobDao.java | 2 +- .../repository/SimpleJobRepositoryTests.java | 132 ++++++++++-------- 4 files changed, 73 insertions(+), 90 deletions(-) delete mode 100644 spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/JobDao.java diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/SimpleJobRepository.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/SimpleJobRepository.java index 37cb1965b..e2b7ea686 100644 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/SimpleJobRepository.java +++ b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/SimpleJobRepository.java @@ -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; diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/JobDao.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/JobDao.java deleted file mode 100644 index 622b537a1..000000000 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/JobDao.java +++ /dev/null @@ -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 { - -} diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapJobDao.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapJobDao.java index 0a3d30942..7f01829f0 100644 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapJobDao.java +++ b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapJobDao.java @@ -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; diff --git a/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/SimpleJobRepositoryTests.java b/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/SimpleJobRepositoryTests.java index 1933fd93d..ca7baf480 100644 --- a/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/SimpleJobRepositoryTests.java +++ b/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/SimpleJobRepositoryTests.java @@ -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();