From 81d96cd63a25fb183f67e46b9ec2eb392b744b34 Mon Sep 17 00:00:00 2001 From: dsyer Date: Mon, 4 Jan 2010 17:47:29 +0000 Subject: [PATCH] BATCH-1474: fix registration error if job name is not the same as bean name --- .../support/DefaultJobLoader.java | 20 ++++++---- .../support/DefaultJobLoaderTests.java | 39 +++++++++++++++++++ 2 files changed, 52 insertions(+), 7 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultJobLoader.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultJobLoader.java index fed3ef92f..b79ab9c07 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultJobLoader.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultJobLoader.java @@ -134,24 +134,30 @@ public class DefaultJobLoader implements JobLoader { contexts.put(factory, context); String[] names = context.getBeanNamesForType(Job.class); - Collection result = new ArrayList(); - for (String name : names) { if (!autoRegistrationDetected) { + Job job = (Job) context.getBean(name); + String jobName = job.getName(); + // On reload try to unregister first if (unregister) { - logger.debug("Unregistering job: " + name + " from context: " + context.getDisplayName()); - jobRegistry.unregister(name); + logger.debug("Unregistering job: " + jobName + " from context: " + context.getDisplayName()); + jobRegistry.unregister(jobName); } - logger.debug("Registering job: " + name + " from context: " + context.getDisplayName()); - JobFactory jobFactory = new ReferenceJobFactory((Job) context.getBean(name)); + logger.debug("Registering job: " + jobName + " from context: " + context.getDisplayName()); + JobFactory jobFactory = new ReferenceJobFactory(job); jobRegistry.register(jobFactory); - jobsRegistered.add(name); + jobsRegistered.add(jobName); } + + } + + Collection result = new ArrayList(); + for (String name : jobsRegistered) { try { result.add(jobRegistry.getJob(name)); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/DefaultJobLoaderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/DefaultJobLoaderTests.java index 93fb83231..36d64f2f5 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/DefaultJobLoaderTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/DefaultJobLoaderTests.java @@ -18,7 +18,11 @@ package org.springframework.batch.core.configuration.support; import static org.junit.Assert.assertEquals; import org.junit.Test; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobParametersIncrementer; import org.springframework.batch.core.configuration.JobRegistry; +import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ClassPathResource; /** @@ -31,6 +35,16 @@ public class DefaultJobLoaderTests { private DefaultJobLoader jobLoader = new DefaultJobLoader(registry); + @Test + public void testLoadWithExplicitName() throws Exception { + ClassPathXmlApplicationContextFactory factory = new ClassPathXmlApplicationContextFactory( + new ByteArrayResource(JOB_XML.getBytes())); + jobLoader.load(factory); + assertEquals(1, registry.getJobNames().size()); + jobLoader.reload(factory); + assertEquals(1, registry.getJobNames().size()); + } + @Test public void testReload() throws Exception { ClassPathXmlApplicationContextFactory factory = new ClassPathXmlApplicationContextFactory( @@ -51,4 +65,29 @@ public class DefaultJobLoaderTests { assertEquals(1, registry.getJobNames().size()); } + private static final String JOB_XML = String + .format( + "", + DefaultJobLoaderTests.class.getName()); + + public static class StubJob implements Job { + + public void execute(JobExecution execution) { + } + + public JobParametersIncrementer getJobParametersIncrementer() { + return null; + } + + public String getName() { + return "job"; + } + + public boolean isRestartable() { + return false; + } + + } + }