diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/MapJobInstanceDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/MapJobInstanceDao.java index 416d94411..4de4b568c 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/MapJobInstanceDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/MapJobInstanceDao.java @@ -47,8 +47,12 @@ public class MapJobInstanceDao implements JobInstanceDao { } - /* (non-Javadoc) - * @see org.springframework.batch.core.repository.dao.JobInstanceDao#getJobInstance(java.lang.Long) + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.repository.dao.JobInstanceDao#getJobInstance + * (java.lang.Long) */ public JobInstance getJobInstance(Long instanceId) { for (JobInstance instance : jobInstances) { @@ -59,8 +63,12 @@ public class MapJobInstanceDao implements JobInstanceDao { return null; } - /* (non-Javadoc) - * @see org.springframework.batch.core.repository.dao.JobInstanceDao#getJobNames() + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.repository.dao.JobInstanceDao#getJobNames + * () */ public List getJobNames() { List result = new ArrayList(); @@ -71,19 +79,27 @@ public class MapJobInstanceDao implements JobInstanceDao { return result; } - /* (non-Javadoc) - * @see org.springframework.batch.core.repository.dao.JobInstanceDao#getLastJobInstances(java.lang.String, int) + /* + * (non-Javadoc) + * + * @seeorg.springframework.batch.core.repository.dao.JobInstanceDao# + * getLastJobInstances(java.lang.String, int) */ public List getLastJobInstances(String jobName, int count) { - ArrayList list = new ArrayList(jobInstances); - Collections.sort(list, new Comparator() { + List result = new ArrayList(); + for (JobInstance instance : jobInstances) { + if (instance.getJobName().equals(jobName)) { + result.add(instance); + } + } + Collections.sort(result, new Comparator() { // sort by ID descending public int compare(JobInstance o1, JobInstance o2) { - return Long.signum(o1.getId()-o2.getId()); + return Long.signum(o1.getId() - o2.getId()); } }); - int length = count>list.size() ? list.size() : count; - return list.subList(0, length); + int length = count > result.size() ? result.size() : count; + return result.subList(0, length); } public JobInstance getJobInstance(JobExecution jobExecution) { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobInstanceDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobInstanceDaoTests.java index 80886710e..d37dda098 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobInstanceDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobInstanceDaoTests.java @@ -27,8 +27,8 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ private String fooJob = "foo"; private JobParameters fooParams = new JobParametersBuilder().addString("stringKey", "stringValue").addLong( - "longKey", Long.MAX_VALUE).addDouble("doubleKey", Double.MAX_VALUE).addDate( - "dateKey", new Date(DATE)).toJobParameters(); + "longKey", Long.MAX_VALUE).addDouble("doubleKey", Double.MAX_VALUE).addDate("dateKey", new Date(DATE)) + .toJobParameters(); protected abstract JobInstanceDao getJobInstanceDao(); @@ -40,7 +40,8 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ /* * Create and retrieve a job instance. */ - @Transactional @Test + @Transactional + @Test public void testCreateAndRetrieve() throws Exception { JobInstance fooInstance = dao.createJobInstance(fooJob, fooParams); @@ -53,7 +54,7 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ assertEquals(fooInstance, retrievedInstance); assertEquals(fooJob, retrievedInstance.getJobName()); assertEquals(fooParams, retrievedParams); - + assertEquals(Long.MAX_VALUE, retrievedParams.getLong("longKey")); assertEquals(Double.MAX_VALUE, retrievedParams.getDouble("doubleKey"), 0.001); assertEquals("stringValue", retrievedParams.getString("stringKey")); @@ -63,7 +64,8 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ /* * Create and retrieve a job instance. */ - @Transactional @Test + @Transactional + @Test public void testCreateAndGetById() throws Exception { JobInstance fooInstance = dao.createJobInstance(fooJob, fooParams); @@ -76,7 +78,7 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ assertEquals(fooInstance, retrievedInstance); assertEquals(fooJob, retrievedInstance.getJobName()); assertEquals(fooParams, retrievedParams); - + assertEquals(Long.MAX_VALUE, retrievedParams.getLong("longKey")); assertEquals(Double.MAX_VALUE, retrievedParams.getDouble("doubleKey"), 0.001); assertEquals("stringValue", retrievedParams.getString("stringKey")); @@ -86,7 +88,8 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ /* * Create and retrieve a job instance. */ - @Transactional @Test + @Transactional + @Test public void testGetMissingById() throws Exception { JobInstance retrievedInstance = dao.getJobInstance(1111111L); @@ -97,34 +100,41 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ /* * Create and retrieve a job instance. */ - @Transactional @Test + @Transactional + @Test public void testGetJobNames() throws Exception { - + testCreateAndRetrieve(); List jobNames = dao.getJobNames(); assertFalse(jobNames.isEmpty()); assertTrue(jobNames.contains(fooJob)); - + } - /* + /** * Create and retrieve a job instance. */ - @Transactional @Test + @Transactional + @Test public void testGetLastInstances() throws Exception { - + testCreateAndRetrieve(); - List jobInstances = dao.getLastJobInstances(fooJob, 1); + + // unrelated job instance that should be ignored by the query + dao.createJobInstance("anotherJob", new JobParameters()); + + List jobInstances = dao.getLastJobInstances(fooJob, 2); assertEquals(1, jobInstances.size()); assertEquals(fooJob, jobInstances.get(0).getJobName()); assertEquals(Integer.valueOf(0), jobInstances.get(0).getVersion()); - + } /** * Trying to create instance twice for the same job+parameters causes error */ - @Transactional @Test + @Transactional + @Test public void testCreateDuplicateInstance() { dao.createJobInstance(fooJob, fooParams); @@ -138,7 +148,8 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ } } - @Transactional @Test + @Transactional + @Test public void testCreationAddsVersion() { JobInstance jobInstance = new JobInstance((long) 1, new JobParameters(), "testVersionAndId"); @@ -149,10 +160,9 @@ public abstract class AbstractJobInstanceDaoTests extends AbstractTransactionalJ assertNotNull(jobInstance.getVersion()); } - - - public void testGetJobInstanceByExecutionId(){ - + + public void testGetJobInstanceByExecutionId() { + } }