From 49d46f336544955ef2246cd13928cf9982073bc7 Mon Sep 17 00:00:00 2001 From: dsyer Date: Mon, 1 Mar 2010 13:23:07 +0000 Subject: [PATCH] RESOLVED - issue BATCH-1508: Make ApplicationContext ids unique and identifiable in ClasspathXmlApplicationContextsFactoryBean --- .../ClassPathXmlApplicationContextFactory.java | 15 +++++++++++++++ ...lassPathXmlApplicationContextFactoryTests.java | 5 ++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/ClassPathXmlApplicationContextFactory.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/ClassPathXmlApplicationContextFactory.java index c34b4cea0..2fe1d6ddd 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/ClassPathXmlApplicationContextFactory.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/ClassPathXmlApplicationContextFactory.java @@ -16,6 +16,7 @@ package org.springframework.batch.core.configuration.support; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -205,6 +206,7 @@ public class ClassPathXmlApplicationContextFactory implements ApplicationContext */ public ResourceXmlApplicationContext(ConfigurableApplicationContext parent) { super(parent); + setId(generateId(resource)); if (parent != null) { Assert.isTrue(parent.getBeanFactory() instanceof DefaultListableBeanFactory, "The parent application context must have a bean factory of type DefaultListableBeanFactory"); @@ -218,6 +220,19 @@ public class ClassPathXmlApplicationContextFactory implements ApplicationContext refresh(); } + /** + * @param resource + * @return an identifier for the context + */ + private String generateId(Resource resource) { + try { + return resource.getURI().toString(); + } + catch (IOException e) { + return resource.toString(); + } + } + @Override protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) { super.customizeBeanFactory(beanFactory); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/ClassPathXmlApplicationContextFactoryTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/ClassPathXmlApplicationContextFactoryTests.java index 6ee78cef7..7e545d97b 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/ClassPathXmlApplicationContextFactoryTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/ClassPathXmlApplicationContextFactoryTests.java @@ -17,6 +17,7 @@ package org.springframework.batch.core.configuration.support; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import org.junit.Test; import org.springframework.batch.core.Job; @@ -39,7 +40,9 @@ public class ClassPathXmlApplicationContextFactoryTests { public void testCreateJob() { factory.setResource(new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "trivial-context.xml"))); - assertNotNull(factory.createApplicationContext()); + ConfigurableApplicationContext context = factory.createApplicationContext(); + assertNotNull(context); + assertTrue("Wrong id: "+context, context.getId().contains("trivial-context.xml")); } @Test