From da3eb280c002b79d845fe4d1aa77e1ed8db66583 Mon Sep 17 00:00:00 2001 From: robokaso Date: Mon, 28 Jul 2008 08:46:30 +0000 Subject: [PATCH] IN PROGRESS - BATCH-518: clean up the *Or* repository methods saveOrUpdate(JobExecution) -> updateJobExecution --- .../batch/core/job/SimpleJob.java | 4 ++-- .../batch/core/repository/JobRepository.java | 10 +++------- .../support/SimpleJobRepository.java | 14 ++++---------- .../SimpleJobRepositoryIntegrationTests.java | 14 +++++++------- .../support/SimpleJobRepositoryTests.java | 19 +++++++------------ .../batch/core/step/JobRepositorySupport.java | 2 +- .../integration/JobRepositorySupport.java | 2 +- .../support/JdbcJobRepositoryTests.java | 2 +- 8 files changed, 26 insertions(+), 41 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/SimpleJob.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/SimpleJob.java index d1e780e78..a5a2b110c 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/SimpleJob.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/SimpleJob.java @@ -136,14 +136,14 @@ public class SimpleJob extends AbstractJob { execution.setEndTime(new Date()); execution.setExitStatus(status); - getJobRepository().saveOrUpdate(execution); + getJobRepository().updateJobExecution(execution); } } private void updateStatus(JobExecution jobExecution, BatchStatus status) { jobExecution.setStatus(status); - getJobRepository().saveOrUpdate(jobExecution); + getJobRepository().updateJobExecution(jobExecution); } /* diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/JobRepository.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/JobRepository.java index 0b6ea5c13..857546365 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/JobRepository.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/JobRepository.java @@ -63,18 +63,14 @@ public interface JobRepository { JobRestartException, JobInstanceAlreadyCompleteException; /** - * Save or Update a {@link JobExecution}. If no ID is found a new instance - * will be saved. If an ID does exist it will be updated. The ID should only - * be assigned to a {@link JobExecution} by calling this method - it should - * be left blank on the first call, and assigned by the - * {@link JobRepository}. + * Update the {@link JobExecution}. * * Preconditions: {@link JobExecution} must contain a valid - * {@link JobInstance}. + * {@link JobInstance} and be saved (have an id assigned). * * @param jobExecution */ - void saveOrUpdate(JobExecution jobExecution); + void updateJobExecution(JobExecution jobExecution); /** * Save or update a {@link StepExecution}. If no ID is found a new instance diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java index 2ef58f282..225117ae1 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java @@ -186,7 +186,7 @@ public class SimpleJobRepository implements JobRepository { // Save the JobExecution so that it picks up an ID (useful for clients // monitoring asynchronous executions): - saveOrUpdate(jobExecution); + jobExecutionDao.saveJobExecution(jobExecution); return jobExecution; @@ -203,19 +203,13 @@ public class SimpleJobRepository implements JobRepository { * @param jobExecution to be stored. * @throws IllegalArgumentException if jobExecution is null. */ - public void saveOrUpdate(JobExecution jobExecution) { + public void updateJobExecution(JobExecution jobExecution) { Assert.notNull(jobExecution, "JobExecution cannot be null."); Assert.notNull(jobExecution.getJobId(), "JobExecution must have a Job ID set."); + Assert.notNull(jobExecution.getId(), "JobExecution must be already saved (have an id assigned)."); - if (jobExecution.getId() == null) { - // existing instance - jobExecutionDao.saveJobExecution(jobExecution); - } - else { - // new execution - jobExecutionDao.updateJobExecution(jobExecution); - } + jobExecutionDao.updateJobExecution(jobExecution); } /** diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java index b7198b0d3..7a4b893d1 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java @@ -55,9 +55,9 @@ public class SimpleJobRepositoryIntegrationTests extends AbstractTransactionalDa assertEquals(job.getName(), firstExecution.getJobInstance().getJobName()); - jobRepository.saveOrUpdate(firstExecution); + jobRepository.updateJobExecution(firstExecution); firstExecution.setEndTime(new Date()); - jobRepository.saveOrUpdate(firstExecution); + jobRepository.updateJobExecution(firstExecution); JobExecution secondExecution = jobRepository.createJobExecution(job, jobParams); assertEquals(firstExecution.getJobInstance(), secondExecution.getJobInstance()); @@ -74,7 +74,7 @@ public class SimpleJobRepositoryIntegrationTests extends AbstractTransactionalDa JobExecution firstExecution = jobRepository.createJobExecution(job, jobParameters); firstExecution.setStartTime(new Date(0)); firstExecution.setEndTime(new Date(1)); - jobRepository.saveOrUpdate(firstExecution); + jobRepository.updateJobExecution(firstExecution); JobExecution secondExecution = jobRepository.createJobExecution(job, jobParameters); assertEquals(firstExecution.getJobInstance(), secondExecution.getJobInstance()); @@ -89,7 +89,7 @@ public class SimpleJobRepositoryIntegrationTests extends AbstractTransactionalDa job.setRestartable(false); JobExecution firstExecution = jobRepository.createJobExecution(job, jobParameters); - jobRepository.saveOrUpdate(firstExecution); + jobRepository.updateJobExecution(firstExecution); try { jobRepository.createJobExecution(job, jobParameters); @@ -111,7 +111,7 @@ public class SimpleJobRepositoryIntegrationTests extends AbstractTransactionalDa // first execution JobExecution firstJobExec = jobRepository.createJobExecution(job, jobParameters); StepExecution firstStepExec = new StepExecution(step.getName(), firstJobExec); - jobRepository.saveOrUpdate(firstJobExec); + jobRepository.updateJobExecution(firstJobExec); jobRepository.saveOrUpdate(firstStepExec); assertEquals(1, jobRepository.getStepExecutionCount(firstJobExec.getJobInstance(), step)); @@ -125,12 +125,12 @@ public class SimpleJobRepositoryIntegrationTests extends AbstractTransactionalDa jobRepository.saveOrUpdate(firstStepExec); firstJobExec.setStatus(BatchStatus.FAILED); firstJobExec.setEndTime(new Date(7)); - jobRepository.saveOrUpdate(firstJobExec); + jobRepository.updateJobExecution(firstJobExec); // second execution JobExecution secondJobExec = jobRepository.createJobExecution(job, jobParameters); StepExecution secondStepExec = new StepExecution(step.getName(), secondJobExec); - jobRepository.saveOrUpdate(secondJobExec); + jobRepository.updateJobExecution(secondJobExec); jobRepository.saveOrUpdate(secondStepExec); assertEquals(2, jobRepository.getStepExecutionCount(secondJobExec.getJobInstance(), step)); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java index 894f1f217..044001efa 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java @@ -116,7 +116,7 @@ public class SimpleJobRepositoryTests extends TestCase { // failure scenario - must have job ID JobExecution jobExecution = new JobExecution(null); try { - jobRepository.saveOrUpdate(jobExecution); + jobRepository.updateJobExecution(jobExecution); fail(); } catch (Exception ex) { @@ -124,21 +124,16 @@ public class SimpleJobRepositoryTests extends TestCase { } } - public void testSaveOrUpdateValidJobExecution() throws Exception { + public void testUpdateValidJobExecution() throws Exception { - JobExecution jobExecution = new JobExecution(new JobInstance(new Long(1), jobParameters, job.getName())); + JobExecution jobExecution = new JobExecution(new JobInstance(new Long(1), jobParameters, job.getName()), new Long(1)); - // new execution - call save on job dao - jobExecutionDao.saveJobExecution(jobExecution); - jobExecutionDaoControl.replay(); - jobRepository.saveOrUpdate(jobExecution); - jobExecutionDaoControl.reset(); - - // update existing execution - jobExecution.setId(new Long(5)); + // new execution - call update on job dao jobExecutionDao.updateJobExecution(jobExecution); jobExecutionDaoControl.replay(); - jobRepository.saveOrUpdate(jobExecution); + jobRepository.updateJobExecution(jobExecution); + jobExecutionDaoControl.verify(); + } public void testSaveOrUpdateStepExecutionException() { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/JobRepositorySupport.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/JobRepositorySupport.java index b54b5280e..04a19fab9 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/JobRepositorySupport.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/JobRepositorySupport.java @@ -39,7 +39,7 @@ public class JobRepositorySupport implements JobRepository { /* (non-Javadoc) * @see org.springframework.batch.container.common.repository.JobRepository#saveOrUpdate(org.springframework.batch.container.common.domain.JobExecution) */ - public void saveOrUpdate(JobExecution jobExecution) { + public void updateJobExecution(JobExecution jobExecution) { } /* (non-Javadoc) diff --git a/spring-batch-integration/src/test/java/org/springframework/batch/integration/JobRepositorySupport.java b/spring-batch-integration/src/test/java/org/springframework/batch/integration/JobRepositorySupport.java index db9664e48..b22b2b415 100644 --- a/spring-batch-integration/src/test/java/org/springframework/batch/integration/JobRepositorySupport.java +++ b/spring-batch-integration/src/test/java/org/springframework/batch/integration/JobRepositorySupport.java @@ -57,7 +57,7 @@ public class JobRepositorySupport implements JobRepository { /* (non-Javadoc) * @see org.springframework.batch.core.repository.JobRepository#saveOrUpdate(org.springframework.batch.core.JobExecution) */ - public void saveOrUpdate(JobExecution jobExecution) { + public void updateJobExecution(JobExecution jobExecution) { } /* (non-Javadoc) diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/support/JdbcJobRepositoryTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/support/JdbcJobRepositoryTests.java index 918e3b564..989264300 100644 --- a/spring-batch-samples/src/test/java/org/springframework/batch/sample/support/JdbcJobRepositoryTests.java +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/support/JdbcJobRepositoryTests.java @@ -165,7 +165,7 @@ public class JdbcJobRepositoryTests { JobExecution execution = repository.createJobExecution(jobConfiguration, new JobParameters()); cacheJobIds(execution); execution.setEndTime(new Timestamp(System.currentTimeMillis())); - repository.saveOrUpdate(execution); + repository.updateJobExecution(execution); execution.setStatus(BatchStatus.FAILED); int before = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM BATCH_JOB_INSTANCE");