Added a "configure-async-event-multicaster" attribute to the <message-bus/> element and a corresponding 'configureAsynEventMulticaster' property to the MessageBus class. When set to 'true', the 'taskScheduler' of the MessageBus will also be configured as the TaskExecutor for the ApplicationContext's ApplicationEventMulticaster. The default value for this property is 'false' (INT-58).

This commit is contained in:
Mark Fisher
2008-05-20 20:32:04 +00:00
parent 886cda5d73
commit 9fa4a6b80e
6 changed files with 99 additions and 2 deletions

View File

@@ -22,10 +22,14 @@ import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.event.SimpleApplicationEventMulticaster;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.task.SyncTaskExecutor;
import org.springframework.integration.ConfigurationException;
import org.springframework.integration.bus.MessageBus;
import org.springframework.integration.bus.TestMessageBusAwareImpl;
@@ -33,6 +37,7 @@ import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.endpoint.TargetEndpoint;
import org.springframework.integration.handler.TestHandlers;
import org.springframework.integration.scheduling.SimpleMessagingTaskScheduler;
import org.springframework.integration.scheduling.Subscription;
/**
@@ -154,4 +159,39 @@ public class MessageBusParserTests {
assertEquals(QueueChannel.class, context.getBean("specifiedTypeChannel").getClass());
}
@Test
public void testMulticasterIsSyncByDefault() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"messageBusWithDefaults.xml", this.getClass());
SimpleApplicationEventMulticaster multicaster = (SimpleApplicationEventMulticaster)
context.getBean(AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME);
DirectFieldAccessor accessor = new DirectFieldAccessor(multicaster);
Object taskExecutor = accessor.getPropertyValue("taskExecutor");
assertEquals(SyncTaskExecutor.class, taskExecutor.getClass());
}
@Test
public void testAsyncMulticasterExplicitlySetToFalse() throws Exception {
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"messageBusWithoutAsyncEventMulticaster.xml", this.getClass());
context.refresh();
SimpleApplicationEventMulticaster multicaster = (SimpleApplicationEventMulticaster)
context.getBean(AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME);
DirectFieldAccessor accessor = new DirectFieldAccessor(multicaster);
Object taskExecutor = accessor.getPropertyValue("taskExecutor");
assertEquals(SyncTaskExecutor.class, taskExecutor.getClass());
}
@Test
public void testAsyncMulticaster() throws Exception {
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"messageBusWithAsyncEventMulticaster.xml", this.getClass());
context.refresh();
SimpleApplicationEventMulticaster multicaster = (SimpleApplicationEventMulticaster)
context.getBean(AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME);
DirectFieldAccessor accessor = new DirectFieldAccessor(multicaster);
Object taskExecutor = accessor.getPropertyValue("taskExecutor");
assertEquals(SimpleMessagingTaskScheduler.class, taskExecutor.getClass());
}
}

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration-core-1.0.xsd">
<message-bus configure-async-event-multicaster="true"/>
</beans:beans>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration-core-1.0.xsd">
<message-bus configure-async-event-multicaster="false"/>
</beans:beans>