From 464b1393b60600a142d45a884e251fb35dc0b34a Mon Sep 17 00:00:00 2001 From: lucasward Date: Wed, 19 Sep 2007 04:06:34 +0000 Subject: [PATCH] Fix for Batch-40, SqlStepDao was not storing Exit-Code correctly. --- .../execution/repository/dao/SqlJobDao.java | 11 +++++---- .../job/DefaultJobExecutorTests.java | 2 +- .../repository/dao/AbstractJobDaoTests.java | 24 +++++++++++++++++-- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/execution/src/main/java/org/springframework/batch/execution/repository/dao/SqlJobDao.java b/execution/src/main/java/org/springframework/batch/execution/repository/dao/SqlJobDao.java index cde82179b..4e257bdd5 100644 --- a/execution/src/main/java/org/springframework/batch/execution/repository/dao/SqlJobDao.java +++ b/execution/src/main/java/org/springframework/batch/execution/repository/dao/SqlJobDao.java @@ -69,10 +69,10 @@ public class SqlJobDao implements JobDao, InitializingBean { // Job Execution SqlStatements private static final String UPDATE_JOB_EXECUTION = "UPDATE %PREFIX%JOB_EXECUTION set START_TIME = ?, END_TIME = ?, " - + " STATUS = ? where ID = ?"; + + " STATUS = ?, EXIT_CODE = ? where ID = ?"; - private static final String SAVE_JOB_EXECUTION = "INSERT into %PREFIX%JOB_EXECUTION(ID, JOB_ID, START_TIME, END_TIME, STATUS)" - + " values (?, ?, ?, ?, ?)"; + private static final String SAVE_JOB_EXECUTION = "INSERT into %PREFIX%JOB_EXECUTION(ID, JOB_ID, START_TIME, " + + "END_TIME, STATUS, EXIT_CODE) values (?, ?, ?, ?, ?, ?)"; private static final String CHECK_JOB_EXECUTION_EXISTS = "SELECT COUNT(*) FROM %PREFIX%JOB_EXECUTION WHERE ID=?"; @@ -190,7 +190,8 @@ public class SqlJobDao implements JobDao, InitializingBean { jobExecution.setId(new Long(jobExecutionIncrementer.nextLongValue())); Object[] parameters = new Object[] { jobExecution.getId(), jobExecution.getJobId(), jobExecution.getStartTime(), - jobExecution.getEndTime(), jobExecution.getStatus().toString() }; + jobExecution.getEndTime(), jobExecution.getStatus().toString(), + jobExecution.getExitCode()}; jdbcTemplate.update(getSaveJobExecutionQuery(), parameters); } @@ -208,7 +209,7 @@ public class SqlJobDao implements JobDao, InitializingBean { Object[] parameters = new Object[] { jobExecution.getStartTime(), jobExecution.getEndTime(), jobExecution.getStatus().toString(), - jobExecution.getId() }; + jobExecution.getExitCode(), jobExecution.getId() }; if (jobExecution.getId() == null) { throw new IllegalArgumentException( diff --git a/execution/src/test/java/org/springframework/batch/execution/job/DefaultJobExecutorTests.java b/execution/src/test/java/org/springframework/batch/execution/job/DefaultJobExecutorTests.java index 57842c63a..39236f127 100644 --- a/execution/src/test/java/org/springframework/batch/execution/job/DefaultJobExecutorTests.java +++ b/execution/src/test/java/org/springframework/batch/execution/job/DefaultJobExecutorTests.java @@ -175,7 +175,7 @@ public class DefaultJobExecutorTests extends TestCase { }); jobExecutor.run(jobConfiguration, jobExecutionContext); assertEquals(2, list.size()); - checkRepository(BatchStatus.COMPLETED); + checkRepository(BatchStatus.COMPLETED, ExitStatus.FINISHED.getExitCode()); } diff --git a/execution/src/test/java/org/springframework/batch/execution/repository/dao/AbstractJobDaoTests.java b/execution/src/test/java/org/springframework/batch/execution/repository/dao/AbstractJobDaoTests.java index 43c0f2a71..a85f19d11 100644 --- a/execution/src/test/java/org/springframework/batch/execution/repository/dao/AbstractJobDaoTests.java +++ b/execution/src/test/java/org/springframework/batch/execution/repository/dao/AbstractJobDaoTests.java @@ -40,7 +40,7 @@ import org.springframework.util.ClassUtils; public abstract class AbstractJobDaoTests extends AbstractTransactionalDataSourceSpringContextTests { - private static final String GET_JOB_EXECUTION = "SELECT JOB_ID, START_TIME, END_TIME, STATUS from " + private static final String GET_JOB_EXECUTION = "SELECT JOB_ID, START_TIME, END_TIME, STATUS, EXIT_CODE from " + "BATCH_JOB_EXECUTION where ID = ?"; protected JobDao jobDao; @@ -164,12 +164,21 @@ public abstract class AbstractJobDaoTests extends public void testUpdateJobExecution() { jobExecution.setStatus(BatchStatus.COMPLETED); + jobExecution.setExitCode("COMPLETED"); jobExecution.setEndTime(new Timestamp(System.currentTimeMillis())); jobDao.update(jobExecution); List executions = retrieveJobExecution(jobExecution.getId()); assertEquals(executions.size(), 1); - assertEquals(jobExecution, ((JobExecution) executions.get(0))); + validateJobExecution(jobExecution, (JobExecution) executions.get(0)); + + } + + public void testSaveJobExecution(){ + + List executions = retrieveJobExecution(jobExecution.getId()); + assertEquals(executions.size(), 1); + validateJobExecution(jobExecution, (JobExecution) executions.get(0)); } public void testUpdateInvalidJobExecution() { @@ -231,6 +240,16 @@ public abstract class AbstractJobDaoTests extends assertEquals(job.getName(), ((Map) jobs.get(0)).get("JOB_NAME")); } + + private void validateJobExecution(JobExecution lhs, JobExecution rhs){ + + //equals operator only checks id + assertEquals(lhs, rhs); + assertEquals(lhs.getStartTime(), rhs.getStartTime()); + assertEquals(lhs.getEndTime(), rhs.getEndTime()); + assertEquals(lhs.getStatus(), rhs.getStatus()); + assertEquals(lhs.getExitCode(), rhs.getExitCode()); + } private List retrieveJobExecution(final Long id) { @@ -242,6 +261,7 @@ public abstract class AbstractJobDaoTests extends execution.setStartTime(rs.getTimestamp(2)); execution.setEndTime(rs.getTimestamp(3)); execution.setStatus(BatchStatus.getStatus(rs.getString(4))); + execution.setExitCode(rs.getString(5)); execution.setId(id); return execution;