From a0072b3e6604ee5a643c9e4c684e9a499fc082ae Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Wed, 16 Apr 2008 19:14:26 +0000 Subject: [PATCH] DefaultMessageEndpoint constructor now requires a MessageHandler. The endpoint no longer invokes Lifecycle methods on the MessageHandler. --- .../file/config/FileTargetAdapterParser.java | 2 +- .../HttpInvokerTargetAdapterParser.java | 2 +- .../jms/config/JmsTargetAdapterParser.java | 4 +--- .../mail/config/MailTargetAdapterParser.java | 2 +- .../rmi/config/RmiTargetAdapterParser.java | 2 +- .../config/ChannelAdapterParser.java | 2 +- .../integration/config/EndpointParser.java | 11 ++++------ .../endpoint/DefaultMessageEndpoint.java | 22 +++---------------- .../config/WebServiceTargetAdapterParser.java | 2 +- 9 files changed, 14 insertions(+), 35 deletions(-) diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/file/config/FileTargetAdapterParser.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/file/config/FileTargetAdapterParser.java index 74f8cca7ab..1b48d9f9d3 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/file/config/FileTargetAdapterParser.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/file/config/FileTargetAdapterParser.java @@ -51,7 +51,7 @@ public class FileTargetAdapterParser extends AbstractSingleBeanDefinitionParser adapterDef.getConstructorArgumentValues().addGenericArgumentValue(element.getAttribute("directory")); String adapterBeanName = parserContext.getReaderContext().generateBeanName(adapterDef); parserContext.registerBeanComponent(new BeanComponentDefinition(adapterDef, adapterBeanName)); - builder.addPropertyReference("handler", adapterBeanName); + builder.addConstructorArgReference(adapterBeanName); String channel = element.getAttribute("channel"); Subscription subscription = new Subscription(channel); builder.addPropertyValue("subscription", subscription); diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerTargetAdapterParser.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerTargetAdapterParser.java index 2ba7ca0791..f1cbc90a14 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerTargetAdapterParser.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerTargetAdapterParser.java @@ -61,7 +61,7 @@ public class HttpInvokerTargetAdapterParser extends AbstractSingleBeanDefinition adapterDef.getConstructorArgumentValues().addGenericArgumentValue(url); String adapterBeanName = parserContext.getReaderContext().generateBeanName(adapterDef); parserContext.registerBeanComponent(new BeanComponentDefinition(adapterDef, adapterBeanName)); - builder.addPropertyReference("handler", adapterBeanName); + builder.addConstructorArgReference(adapterBeanName); Subscription subscription = new Subscription(channel); builder.addPropertyValue("subscription", subscription); } diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsTargetAdapterParser.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsTargetAdapterParser.java index ec94ae3b39..4d8125cfd5 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsTargetAdapterParser.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsTargetAdapterParser.java @@ -37,8 +37,6 @@ import org.springframework.util.StringUtils; */ public class JmsTargetAdapterParser extends AbstractSingleBeanDefinitionParser { - private static final String HANDLER_PROPERTY = "handler"; - private static final String SUBSCRIPTION_PROPERTY = "subscription"; @@ -89,7 +87,7 @@ public class JmsTargetAdapterParser extends AbstractSingleBeanDefinitionParser { Subscription subscription = new Subscription(channel); String adapterBeanName = parserContext.getReaderContext().generateBeanName(adapterDef); parserContext.registerBeanComponent(new BeanComponentDefinition(adapterDef, adapterBeanName)); - builder.addPropertyReference(HANDLER_PROPERTY, adapterBeanName); + builder.addConstructorArgReference(adapterBeanName); builder.addPropertyValue(SUBSCRIPTION_PROPERTY, subscription); } diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParser.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParser.java index a71cc21d57..02a63c9ec8 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParser.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParser.java @@ -84,7 +84,7 @@ public class MailTargetAdapterParser extends AbstractSingleBeanDefinitionParser } String adapterBeanName = parserContext.getReaderContext().generateBeanName(adapterDef); parserContext.registerBeanComponent(new BeanComponentDefinition(adapterDef, adapterBeanName)); - builder.addPropertyReference("handler", adapterBeanName); + builder.addConstructorArgReference(adapterBeanName); String channel = element.getAttribute("channel"); Subscription subscription = new Subscription(channel); builder.addPropertyValue("subscription", subscription); diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/rmi/config/RmiTargetAdapterParser.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/rmi/config/RmiTargetAdapterParser.java index 446d5254fb..f11a8b3d47 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/rmi/config/RmiTargetAdapterParser.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/rmi/config/RmiTargetAdapterParser.java @@ -64,7 +64,7 @@ public class RmiTargetAdapterParser extends AbstractSingleBeanDefinitionParser { adapterDef.getConstructorArgumentValues().addGenericArgumentValue(url); String adapterBeanName = parserContext.getReaderContext().generateBeanName(adapterDef); parserContext.registerBeanComponent(new BeanComponentDefinition(adapterDef, adapterBeanName)); - builder.addPropertyReference("handler", adapterBeanName); + builder.addConstructorArgReference(adapterBeanName); Subscription subscription = new Subscription(localChannel); builder.addPropertyValue("subscription", subscription); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/ChannelAdapterParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/ChannelAdapterParser.java index a2f32b0e5b..ca558c9f35 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/ChannelAdapterParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/ChannelAdapterParser.java @@ -105,8 +105,8 @@ public class ChannelAdapterParser implements BeanDefinitionParser { subscriptionDef.getConstructorArgumentValues().addGenericArgumentValue(new RuntimeBeanReference(channel)); String subscriptionBeanName = parserContext.getReaderContext().generateBeanName(subscriptionDef); parserContext.registerBeanComponent(new BeanComponentDefinition(subscriptionDef, subscriptionBeanName)); + endpointDef.getConstructorArgumentValues().addGenericArgumentValue(new RuntimeBeanReference(beanName)); endpointDef.getPropertyValues().addPropertyValue("subscription", new RuntimeBeanReference(subscriptionBeanName)); - endpointDef.getPropertyValues().addPropertyValue("handler", new RuntimeBeanReference(beanName)); String endpointBeanName = parserContext.getReaderContext().generateBeanName(endpointDef); parserContext.registerBeanComponent(new BeanComponentDefinition(endpointDef, endpointBeanName)); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/EndpointParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/EndpointParser.java index b845b99544..7c5b44d35e 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/EndpointParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/EndpointParser.java @@ -73,8 +73,6 @@ public class EndpointParser implements BeanDefinitionParser { private static final String HANDLER_METHOD_ATTRIBUTE = "handler-method"; - private static final String HANDLER_PROPERTY = "handler"; - private static final String ERROR_HANDLER_ATTRIBUTE = "error-handler"; private static final String ERROR_HANDLER_PROPERTY = "errorHandler"; @@ -149,8 +147,7 @@ public class EndpointParser implements BeanDefinitionParser { } if (childHandlerRefs.size() > 0) { if (childHandlerRefs.size() == 1) { - endpointDef.getPropertyValues().addPropertyValue( - HANDLER_PROPERTY, new RuntimeBeanReference(childHandlerRefs.get(0))); + endpointDef.getConstructorArgumentValues().addGenericArgumentValue(new RuntimeBeanReference(childHandlerRefs.get(0))); } else { RootBeanDefinition handlerChainDef = new RootBeanDefinition(MessageHandlerChain.class); @@ -161,7 +158,7 @@ public class EndpointParser implements BeanDefinitionParser { handlerChainDef.getPropertyValues().addPropertyValue(HANDLERS_PROPERTY, handlerList); String chainBeanName = parserContext.getReaderContext().generateBeanName(handlerChainDef); parserContext.registerBeanComponent(new BeanComponentDefinition(handlerChainDef, chainBeanName)); - endpointDef.getPropertyValues().addPropertyValue(HANDLER_PROPERTY, new RuntimeBeanReference(chainBeanName)); + endpointDef.getConstructorArgumentValues().addGenericArgumentValue(new RuntimeBeanReference(chainBeanName)); } } String handlerRef = element.getAttribute(HANDLER_REF_ATTRIBUTE); @@ -173,10 +170,10 @@ public class EndpointParser implements BeanDefinitionParser { String handlerMethod = element.getAttribute(HANDLER_METHOD_ATTRIBUTE); if (StringUtils.hasText(handlerMethod)) { String adapterBeanName = this.parseHandlerAdapter(handlerRef, handlerMethod, parserContext); - endpointDef.getPropertyValues().addPropertyValue(HANDLER_PROPERTY, new RuntimeBeanReference(adapterBeanName)); + endpointDef.getConstructorArgumentValues().addGenericArgumentValue(new RuntimeBeanReference(adapterBeanName)); } else { - endpointDef.getPropertyValues().addPropertyValue(HANDLER_PROPERTY, new RuntimeBeanReference(handlerRef)); + endpointDef.getConstructorArgumentValues().addGenericArgumentValue(new RuntimeBeanReference(handlerRef)); } } String errorHandlerRef = element.getAttribute(ERROR_HANDLER_ATTRIBUTE); diff --git a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/DefaultMessageEndpoint.java b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/DefaultMessageEndpoint.java index 3a5e319e8e..68de223104 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/DefaultMessageEndpoint.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/DefaultMessageEndpoint.java @@ -30,8 +30,6 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.Lifecycle; -import org.springframework.integration.ConfigurationException; import org.springframework.integration.channel.ChannelRegistry; import org.springframework.integration.channel.ChannelRegistryAware; import org.springframework.integration.channel.MessageChannel; @@ -84,10 +82,8 @@ public class DefaultMessageEndpoint implements MessageEndpoint, ChannelRegistryA private volatile boolean running; - public DefaultMessageEndpoint() { - } - public DefaultMessageEndpoint(MessageHandler handler) { + Assert.notNull(handler, "handler must not be null"); this.handler = handler; } @@ -185,9 +181,6 @@ public class DefaultMessageEndpoint implements MessageEndpoint, ChannelRegistryA } public void afterPropertiesSet() { - if (this.handler == null) { - return; - } if (this.handler instanceof ChannelRegistryAware) { ((ChannelRegistryAware) this.handler).setChannelRegistry(this.channelRegistry); } @@ -221,9 +214,6 @@ public class DefaultMessageEndpoint implements MessageEndpoint, ChannelRegistryA if (!initialized) { this.afterPropertiesSet(); } - if (this.handler instanceof Lifecycle) { - ((Lifecycle) handler).start(); - } this.running = true; } @@ -231,16 +221,10 @@ public class DefaultMessageEndpoint implements MessageEndpoint, ChannelRegistryA if (!this.isRunning()) { return; } - if (this.handler instanceof Lifecycle) { - ((Lifecycle) handler).stop(); - } this.running = false; } public final Message handle(Message message) { - if (this.handler == null) { - throw new ConfigurationException("endpoint has no 'handler'"); - } if (logger.isDebugEnabled()) { logger.debug("endpoint '" + this + "' handling message: " + message); } @@ -312,8 +296,8 @@ public class DefaultMessageEndpoint implements MessageEndpoint, ChannelRegistryA logger.debug("endpoint '" + DefaultMessageEndpoint.this + "' replying to channel '" + replyChannel + "' with message: " + replyMessage); } if (!replyChannel.send(replyMessage, replyTimeout)) { - errorHandler.handle(new MessageDeliveryException(replyMessage, - "unable to send reply message within alloted timeout of " + replyTimeout + " milliseconds")); + throw new MessageDeliveryException(replyMessage, + "unable to send reply message within alloted timeout of " + replyTimeout + " milliseconds"); } } } diff --git a/spring-integration-ws/src/main/java/org/springframework/integration/ws/config/WebServiceTargetAdapterParser.java b/spring-integration-ws/src/main/java/org/springframework/integration/ws/config/WebServiceTargetAdapterParser.java index bdfa0948e9..1f67fa1fef 100644 --- a/spring-integration-ws/src/main/java/org/springframework/integration/ws/config/WebServiceTargetAdapterParser.java +++ b/spring-integration-ws/src/main/java/org/springframework/integration/ws/config/WebServiceTargetAdapterParser.java @@ -67,7 +67,7 @@ public class WebServiceTargetAdapterParser extends AbstractSingleBeanDefinitionP this.parseSimpleAdapter(uri, sourceExtractorRef); String adapterBeanName = parserContext.getReaderContext().generateBeanName(adapterDef); parserContext.registerBeanComponent(new BeanComponentDefinition(adapterDef, adapterBeanName)); - builder.addPropertyReference("handler", adapterBeanName); + builder.addConstructorArgReference(adapterBeanName); Subscription subscription = new Subscription(channel); builder.addPropertyValue("subscription", subscription); }