INT-736 Added support for the 'scheduler' reference.

This commit is contained in:
Mark Fisher
2009-07-18 00:53:33 +00:00
parent 76da6421d3
commit 260690381c
4 changed files with 45 additions and 4 deletions

View File

@@ -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);

View File

@@ -597,6 +597,21 @@
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="scheduler" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
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.
</xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:expected-type
type="java.util.concurrent.ScheduledExecutorService" />
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="send-timeout" type="xsd:string">
<xsd:annotation>
<xsd:documentation>

View File

@@ -13,7 +13,7 @@
<queue />
</channel>
<delayer id="delayer"
<delayer id="delayerWithDefaultScheduler"
input-channel="input"
output-channel="output"
default-delay="1234"
@@ -22,4 +22,14 @@
send-timeout="987"
wait-for-tasks-to-complete-on-shutdown="true"/>
<delayer id="delayerWithCustomScheduler"
input-channel="input"
output-channel="output"
default-delay="0"
scheduler="testScheduler"/>
<beans:bean id="testScheduler" class="org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean">
<beans:property name="poolSize" value="7"/>
</beans:bean>
</beans:beans>

View File

@@ -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"));
}
}