From dad1ba02e1f3f1fbc99f1a1638cd804f88490a36 Mon Sep 17 00:00:00 2001 From: robokaso Date: Mon, 18 Feb 2008 12:55: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 StepDao interface --- .../execution/repository/dao/MapStepDao.java | 2 +- .../execution/repository/dao/StepDao.java | 28 ---- .../execution/repository/MockStepDao.java | 5 +- .../repository/SimpleJobRepositoryTests.java | 138 ++++++++++-------- .../simple/StepExecutorInterruptionTests.java | 18 ++- 5 files changed, 91 insertions(+), 100 deletions(-) delete mode 100644 spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/StepDao.java diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapStepDao.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapStepDao.java index 07e30a335..c9e8f77ad 100644 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapStepDao.java +++ b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapStepDao.java @@ -32,7 +32,7 @@ import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.support.transaction.TransactionAwareProxyFactory; import org.springframework.dao.IncorrectResultSizeDataAccessException; -public class MapStepDao implements StepDao { +public class MapStepDao implements StepInstanceDao, StepExecutionDao { private static Map stepsByJobId; private static Map executionsById; diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/StepDao.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/StepDao.java deleted file mode 100644 index e23c6d8f8..000000000 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/StepDao.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 steps. - * - * @author Lucas Ward - * - */ -public interface StepDao extends StepInstanceDao, StepExecutionDao{ - -} diff --git a/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/MockStepDao.java b/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/MockStepDao.java index b80b60739..ea1250176 100644 --- a/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/MockStepDao.java +++ b/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/MockStepDao.java @@ -23,10 +23,11 @@ import org.springframework.batch.core.domain.JobExecution; import org.springframework.batch.core.domain.JobInstance; import org.springframework.batch.core.domain.StepExecution; import org.springframework.batch.core.domain.StepInstance; -import org.springframework.batch.execution.repository.dao.StepDao; +import org.springframework.batch.execution.repository.dao.StepExecutionDao; +import org.springframework.batch.execution.repository.dao.StepInstanceDao; import org.springframework.batch.item.ExecutionContext; -public class MockStepDao implements StepDao { +public class MockStepDao implements StepInstanceDao, StepExecutionDao { private List newSteps; 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 37c88a6f0..1933fd93d 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 @@ -37,12 +37,13 @@ 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.StepDao; +import org.springframework.batch.execution.repository.dao.StepExecutionDao; +import org.springframework.batch.execution.repository.dao.StepInstanceDao; import org.springframework.batch.item.ExecutionContext; /** * Test SimpleJobRepository. The majority of test cases are tested using - * EasyMock, however, there were some issues with using it for the stepDao when + * EasyMock, however, there were some issues with using it for the stepExecutionDao when * testing finding or creating steps, so an actual mock class had to be written. * * @author Lucas Ward @@ -62,11 +63,15 @@ public class SimpleJobRepositoryTests extends TestCase { MockControl jobDaoControl = MockControl.createControl(JobDao.class); - MockControl stepDaoControl = MockControl.createControl(StepDao.class); + MockControl stepExecutionDaoControl = MockControl.createControl(StepExecutionDao.class); + + MockControl stepInstanceDaoControl = MockControl.createControl(StepInstanceDao.class); JobDao jobDao; - StepDao stepDao; + StepExecutionDao stepExecutionDao; + + StepInstanceDao stepInstanceDao; MockStepDao mockStepDao = new MockStepDao(); @@ -85,9 +90,10 @@ public class SimpleJobRepositoryTests extends TestCase { public void setUp() throws Exception { jobDao = (JobDao) jobDaoControl.getMock(); - stepDao = (StepDao) stepDaoControl.getMock(); + stepExecutionDao = (StepExecutionDao) stepExecutionDaoControl.getMock(); + stepInstanceDao = (StepInstanceDao) stepInstanceDaoControl.getMock(); - jobRepository = new SimpleJobRepository(jobDao, jobDao, stepDao, stepDao); + jobRepository = new SimpleJobRepository(jobDao, jobDao, stepInstanceDao, stepExecutionDao); jobParameters = new JobParametersBuilder().toJobParameters(); @@ -135,10 +141,10 @@ public class SimpleJobRepositoryTests extends TestCase { jobDaoControl.setReturnValue(jobExecutions); jobDao.createJobInstance(jobConfiguration.getName(), jobParameters); jobDaoControl.setReturnValue(databaseJob); - stepDao.createStepInstance(databaseJob, "TestStep1"); - stepDaoControl.setReturnValue(databaseStep1); - stepDao.createStepInstance(databaseJob, "TestStep2"); - stepDaoControl.setReturnValue(databaseStep2); + stepInstanceDao.createStepInstance(databaseJob, "TestStep1"); + stepInstanceDaoControl.setReturnValue(databaseStep1); + stepInstanceDao.createStepInstance(databaseJob, "TestStep2"); + stepInstanceDaoControl.setReturnValue(databaseStep2); jobDao.saveJobExecution(new JobExecution(databaseJob)); jobDaoControl.setMatcher(new ArgumentsMatcher() { public boolean matches(Object[] expected, Object[] actual) { @@ -149,7 +155,8 @@ public class SimpleJobRepositoryTests extends TestCase { return "" + arguments[0]; } }); - stepDaoControl.replay(); + stepExecutionDaoControl.replay(); + stepInstanceDaoControl.replay(); jobDaoControl.replay(); JobInstance job = jobRepository.createJobExecution(jobConfiguration, jobParameters).getJobInstance(); assertTrue(job.equals(databaseJob)); @@ -177,23 +184,24 @@ public class SimpleJobRepositoryTests extends TestCase { jobDao.findJobInstances(jobConfiguration.getName(), jobParameters); jobs.add(databaseJob); jobDaoControl.setReturnValue(jobs); - stepDao.findStepInstance(databaseJob, "TestStep1"); - stepDaoControl.setReturnValue(databaseStep1); - stepDao.getLastStepExecution(databaseStep1, jobExecution); - stepDaoControl.setReturnValue(databaseStep1Exec); - stepDao.findExecutionContext(databaseStep1Exec.getId()); - stepDaoControl.setReturnValue(executionContext); - stepDao.getStepExecutionCount(databaseStep1); - stepDaoControl.setReturnValue(1); - stepDao.findStepInstance(databaseJob, "TestStep2"); - stepDaoControl.setReturnValue(databaseStep2); - stepDao.getLastStepExecution(databaseStep2, jobExecution); - stepDaoControl.setReturnValue(databaseStep2Exec); - stepDao.findExecutionContext(databaseStep2Exec.getId()); - stepDaoControl.setReturnValue(executionContext); - stepDao.getStepExecutionCount(databaseStep2); - stepDaoControl.setReturnValue(1); - stepDaoControl.replay(); + stepInstanceDao.findStepInstance(databaseJob, "TestStep1"); + stepInstanceDaoControl.setReturnValue(databaseStep1); + stepExecutionDao.getLastStepExecution(databaseStep1, jobExecution); + stepExecutionDaoControl.setReturnValue(databaseStep1Exec); + stepExecutionDao.findExecutionContext(databaseStep1Exec.getId()); + stepExecutionDaoControl.setReturnValue(executionContext); + stepExecutionDao.getStepExecutionCount(databaseStep1); + stepExecutionDaoControl.setReturnValue(1); + stepInstanceDao.findStepInstance(databaseJob, "TestStep2"); + stepInstanceDaoControl.setReturnValue(databaseStep2); + stepExecutionDao.getLastStepExecution(databaseStep2, jobExecution); + stepExecutionDaoControl.setReturnValue(databaseStep2Exec); + stepExecutionDao.findExecutionContext(databaseStep2Exec.getId()); + stepExecutionDaoControl.setReturnValue(executionContext); + stepExecutionDao.getStepExecutionCount(databaseStep2); + stepExecutionDaoControl.setReturnValue(1); + stepExecutionDaoControl.replay(); + stepInstanceDaoControl.replay(); jobDao.getJobExecutionCount(databaseJob.getId()); jobDaoControl.setReturnValue(1); jobDao.findJobExecutions(databaseJob); @@ -279,10 +287,10 @@ public class SimpleJobRepositoryTests extends TestCase { jobDaoControl.setReturnValue(jobs); jobDao.createJobInstance(jobConfiguration.getName(), jobParameters); jobDaoControl.setReturnValue(databaseJob); - stepDao.createStepInstance(databaseJob, "TestStep1"); - stepDaoControl.setReturnValue(databaseStep1); - stepDao.createStepInstance(databaseJob, "TestStep2"); - stepDaoControl.setReturnValue(databaseStep2); + stepInstanceDao.createStepInstance(databaseJob, "TestStep1"); + stepInstanceDaoControl.setReturnValue(databaseStep1); + stepInstanceDao.createStepInstance(databaseJob, "TestStep2"); + stepInstanceDaoControl.setReturnValue(databaseStep2); jobDao.saveJobExecution(new JobExecution(databaseJob)); jobDaoControl.setMatcher(new ArgumentsMatcher() { public boolean matches(Object[] expected, Object[] actual) { @@ -293,7 +301,8 @@ public class SimpleJobRepositoryTests extends TestCase { return "" + arguments[0]; } }); - stepDaoControl.replay(); + stepExecutionDaoControl.replay(); + stepInstanceDaoControl.replay(); jobDaoControl.replay(); JobInstance job = jobRepository.createJobExecution(jobConfiguration, jobParameters).getJobInstance(); assertTrue(job.equals(databaseJob)); @@ -341,22 +350,22 @@ public class SimpleJobRepositoryTests extends TestCase { stepExecution.setId(new Long(11)); ExecutionContext executionContext = new ExecutionContext(); stepExecution.setExecutionContext(executionContext); - stepDao.updateStepExecution(stepExecution); - stepDao.updateExecutionContext(stepExecution.getId(), executionContext); - stepDaoControl.replay(); + stepExecutionDao.updateStepExecution(stepExecution); + stepExecutionDao.updateExecutionContext(stepExecution.getId(), executionContext); + stepExecutionDaoControl.replay(); jobRepository.saveOrUpdate(stepExecution); - stepDaoControl.verify(); + stepExecutionDaoControl.verify(); } public void testSaveExistingStepExecution() { StepExecution stepExecution = new StepExecution(new StepInstance(new Long(10L)), new JobExecution(null), null); ExecutionContext executionContext = new ExecutionContext(); stepExecution.setExecutionContext(executionContext); - stepDao.saveStepExecution(stepExecution); - stepDao.saveExecutionContext(stepExecution.getId(), executionContext); - stepDaoControl.replay(); + stepExecutionDao.saveStepExecution(stepExecution); + stepExecutionDao.saveExecutionContext(stepExecution.getId(), executionContext); + stepExecutionDaoControl.replay(); jobRepository.saveOrUpdate(stepExecution); - stepDaoControl.verify(); + stepExecutionDaoControl.verify(); } public void testSaveOrUpdateStepExecutionException() { @@ -385,10 +394,10 @@ public class SimpleJobRepositoryTests extends TestCase { jobDaoControl.setReturnValue(jobs); jobDao.createJobInstance(jobConfiguration.getName(), jobParameters); jobDaoControl.setReturnValue(databaseJob); - stepDao.createStepInstance(databaseJob, "TestStep1"); - stepDaoControl.setReturnValue(databaseStep1); - stepDao.createStepInstance(databaseJob, "TestStep2"); - stepDaoControl.setReturnValue(databaseStep2); + stepInstanceDao.createStepInstance(databaseJob, "TestStep1"); + stepInstanceDaoControl.setReturnValue(databaseStep1); + stepInstanceDao.createStepInstance(databaseJob, "TestStep2"); + stepInstanceDaoControl.setReturnValue(databaseStep2); jobDao.saveJobExecution(new JobExecution(databaseJob)); jobDaoControl.setMatcher(new ArgumentsMatcher() { public boolean matches(Object[] expected, Object[] actual) { @@ -399,7 +408,8 @@ public class SimpleJobRepositoryTests extends TestCase { return "" + arguments[0]; } }); - stepDaoControl.replay(); + stepExecutionDaoControl.replay(); + stepInstanceDaoControl.replay(); jobDaoControl.replay(); JobInstance job = jobRepository.createJobExecution(jobConfiguration, jobParameters).getJobInstance(); List jobSteps = job.getStepInstances(); @@ -419,23 +429,25 @@ public class SimpleJobRepositoryTests extends TestCase { jobDao.findJobInstances(jobConfiguration.getName(), jobParameters); jobs.add(databaseJob); jobDaoControl.setReturnValue(jobs); - stepDao.findStepInstance(databaseJob, "TestStep1"); - stepDaoControl.setReturnValue(databaseStep1); - stepDao.getLastStepExecution(databaseStep1, null); - stepDaoControl.setReturnValue(databaseStep1Exec); - stepDao.findExecutionContext(databaseStep1Exec.getId()); - stepDaoControl.setReturnValue(executionContext); - stepDao.getStepExecutionCount(databaseStep1); - stepDaoControl.setReturnValue(1); - stepDao.findStepInstance(databaseJob, "TestStep2"); - stepDaoControl.setReturnValue(databaseStep2); - stepDao.getLastStepExecution(databaseStep2, null); - stepDaoControl.setReturnValue(databaseStep2Exec); - stepDao.findExecutionContext(databaseStep2Exec.getId()); - stepDaoControl.setReturnValue(executionContext); - stepDao.getStepExecutionCount(databaseStep2); - stepDaoControl.setReturnValue(1); - stepDaoControl.replay(); + stepInstanceDao.findStepInstance(databaseJob, "TestStep1"); + stepInstanceDaoControl.setReturnValue(databaseStep1); + stepExecutionDao.getLastStepExecution(databaseStep1, null); + stepExecutionDaoControl.setReturnValue(databaseStep1Exec); + stepExecutionDao.findExecutionContext(databaseStep1Exec.getId()); + stepExecutionDaoControl.setReturnValue(executionContext); + stepExecutionDao.getStepExecutionCount(databaseStep1); + stepExecutionDaoControl.setReturnValue(1); + stepInstanceDao.findStepInstance(databaseJob, "TestStep2"); + stepInstanceDaoControl.setReturnValue(databaseStep2); + stepExecutionDao.getLastStepExecution(databaseStep2, null); + stepExecutionDaoControl.setReturnValue(databaseStep2Exec); + stepExecutionDao.findExecutionContext(databaseStep2Exec.getId()); + stepExecutionDaoControl.setReturnValue(executionContext); + stepExecutionDao.getStepExecutionCount(databaseStep2); + stepExecutionDaoControl.setReturnValue(1); + stepExecutionDaoControl.replay(); + stepInstanceDaoControl.replay(); + jobDao.getJobExecutionCount(databaseJob.getId()); jobDaoControl.setReturnValue(1); jobDao.findJobExecutions(databaseJob); diff --git a/spring-batch-execution/src/test/java/org/springframework/batch/execution/step/simple/StepExecutorInterruptionTests.java b/spring-batch-execution/src/test/java/org/springframework/batch/execution/step/simple/StepExecutorInterruptionTests.java index f3001dd2c..b4fee4139 100644 --- a/spring-batch-execution/src/test/java/org/springframework/batch/execution/step/simple/StepExecutorInterruptionTests.java +++ b/spring-batch-execution/src/test/java/org/springframework/batch/execution/step/simple/StepExecutorInterruptionTests.java @@ -23,17 +23,19 @@ import junit.framework.TestCase; import org.springframework.batch.core.domain.BatchStatus; import org.springframework.batch.core.domain.JobExecution; import org.springframework.batch.core.domain.JobInstance; +import org.springframework.batch.core.domain.JobInterruptedException; import org.springframework.batch.core.domain.JobParameters; import org.springframework.batch.core.domain.JobSupport; import org.springframework.batch.core.domain.StepExecution; import org.springframework.batch.core.domain.StepInstance; -import org.springframework.batch.core.domain.JobInterruptedException; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.execution.repository.SimpleJobRepository; -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.MapJobDao; import org.springframework.batch.execution.repository.dao.MapStepDao; -import org.springframework.batch.execution.repository.dao.StepDao; +import org.springframework.batch.execution.repository.dao.StepExecutionDao; +import org.springframework.batch.execution.repository.dao.StepInstanceDao; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.reader.ItemReaderAdapter; @@ -45,9 +47,13 @@ public class StepExecutorInterruptionTests extends TestCase { private JobRepository jobRepository; - private JobDao jobDao = new MapJobDao(); + private JobInstanceDao jobInstanceDao = new MapJobDao(); + + private JobExecutionDao jobExecutionDao = new MapJobDao(); - private StepDao stepDao = new MapStepDao(); + private StepExecutionDao stepExecutionDao = new MapStepDao(); + + private StepInstanceDao stepInstanceDao = new MapStepDao(); private JobInstance job; @@ -55,7 +61,7 @@ public class StepExecutorInterruptionTests extends TestCase { public void setUp() throws Exception { - jobRepository = new SimpleJobRepository(jobDao, jobDao, stepDao, stepDao); + jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepInstanceDao, stepExecutionDao); JobSupport jobConfiguration = new JobSupport(); step = new RepeatOperationsStep();