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

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

cleaned up method signatures in dao interfaces to uniformly use domain object arguments (rather than ids sometimes)
This commit is contained in:
robokaso
2008-02-18 13:45:02 +00:00
parent ac83e929b1
commit 942765093b
12 changed files with 55 additions and 56 deletions

View File

@@ -171,7 +171,7 @@ public class SimpleJobRepository implements JobRepository {
if (jobs.size() == 1) {
// One job was found
jobInstance = (JobInstance) jobs.get(0);
jobInstance.setJobExecutionCount(jobExecutionDao.getJobExecutionCount(jobInstance.getId()));
jobInstance.setJobExecutionCount(jobExecutionDao.getJobExecutionCount(jobInstance));
if (jobInstance.getJobExecutionCount() > job.getStartLimit()) {
throw new BatchRestartException("Restart Max exceeded for Job: " + jobInstance.toString());
}
@@ -264,12 +264,12 @@ public class SimpleJobRepository implements JobRepository {
jobExecutionDao.saveJobExecution(jobExecution);
}
stepExecutionDao.saveStepExecution(stepExecution);
stepExecutionDao.saveExecutionContext(stepExecution.getId(), stepExecution.getExecutionContext());
stepExecutionDao.saveExecutionContext(stepExecution);
}
else {
// existing execution, update
stepExecutionDao.updateStepExecution(stepExecution);
stepExecutionDao.updateExecutionContext(stepExecution.getId(), stepExecution.getExecutionContext());
stepExecutionDao.updateExecutionContext(stepExecution);
}
}
@@ -316,7 +316,7 @@ public class SimpleJobRepository implements JobRepository {
stepInstance.setLastExecution(stepExecutionDao.getLastStepExecution(stepInstance, lastJobExecution));
if (stepInstance.getLastExecution() != null) {
ExecutionContext executionContext = stepExecutionDao.findExecutionContext(stepInstance
.getLastExecution().getId());
.getLastExecution());
stepInstance.getLastExecution().setExecutionContext(executionContext);
}
stepInstance.setStepExecutionCount(stepExecutionDao.getStepExecutionCount(stepInstance));

View File

@@ -65,8 +65,8 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
* @see JobDao#getJobExecutionCount(JobInstance)
* @throws IllegalArgumentException if jobId is null.
*/
public int getJobExecutionCount(Long jobId) {
public int getJobExecutionCount(JobInstance jobInstance) {
Long jobId = jobInstance.getId();
Assert.notNull(jobId, "JobId cannot be null");
Object[] parameters = new Object[] { jobId };

View File

@@ -88,8 +88,9 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao
private DataFieldMaxValueIncrementer stepExecutionIncrementer;
public ExecutionContext findExecutionContext(final Long executionId) {
public ExecutionContext findExecutionContext(final StepExecution stepExecution) {
final Long executionId = stepExecution.getId();
Assert.notNull(executionId, "ExecutionId must not be null.");
final ExecutionContext executionContext = new ExecutionContext();
@@ -152,8 +153,10 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao
* attributes that don't match a provided type must be serialized into a
* blob.
*/
public void saveExecutionContext(final Long executionId, final ExecutionContext executionContext) {
public void saveExecutionContext(final StepExecution stepExecution) {
final Long executionId = stepExecution.getId();
final ExecutionContext executionContext = stepExecution.getExecutionContext();
Assert.notNull(executionId, "ExecutionId must not be null.");
Assert.notNull(executionContext, "The ExecutionContext must not be null.");
@@ -265,8 +268,10 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao
*
* @see {@link LobCreator}
*/
public void updateExecutionContext(final Long executionId, ExecutionContext executionContext) {
public void updateExecutionContext(final StepExecution stepExecution) {
Long executionId = stepExecution.getId();
ExecutionContext executionContext = stepExecution.getExecutionContext();
Assert.notNull(executionId, "ExecutionId must not be null.");
Assert.notNull(executionContext, "The ExecutionContext must not be null.");

View File

@@ -33,13 +33,11 @@ public interface JobExecutionDao {
void updateJobExecution(JobExecution jobExecution);
/**
* Return the number of JobExecutions with the given jobInstanceId
* Return the number of JobExecutions for the given JobInstance
*
* Preconditions: jobInstance must have an id.
*
* @param jobInstanceId
*/
int getJobExecutionCount(Long jobInstanceId);
int getJobExecutionCount(JobInstance jobInstance);
/**
* Return list of JobExecutions for given JobInstance.

View File

@@ -66,8 +66,8 @@ public class MapJobDao implements JobInstanceDao, JobExecutionDao {
return list;
}
public int getJobExecutionCount(Long jobId) {
Set executions = (Set) executionsById.get(jobId);
public int getJobExecutionCount(JobInstance jobInstance) {
Set executions = (Set) executionsById.get(jobInstance.getId());
if (executions==null) return 0;
return executions.size(); }

View File

@@ -152,16 +152,14 @@ public class MapStepDao implements StepInstanceDao, StepExecutionDao {
// no-op
}
public ExecutionContext findExecutionContext(Long executionId) {
public ExecutionContext findExecutionContext(StepExecution stepExecution) {
return null;
}
public void saveExecutionContext(Long executionId,
ExecutionContext executionContext) {
public void saveExecutionContext(StepExecution stepExecution) {
}
public void updateExecutionContext(Long executionId,
ExecutionContext executionContext) {
public void updateExecutionContext(StepExecution stepExecution) {
}
public StepExecution getLastStepExecution(StepInstance stepInstance, JobExecution jobExecution) {

View File

@@ -44,7 +44,7 @@ public interface StepExecutionDao {
* {@link ExecutionContext} will be returned.
* @throws IllegalArgumentException if the id is null.
*/
ExecutionContext findExecutionContext(final Long executionId);
ExecutionContext findExecutionContext(StepExecution stepExecution);
/**
* Save the provided {@link ExecutionContext} for the given executionId.
@@ -54,7 +54,7 @@ public interface StepExecutionDao {
* @throws IllegalArgumentException if the executionId or attributes are
* null.
*/
void saveExecutionContext(final Long executionId, final ExecutionContext executionContext);
void saveExecutionContext(StepExecution stepExecution);
/**
* Update the provided ExecutionContext.
@@ -62,7 +62,7 @@ public interface StepExecutionDao {
* @param executionId
* @param executionContext
*/
void updateExecutionContext(final Long executionId, ExecutionContext executionContext);
void updateExecutionContext(StepExecution stepExecution);
/**
* @param lastJobExecution last job execution

View File

@@ -75,16 +75,14 @@ public class MockStepDao implements StepInstanceDao, StepExecutionDao {
return null;
}
public ExecutionContext findExecutionContext(Long executionId) {
public ExecutionContext findExecutionContext(StepExecution stepExecution) {
return null;
}
public void saveExecutionContext(Long executionId,
ExecutionContext executionContext) {
public void saveExecutionContext(StepExecution stepExecution) {
}
public void updateExecutionContext(Long executionId,
ExecutionContext executionContext) {
public void updateExecutionContext(StepExecution stepExecution) {
}
public Entity getStepExecution(Long stepExecutionId,

View File

@@ -184,8 +184,8 @@ public class SimpleJobRepositoryTests extends TestCase {
// and the executions in the list contain one with an end date
execution.setEndTime(new Date(System.currentTimeMillis()));
Entity databaseStep1Exec = new StepExecution(databaseStep1, execution, new Long(1));
Entity databaseStep2Exec = new StepExecution(databaseStep2, execution, new Long(2));
StepExecution databaseStep1Exec = new StepExecution(databaseStep1, execution, new Long(1));
StepExecution databaseStep2Exec = new StepExecution(databaseStep2, execution, new Long(2));
List jobs = new ArrayList();
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
@@ -195,7 +195,7 @@ public class SimpleJobRepositoryTests extends TestCase {
stepInstanceDaoControl.setReturnValue(databaseStep1);
stepExecutionDao.getLastStepExecution(databaseStep1, jobExecution);
stepExecutionDaoControl.setReturnValue(databaseStep1Exec);
stepExecutionDao.findExecutionContext(databaseStep1Exec.getId());
stepExecutionDao.findExecutionContext(databaseStep1Exec);
stepExecutionDaoControl.setReturnValue(executionContext);
stepExecutionDao.getStepExecutionCount(databaseStep1);
stepExecutionDaoControl.setReturnValue(1);
@@ -203,13 +203,13 @@ public class SimpleJobRepositoryTests extends TestCase {
stepInstanceDaoControl.setReturnValue(databaseStep2);
stepExecutionDao.getLastStepExecution(databaseStep2, jobExecution);
stepExecutionDaoControl.setReturnValue(databaseStep2Exec);
stepExecutionDao.findExecutionContext(databaseStep2Exec.getId());
stepExecutionDao.findExecutionContext(databaseStep2Exec);
stepExecutionDaoControl.setReturnValue(executionContext);
stepExecutionDao.getStepExecutionCount(databaseStep2);
stepExecutionDaoControl.setReturnValue(1);
stepExecutionDaoControl.replay();
stepInstanceDaoControl.replay();
jobExecutionDao.getJobExecutionCount(databaseJob.getId());
jobExecutionDao.getJobExecutionCount(databaseJob);
jobExecutionDaoControl.setReturnValue(1);
jobExecutionDao.findJobExecutions(databaseJob);
jobExecutionDaoControl.setReturnValue(executions);
@@ -269,7 +269,7 @@ public class SimpleJobRepositoryTests extends TestCase {
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobs.add(databaseJob);
jobInstanceDaoControl.setReturnValue(jobs);
jobExecutionDao.getJobExecutionCount(databaseJob.getId());
jobExecutionDao.getJobExecutionCount(databaseJob);
// return a greater execution count then the start limit, should throw
// exception
jobExecutionDaoControl.setReturnValue(2);
@@ -361,7 +361,7 @@ public class SimpleJobRepositoryTests extends TestCase {
ExecutionContext executionContext = new ExecutionContext();
stepExecution.setExecutionContext(executionContext);
stepExecutionDao.updateStepExecution(stepExecution);
stepExecutionDao.updateExecutionContext(stepExecution.getId(), executionContext);
stepExecutionDao.updateExecutionContext(stepExecution);
stepExecutionDaoControl.replay();
jobRepository.saveOrUpdate(stepExecution);
stepExecutionDaoControl.verify();
@@ -372,7 +372,7 @@ public class SimpleJobRepositoryTests extends TestCase {
ExecutionContext executionContext = new ExecutionContext();
stepExecution.setExecutionContext(executionContext);
stepExecutionDao.saveStepExecution(stepExecution);
stepExecutionDao.saveExecutionContext(stepExecution.getId(), executionContext);
stepExecutionDao.saveExecutionContext(stepExecution);
stepExecutionDaoControl.replay();
jobRepository.saveOrUpdate(stepExecution);
stepExecutionDaoControl.verify();
@@ -433,8 +433,8 @@ public class SimpleJobRepositoryTests extends TestCase {
public void testFindStepsFixesInvalidExecutionContext() throws Exception {
Entity databaseStep1Exec = new StepExecution(databaseStep1, null, new Long(1));
Entity databaseStep2Exec = new StepExecution(databaseStep2, null, new Long(2));
StepExecution databaseStep1Exec = new StepExecution(databaseStep1, null, new Long(1));
StepExecution databaseStep2Exec = new StepExecution(databaseStep2, null, new Long(2));
List jobs = new ArrayList();
jobInstanceDao.findJobInstances(jobConfiguration.getName(), jobParameters);
@@ -444,7 +444,7 @@ public class SimpleJobRepositoryTests extends TestCase {
stepInstanceDaoControl.setReturnValue(databaseStep1);
stepExecutionDao.getLastStepExecution(databaseStep1, null);
stepExecutionDaoControl.setReturnValue(databaseStep1Exec);
stepExecutionDao.findExecutionContext(databaseStep1Exec.getId());
stepExecutionDao.findExecutionContext(databaseStep1Exec);
stepExecutionDaoControl.setReturnValue(executionContext);
stepExecutionDao.getStepExecutionCount(databaseStep1);
stepExecutionDaoControl.setReturnValue(1);
@@ -452,14 +452,14 @@ public class SimpleJobRepositoryTests extends TestCase {
stepInstanceDaoControl.setReturnValue(databaseStep2);
stepExecutionDao.getLastStepExecution(databaseStep2, null);
stepExecutionDaoControl.setReturnValue(databaseStep2Exec);
stepExecutionDao.findExecutionContext(databaseStep2Exec.getId());
stepExecutionDao.findExecutionContext(databaseStep2Exec);
stepExecutionDaoControl.setReturnValue(executionContext);
stepExecutionDao.getStepExecutionCount(databaseStep2);
stepExecutionDaoControl.setReturnValue(1);
stepExecutionDaoControl.replay();
stepInstanceDaoControl.replay();
jobExecutionDao.getJobExecutionCount(databaseJob.getId());
jobExecutionDao.getJobExecutionCount(databaseJob);
jobExecutionDaoControl.setReturnValue(1);
jobExecutionDao.findJobExecutions(databaseJob);
jobExecutionDaoControl.setReturnValue(new ArrayList());

View File

@@ -199,20 +199,20 @@ public abstract class AbstractJobDaoTests extends
public void testIncrementExecutionCount() {
// 1 JobExection already added in setup
assertEquals(jobExecutionDao.getJobExecutionCount(jobInstance.getId()), 1);
assertEquals(jobExecutionDao.getJobExecutionCount(jobInstance), 1);
// Save new JobExecution for same job
JobExecution testJobExecution = new JobExecution(jobInstance);
jobExecutionDao.saveJobExecution(testJobExecution);
// JobExecutionCount should be incremented by 1
assertEquals(jobExecutionDao.getJobExecutionCount(jobInstance.getId()), 2);
assertEquals(jobExecutionDao.getJobExecutionCount(jobInstance), 2);
}
public void testZeroExecutionCount() {
JobInstance testJob = jobInstanceDao.createJobInstance("test", new JobParameters());
// no jobExecutions saved for new job, count should be 0
assertEquals(jobExecutionDao.getJobExecutionCount(testJob.getId()), 0);
assertEquals(jobExecutionDao.getJobExecutionCount(testJob), 0);
}
public void testJobWithSimpleJobIdentifier() throws Exception {

View File

@@ -99,7 +99,7 @@ public abstract class AbstractStepDaoTests extends AbstractTransactionalDataSour
jobExecution = new JobExecution(step2.getJobInstance());
jobExecutionDao.saveJobExecution(jobExecution);
stepExecution = new StepExecution(step1, jobExecution, null);
stepExecution = new StepExecution(step1, jobExecution, new Long(1));
stepExecution.setStatus(BatchStatus.STARTED);
stepExecution.setStartTime(new Date(System.currentTimeMillis()));
stepExecutionDao.saveStepExecution(stepExecution);
@@ -153,10 +153,10 @@ public abstract class AbstractStepDaoTests extends AbstractTransactionalDataSour
}
public void testUpdateStepWithExecutionContext() {
stepExecutionDao.saveExecutionContext(step1.getId(), executionContext);
stepExecution.setExecutionContext(executionContext);
stepExecutionDao.saveExecutionContext(stepExecution);
StepInstance tempStep = stepInstanceDao.findStepInstance(jobInstance, step1.getName());
ExecutionContext tempAttributes = stepExecutionDao.findExecutionContext(step1.getId());
ExecutionContext tempAttributes = stepExecutionDao.findExecutionContext(stepExecution);
assertEquals(tempStep, step1);
assertEquals(executionContext, tempAttributes);
}
@@ -245,13 +245,13 @@ public abstract class AbstractStepDaoTests extends AbstractTransactionalDataSour
}
public void testSaveExecutionContext(){
stepExecutionDao.saveExecutionContext(stepExecution.getId(), executionContext);
ExecutionContext attributes = stepExecutionDao.findExecutionContext(stepExecution.getId());
stepExecution.setExecutionContext(executionContext);
stepExecutionDao.saveExecutionContext(stepExecution);
ExecutionContext attributes = stepExecutionDao.findExecutionContext(stepExecution);
assertEquals(executionContext, attributes);
executionContext.putString("newString", "newString");
stepExecutionDao.updateExecutionContext(stepExecution.getId(), executionContext);
attributes = stepExecutionDao.findExecutionContext(stepExecution.getId());
stepExecutionDao.updateExecutionContext(stepExecution);
attributes = stepExecutionDao.findExecutionContext(stepExecution);
assertEquals(executionContext, attributes);
}

View File

@@ -50,7 +50,7 @@ public class MapJobDaoTests extends TestCase {
public void testNoExecutionsForNewJob() throws Exception {
JobInstance job = dao.createJobInstance("foo", jobParameters);
assertEquals(0, dao.getJobExecutionCount(job.getId()));
assertEquals(0, dao.getJobExecutionCount(job));
}
public void testSaveExecutionUpdatesId() throws Exception {
@@ -63,7 +63,7 @@ public class MapJobDaoTests extends TestCase {
public void testCorrectExecutionCountForExistingJob() throws Exception {
JobInstance job = dao.createJobInstance("foo", jobParameters);
dao.saveJobExecution(new JobExecution(job));
assertEquals(1, dao.getJobExecutionCount(job.getId()));
assertEquals(1, dao.getJobExecutionCount(job));
}
public void testMultipleExecutionsPerExisting() throws Exception {
@@ -71,7 +71,7 @@ public class MapJobDaoTests extends TestCase {
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.getId()));
assertEquals(2, dao.getJobExecutionCount(job));
}
public void testGetJobExecution(){