From 55d0f965d44594d6a3db36b45ff913b01787c629 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Mon, 13 Dec 2010 15:03:46 -0500 Subject: [PATCH] INT-1684 added the 'time-unit' attribute on the top-level element. It can be used with 'fixed-rate' or 'fixed-delay' values (but not 'cron' or 'trigger' references) --- .../integration/config/xml/PollerParser.java | 19 ++++++++++++++---- .../config/xml/spring-integration-2.0.xsd | 20 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PollerParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PollerParser.java index 9d074b49a2..ed36fdcebb 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PollerParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PollerParser.java @@ -109,31 +109,42 @@ public class PollerParser extends AbstractBeanDefinitionParser { String fixedRateAttribute = pollerElement.getAttribute("fixed-rate"); String fixedDelayAttribute = pollerElement.getAttribute("fixed-delay"); String cronAttribute = pollerElement.getAttribute("cron"); + String timeUnit = pollerElement.getAttribute("time-unit"); List triggerBeanNames = new ArrayList(); if (StringUtils.hasText(triggerAttribute)) { + if (StringUtils.hasText(timeUnit)) { + parserContext.getReaderContext().error("The 'time-unit' attribute cannot be used with a 'trigger' reference.", pollerElement); + } triggerBeanNames.add(triggerAttribute); } else if (StringUtils.hasText(fixedRateAttribute)) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(PERIODIC_TRIGGER_CLASSNAME); builder.addConstructorArgValue(fixedRateAttribute); + if (StringUtils.hasText(timeUnit)) { + builder.addConstructorArgValue(timeUnit); + } builder.addPropertyValue("fixedRate", Boolean.TRUE); String triggerBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName( builder.getBeanDefinition(), parserContext.getRegistry()); triggerBeanNames.add(triggerBeanName); } else if (StringUtils.hasText(fixedDelayAttribute)) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder - .genericBeanDefinition(PERIODIC_TRIGGER_CLASSNAME); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(PERIODIC_TRIGGER_CLASSNAME); builder.addConstructorArgValue(fixedDelayAttribute); + if (StringUtils.hasText(timeUnit)) { + builder.addConstructorArgValue(timeUnit); + } builder.addPropertyValue("fixedRate", Boolean.FALSE); String triggerBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName( builder.getBeanDefinition(), parserContext.getRegistry()); triggerBeanNames.add(triggerBeanName); } else if (StringUtils.hasText(cronAttribute)) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder - .genericBeanDefinition(CRON_TRIGGER_CLASSNAME); + if (StringUtils.hasText(timeUnit)) { + parserContext.getReaderContext().error("The 'time-unit' attribute cannot be used with a 'cron' trigger.", pollerElement); + } + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(CRON_TRIGGER_CLASSNAME); builder.addConstructorArgValue(cronAttribute); String triggerBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName( builder.getBeanDefinition(), parserContext.getRegistry()); diff --git a/spring-integration-core/src/main/resources/org/springframework/integration/config/xml/spring-integration-2.0.xsd b/spring-integration-core/src/main/resources/org/springframework/integration/config/xml/spring-integration-2.0.xsd index 220df9f9a9..5d14e6fc90 100644 --- a/spring-integration-core/src/main/resources/org/springframework/integration/config/xml/spring-integration-2.0.xsd +++ b/spring-integration-core/src/main/resources/org/springframework/integration/config/xml/spring-integration-2.0.xsd @@ -1186,6 +1186,26 @@ endpoint itself is a Polling Consumer for a channel with a queue. Fixed rate trigger (in milliseconds). + + + + + + + + + + + Cron trigger.