From 3d634060537e4bf899e6641a98bd2df150ff0736 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Tue, 22 Apr 2008 16:56:27 +0000 Subject: [PATCH] MessageBus now registers endpoints and source adapters (and starts if its autoStartup property is set to "true") after receiving a ContextRefreshedEvent rather than the excessively eager start during the 'setApplicationContext' callback (INT-196). --- .../config/JmsSourceAdapterParserTests.java | 3 ++- .../integration/bus/MessageBus.java | 21 +++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParserTests.java b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParserTests.java index 33a668940a..d5a498b167 100644 --- a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParserTests.java +++ b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParserTests.java @@ -27,6 +27,7 @@ import org.junit.Test; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.BeanDefinitionStoreException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.adapter.PollingSourceAdapter; import org.springframework.integration.adapter.jms.JmsMessageDrivenSourceAdapter; @@ -140,7 +141,7 @@ public class JmsSourceAdapterParserTests { new ClassPathXmlApplicationContext("pollingAdapterWithDestinationOnly.xml", this.getClass()); } catch (RuntimeException e) { - assertEquals(BeanCreationException.class, e.getCause().getClass()); + assertEquals(NoSuchBeanDefinitionException.class, e.getCause().getClass()); throw e; } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/bus/MessageBus.java b/spring-integration-core/src/main/java/org/springframework/integration/bus/MessageBus.java index 7973e3cbeb..b7735f4202 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/bus/MessageBus.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/bus/MessageBus.java @@ -31,7 +31,10 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationListener; import org.springframework.context.Lifecycle; +import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.integration.ConfigurationException; import org.springframework.integration.adapter.SourceAdapter; import org.springframework.integration.channel.ChannelRegistry; @@ -64,7 +67,7 @@ import org.springframework.util.Assert; * * @author Mark Fisher */ -public class MessageBus implements ChannelRegistry, EndpointRegistry, ApplicationContextAware, Lifecycle { +public class MessageBus implements ChannelRegistry, EndpointRegistry, ApplicationContextAware, ApplicationListener, Lifecycle { public static final String ERROR_CHANNEL_NAME = "errorChannel"; @@ -109,11 +112,6 @@ public class MessageBus implements ChannelRegistry, EndpointRegistry, Applicatio + "' is allowed per ApplicationContext."); } this.registerChannels(applicationContext); - this.registerEndpoints(applicationContext); - this.registerSourceAdapters(applicationContext); - if (this.autoStartup) { - this.start(); - } } /** @@ -476,4 +474,15 @@ public class MessageBus implements ChannelRegistry, EndpointRegistry, Applicatio } } + public void onApplicationEvent(ApplicationEvent event) { + if (event instanceof ContextRefreshedEvent) { + ApplicationContext context = ((ContextRefreshedEvent) event).getApplicationContext(); + this.registerEndpoints(context); + this.registerSourceAdapters(context); + if (this.autoStartup) { + this.start(); + } + } + } + }