From 7a8598e244ddb3ea0911bda716e04d8d6d010032 Mon Sep 17 00:00:00 2001 From: dsyer Date: Wed, 18 Feb 2009 12:54:08 +0000 Subject: [PATCH] RESOLVED - issue BATCH-1086: JdbcJobExecutionDao.getRunningJobExecutions() ignores jobName Change query to use job name. --- .../repository/dao/JdbcJobExecutionDao.java | 7 +++-- .../dao/AbstractJobExecutionDaoTests.java | 16 +++++++--- .../dao/AbstractStepExecutionDaoTests.java | 1 - .../dao/JdbcJobExecutionDaoTests.java | 29 ++++++++++++++----- .../dao/MapJobExecutionDaoTests.java | 6 ++++ 5 files changed, 43 insertions(+), 16 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java index 689af33ba..9f19e372f 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java @@ -73,8 +73,8 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements private static final String GET_EXECUTION_BY_ID = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION" + " from %PREFIX%JOB_EXECUTION where JOB_EXECUTION_ID = ?"; - private static final String GET_RUNNING_EXECUTIONS = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION " - + "JOB_INSTANCE_ID from %PREFIX%JOB_EXECUTION where END_TIME is NULL order by JOB_EXECUTION_ID desc"; + private static final String GET_RUNNING_EXECUTIONS = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION, " + + "JOB_INSTANCE_ID from %PREFIX%JOB_EXECUTION E, %PREFIX%JOB_INSTANCE I where E.JOB_INSTANCE_ID=I.JOB_INSTANCE_ID and I.JOB_NAME=? and E.END_TIME is NULL order by E.JOB_EXECUTION_ID desc"; private static final String CURRENT_VERSION_JOB_EXECUTION = "SELECT VERSION FROM %PREFIX%JOB_EXECUTION WHERE JOB_EXECUTION_ID=?"; @@ -265,7 +265,8 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements result.add(mapper.mapRow(rs, 0)); } }; - getJdbcTemplate().getJdbcOperations().query(getQuery(GET_RUNNING_EXECUTIONS), handler); + getJdbcTemplate().getJdbcOperations() + .query(getQuery(GET_RUNNING_EXECUTIONS), new Object[] { jobName }, handler); return result; } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobExecutionDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobExecutionDaoTests.java index 99b2661a7..971a6b69f 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobExecutionDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobExecutionDaoTests.java @@ -20,23 +20,24 @@ import org.springframework.batch.core.JobInstance; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.StepExecution; import org.springframework.dao.OptimisticLockingFailureException; -import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; -public abstract class AbstractJobExecutionDaoTests extends AbstractTransactionalJUnit4SpringContextTests { +public abstract class AbstractJobExecutionDaoTests { protected JobExecutionDao dao; - protected JobInstance jobInstance = new JobInstance(1L, new JobParameters(), "execTestJob"); + protected JobInstance jobInstance; - protected JobExecution execution = new JobExecution(jobInstance); + protected JobExecution execution; /** * @return tested object ready for use */ protected abstract JobExecutionDao getJobExecutionDao(); + protected abstract JobInstanceDao getJobInstanceDao(); + /** * @return tested object ready for use */ @@ -47,6 +48,8 @@ public abstract class AbstractJobExecutionDaoTests extends AbstractTransactional @Before public void onSetUp() throws Exception { dao = getJobExecutionDao(); + jobInstance = getJobInstanceDao().createJobInstance("execTestJob", new JobParameters()); + execution = new JobExecution(jobInstance); } /** @@ -172,27 +175,32 @@ public abstract class AbstractJobExecutionDaoTests extends AbstractTransactional @Transactional @Test public void testFindRunningExecutions() { + JobExecution exec = new JobExecution(jobInstance); exec.setCreateTime(new Date(0)); exec.setEndTime(new Date(1L)); exec.setLastUpdated(new Date(5L)); dao.saveJobExecution(exec); + exec = new JobExecution(jobInstance); exec.setLastUpdated(new Date(5L)); exec.createStepExecution("step"); dao.saveJobExecution(exec); + StepExecutionDao stepExecutionDao = getStepExecutionDao(); if (stepExecutionDao != null) { for (StepExecution stepExecution : exec.getStepExecutions()) { stepExecutionDao.saveStepExecution(stepExecution); } } + Set values = dao.findRunningJobExecutions(exec.getJobInstance().getJobName()); assertEquals(1, values.size()); JobExecution value = values.iterator().next(); assertEquals(exec, value); assertEquals(5L, value.getLastUpdated().getTime()); + } /** diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java index aa14fce7b..88c99d2c2 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java @@ -22,7 +22,6 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.util.Collection; -import java.util.Collections; import java.util.Date; import org.junit.Before; diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDaoTests.java index c0a1ca978..99cd0499d 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDaoTests.java @@ -1,10 +1,13 @@ package org.springframework.batch.core.repository.dao; +import javax.sql.DataSource; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.jdbc.SimpleJdbcTestUtils; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "sql-dao-test.xml" }) @@ -16,16 +19,26 @@ public class JdbcJobExecutionDaoTests extends AbstractJobExecutionDaoTests { @Autowired private JobExecutionDao jobExecutionDao; + @Autowired + private JobInstanceDao jobInstanceDao; + + private SimpleJdbcTemplate simpleJdbcTemplate; + + @Autowired + public void setDataSource(DataSource dataSource) { + simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); + } + + @Override + protected JobInstanceDao getJobInstanceDao() { + return jobInstanceDao; + } + @Override protected JobExecutionDao getJobExecutionDao() { - deleteFromTables("BATCH_JOB_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION", "BATCH_JOB_PARAMS", + SimpleJdbcTestUtils.deleteFromTables(simpleJdbcTemplate, "BATCH_JOB_EXECUTION_CONTEXT", + "BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION", "BATCH_JOB_PARAMS", "BATCH_JOB_INSTANCE"); - - // job instance needs to exist before job execution can be created - simpleJdbcTemplate - .getJdbcOperations() - .execute( - "insert into BATCH_JOB_INSTANCE (JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (1,'execTestJob', '', 0)"); return jobExecutionDao; } @@ -33,5 +46,5 @@ public class JdbcJobExecutionDaoTests extends AbstractJobExecutionDaoTests { protected StepExecutionDao getStepExecutionDao() { return stepExecutionDao; } - + } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/MapJobExecutionDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/MapJobExecutionDaoTests.java index a1dba96b0..a442cdd02 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/MapJobExecutionDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/MapJobExecutionDaoTests.java @@ -14,11 +14,17 @@ import static org.junit.Assert.*; @RunWith(JUnit4ClassRunner.class) public class MapJobExecutionDaoTests extends AbstractJobExecutionDaoTests { + @Override protected JobExecutionDao getJobExecutionDao() { MapJobExecutionDao.clear(); MapJobInstanceDao.clear(); return new MapJobExecutionDao(); } + + @Override + protected JobInstanceDao getJobInstanceDao() { + return new MapJobInstanceDao(); + } /** * Modifications to saved entity do not affect the persisted object.