From 260690381ccdd8cfbed4c27bb378ecc527e1a0e2 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Sat, 18 Jul 2009 00:53:33 +0000 Subject: [PATCH] INT-736 Added support for the 'scheduler' reference. --- .../integration/config/xml/DelayerParser.java | 2 +- .../config/xml/spring-integration-1.0.xsd | 15 ++++++++++++++ .../config/xml/DelayerParserTests-context.xml | 12 ++++++++++- .../config/xml/DelayerParserTests.java | 20 +++++++++++++++++-- 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/DelayerParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/DelayerParser.java index a49ede4f44..c69f6981dd 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/DelayerParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/DelayerParser.java @@ -39,7 +39,7 @@ public class DelayerParser extends AbstractConsumerEndpointParser { parserContext.getReaderContext().error("The 'default-delay' attribute is required.", element); return null; } - builder.getBeanDefinition().getConstructorArgumentValues().addIndexedArgumentValue(0, defaultDelay); + builder.addConstructorArgValue(defaultDelay); String scheduler = element.getAttribute("scheduler"); if (StringUtils.hasText(scheduler)) { builder.addConstructorArgReference(scheduler); diff --git a/org.springframework.integration/src/main/resources/org/springframework/integration/config/xml/spring-integration-1.0.xsd b/org.springframework.integration/src/main/resources/org/springframework/integration/config/xml/spring-integration-1.0.xsd index b866f6e787..9353fbb495 100644 --- a/org.springframework.integration/src/main/resources/org/springframework/integration/config/xml/spring-integration-1.0.xsd +++ b/org.springframework.integration/src/main/resources/org/springframework/integration/config/xml/spring-integration-1.0.xsd @@ -597,6 +597,21 @@ + + + + Provide a reference to the ScheduledExecutorService instance to which this endpoint should + delegate when scheduling the sending of delayed Messages. If not provided, the default + will use a thread pool of size 1. + + + + + + + + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests-context.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests-context.xml index f4a4ef1ad7..a3afc15a29 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests-context.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests-context.xml @@ -13,7 +13,7 @@ - + + + + + + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests.java index b71536d668..83c41fb4bd 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests.java @@ -24,6 +24,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.core.Ordered; import org.springframework.integration.endpoint.EventDrivenConsumer; import org.springframework.integration.handler.DelayHandler; import org.springframework.test.context.ContextConfiguration; @@ -42,8 +43,8 @@ public class DelayerParserTests { @Test - public void checkConfiguration() { - Object endpoint = context.getBean("delayer"); + public void defaultScheduler() { + Object endpoint = context.getBean("delayerWithDefaultScheduler"); assertEquals(EventDrivenConsumer.class, endpoint.getClass()); Object handler = new DirectFieldAccessor(endpoint).getPropertyValue("handler"); assertEquals(DelayHandler.class, handler.getClass()); @@ -58,4 +59,19 @@ public class DelayerParserTests { assertEquals(Boolean.TRUE, accessor.getPropertyValue("waitForTasksToCompleteOnShutdown")); } + + @Test + public void customScheduler() { + Object endpoint = context.getBean("delayerWithCustomScheduler"); + assertEquals(EventDrivenConsumer.class, endpoint.getClass()); + Object handler = new DirectFieldAccessor(endpoint).getPropertyValue("handler"); + assertEquals(DelayHandler.class, handler.getClass()); + DelayHandler delayHandler = (DelayHandler) handler; + assertEquals(Ordered.LOWEST_PRECEDENCE, delayHandler.getOrder()); + DirectFieldAccessor accessor = new DirectFieldAccessor(delayHandler); + assertEquals(context.getBean("output"), accessor.getPropertyValue("outputChannel")); + assertEquals(new Long(0), accessor.getPropertyValue("defaultDelay")); + assertEquals(context.getBean("testScheduler"), accessor.getPropertyValue("scheduler")); + } + }