The <poller/> element no longer defines trigger properties (interval, initial-delay, cron, etc). Instead it expects a sub-element - either <interval-trigger/> or <cron-trigger/> (INT-423).
This commit is contained in:
@@ -30,6 +30,7 @@ import org.springframework.integration.scheduling.Trigger;
|
||||
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.util.xml.DomUtils;
|
||||
|
||||
/**
|
||||
* Shared utility methods for integration namespace parsers.
|
||||
@@ -141,26 +142,38 @@ public abstract class IntegrationNamespaceUtils {
|
||||
*/
|
||||
public static void configureTrigger(Element pollerElement, BeanDefinitionBuilder targetBuilder) {
|
||||
Trigger trigger = null;
|
||||
String interval = pollerElement.getAttribute("interval");
|
||||
String cron = pollerElement.getAttribute("cron");
|
||||
Assert.isTrue(StringUtils.hasText(interval) ^ StringUtils.hasText(cron),
|
||||
"A <poller> element must include either an 'interval' or a 'cron' expression (but not both).");
|
||||
if (StringUtils.hasText(interval)) {
|
||||
Long period = Long.valueOf(interval);
|
||||
IntervalTrigger intervalTrigger = new IntervalTrigger(period);
|
||||
String initialDelay = pollerElement.getAttribute("initial-delay");
|
||||
if (StringUtils.hasText(initialDelay)) {
|
||||
intervalTrigger.setInitialDelay(Long.valueOf(initialDelay));
|
||||
}
|
||||
intervalTrigger.setFixedRate("true".equals(pollerElement.getAttribute("fixed-rate").toLowerCase()));
|
||||
trigger = intervalTrigger;
|
||||
Element intervalElement = DomUtils.getChildElementByTagName(pollerElement, "interval-trigger");
|
||||
if (intervalElement != null) {
|
||||
trigger = createIntervalTrigger(intervalElement);
|
||||
}
|
||||
if (StringUtils.hasText(pollerElement.getAttribute("cron"))) {
|
||||
trigger = new CronTrigger(pollerElement.getAttribute("cron"));
|
||||
else {
|
||||
Element cronElement = DomUtils.getChildElementByTagName(pollerElement, "cron-trigger");
|
||||
Assert.notNull(cronElement,
|
||||
"A <poller> element must include either an <interval-trigger/> or <cron-trigger/> child element.");
|
||||
trigger = createCronTrigger(cronElement);
|
||||
}
|
||||
targetBuilder.addPropertyValue("trigger", trigger);
|
||||
}
|
||||
|
||||
private static Trigger createIntervalTrigger(Element element) {
|
||||
String interval = element.getAttribute("interval");
|
||||
Assert.hasText(interval, "the 'interval' attribute is required for an <interval-trigger/>");
|
||||
Long period = Long.valueOf(interval);
|
||||
IntervalTrigger trigger = new IntervalTrigger(period);
|
||||
String initialDelay = element.getAttribute("initial-delay");
|
||||
if (StringUtils.hasText(initialDelay)) {
|
||||
trigger.setInitialDelay(Long.valueOf(initialDelay));
|
||||
}
|
||||
trigger.setFixedRate("true".equals(element.getAttribute("fixed-rate").toLowerCase()));
|
||||
return trigger;
|
||||
}
|
||||
|
||||
private static Trigger createCronTrigger(Element element) {
|
||||
String cronExpression = element.getAttribute("expression");
|
||||
Assert.hasText(cronExpression, "the 'expression' attribute is required for a <cron-trigger/>");
|
||||
return new CronTrigger(cronExpression);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a "transactional" element and configure the "transactionManager" and "transactionDefinition"
|
||||
* properties for the target builder.
|
||||
|
||||
@@ -231,12 +231,12 @@
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:sequence>
|
||||
<xsd:choice minOccurs="1" maxOccurs="1">
|
||||
<xsd:element ref="interval-trigger"/>
|
||||
<xsd:element ref="cron-trigger"/>
|
||||
</xsd:choice>
|
||||
<xsd:element name="transactional" type="transactionalType" minOccurs="0" maxOccurs="1"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="interval" type="xsd:long"/>
|
||||
<xsd:attribute name="cron" type="xsd:string"/>
|
||||
<xsd:attribute name="initial-delay" type="xsd:long"/>
|
||||
<xsd:attribute name="fixed-rate" type="xsd:boolean"/>
|
||||
<xsd:attribute name="receive-timeout" type="xsd:long"/>
|
||||
<xsd:attribute name="send-timeout" type="xsd:long"/>
|
||||
<xsd:attribute name="max-messages-per-poll" type="xsd:long"/>
|
||||
@@ -244,6 +244,31 @@
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="interval-trigger">
|
||||
<xsd:complexType>
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Defines an interval-based trigger.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="interval" type="xsd:string"/>
|
||||
<xsd:attribute name="initial-delay" type="xsd:string"/>
|
||||
<xsd:attribute name="fixed-rate" type="xsd:boolean"/>
|
||||
<!-- TODO: add time-unit -->
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="cron-trigger">
|
||||
<xsd:complexType>
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Defines an cron-based trigger.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="expression" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="selector-chain">
|
||||
<xsd:complexType>
|
||||
<xsd:annotation>
|
||||
|
||||
@@ -177,7 +177,8 @@ public class CronSequenceGenerator {
|
||||
private void parse(String expression) throws IllegalArgumentException {
|
||||
String[] fields = StringUtils.tokenizeToStringArray(expression, " ");
|
||||
if (fields.length != 6) {
|
||||
throw new IllegalArgumentException(String.format("Expression must consist of 6 fields (found %d in %s)",
|
||||
throw new IllegalArgumentException(String.format("" +
|
||||
"cron expression must consist of 6 fields (found %d in %s)",
|
||||
fields.length, expression));
|
||||
}
|
||||
setNumberHits(seconds, fields[0], 60);
|
||||
|
||||
@@ -5,22 +5,29 @@
|
||||
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-1.0.xsd">
|
||||
|
||||
<message-bus enable-annotations="true"/>
|
||||
|
||||
<channel id="input">
|
||||
<queue capacity="5"/>
|
||||
</channel>
|
||||
<aggregator ref="summer" method="sum" input-channel="input"
|
||||
output-channel="output">
|
||||
<poller task-executor="executor" interval="20" max-messages-per-poll="5"/>
|
||||
|
||||
<aggregator ref="summer" method="sum" input-channel="input" output-channel="output">
|
||||
<poller task-executor="executor" max-messages-per-poll="5">
|
||||
<interval-trigger interval="20"/>
|
||||
</poller>
|
||||
</aggregator>
|
||||
|
||||
<beans:bean id="executor"
|
||||
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
|
||||
<beans:property name="corePoolSize" value="5" />
|
||||
</beans:bean>
|
||||
|
||||
<channel id="output">
|
||||
<queue capacity="5" />
|
||||
</channel>
|
||||
|
||||
<beans:bean id="summer"
|
||||
class="org.springframework.integration.aggregator.integration.ConcurrentAggregatorIntegrationTests$SummingAggregator" />
|
||||
|
||||
</beans:beans>
|
||||
@@ -18,7 +18,9 @@
|
||||
<outbound-channel-adapter id="methodInvokingConsumer" ref="testBean" method="store"/>
|
||||
|
||||
<inbound-channel-adapter id="methodInvokingSource" ref="testBean" method="getMessage" channel="queueChannel">
|
||||
<poller interval="10000" max-messages-per-poll="1"/>
|
||||
<poller max-messages-per-poll="1">
|
||||
<interval-trigger interval="10000"/>
|
||||
</poller>
|
||||
</inbound-channel-adapter>
|
||||
|
||||
<beans:bean id="consumer" class="org.springframework.integration.config.TestConsumer"/>
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
</channel>
|
||||
|
||||
<service-activator input-channel="testChannel" ref="testHandler">
|
||||
<poller interval="100"/>
|
||||
<poller>
|
||||
<interval-trigger interval="100"/>
|
||||
</poller>
|
||||
</service-activator>
|
||||
|
||||
<beans:bean id="testHandler" class="org.springframework.integration.config.TestHandler">
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
ref="testBean"
|
||||
method="good"
|
||||
output-channel="output">
|
||||
<poller interval="10000" max-messages-per-poll="1">
|
||||
<poller max-messages-per-poll="1">
|
||||
<interval-trigger interval="10000"/>
|
||||
<transactional transaction-manager="txManager" propagation="MANDATORY"/>
|
||||
</poller>
|
||||
</service-activator>
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
ref="testBean"
|
||||
method="good"
|
||||
output-channel="output">
|
||||
<poller interval="10000" max-messages-per-poll="1">
|
||||
<poller max-messages-per-poll="1">
|
||||
<interval-trigger interval="10000"/>
|
||||
<transactional transaction-manager="txManager" propagation="NOT_SUPPORTED"/>
|
||||
</poller>
|
||||
</service-activator>
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
ref="testBean"
|
||||
method="good"
|
||||
output-channel="output">
|
||||
<poller interval="10000" max-messages-per-poll="1">
|
||||
<poller max-messages-per-poll="1">
|
||||
<interval-trigger interval="10000"/>
|
||||
<transactional transaction-manager="txManager" propagation="REQUIRED"/>
|
||||
</poller>
|
||||
</service-activator>
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
ref="testBean"
|
||||
method="good"
|
||||
output-channel="output">
|
||||
<poller interval="10000" max-messages-per-poll="1">
|
||||
<poller max-messages-per-poll="1">
|
||||
<interval-trigger interval="10000"/>
|
||||
<transactional transaction-manager="txManager" propagation="REQUIRES_NEW"/>
|
||||
</poller>
|
||||
</service-activator>
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
ref="testBean"
|
||||
method="good"
|
||||
output-channel="output">
|
||||
<poller interval="10000" max-messages-per-poll="1">
|
||||
<poller max-messages-per-poll="1">
|
||||
<interval-trigger interval="10000"/>
|
||||
<transactional transaction-manager="txManager" propagation="SUPPORTS"/>
|
||||
</poller>
|
||||
</service-activator>
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
ref="testBean"
|
||||
method="bad"
|
||||
output-channel="output">
|
||||
<poller interval="10000" max-messages-per-poll="1">
|
||||
<poller max-messages-per-poll="1">
|
||||
<interval-trigger interval="10000"/>
|
||||
<transactional transaction-manager="txManager"/>
|
||||
</poller>
|
||||
</service-activator>
|
||||
@@ -34,7 +35,8 @@
|
||||
ref="testBean"
|
||||
method="good"
|
||||
output-channel="output">
|
||||
<poller interval="10000" max-messages-per-poll="1">
|
||||
<poller max-messages-per-poll="1">
|
||||
<interval-trigger interval="10000"/>
|
||||
<transactional transaction-manager="txManager"/>
|
||||
</poller>
|
||||
</service-activator>
|
||||
|
||||
Reference in New Issue
Block a user