From db32486d354cc9049f7b03cce32b14bbb40805b6 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Fri, 22 Nov 2013 18:23:20 +0200 Subject: [PATCH 1/6] INT-3006: Resolve 'maxSubscribers' from INT Props JIRA: https://jira.springsource.org/browse/INT-3006 * Add integration properties `channels.maxUnicastSubscribers` and `channels.maxBroadcastSubscribers` with default value to `Integer.MAX_VALUE` * Add SpEL value resolution for those default values from parsers * Deprecate similar properties from `ChannelInitializer` INT-3006 `maxSubscribers` from channels' onInit() * Move default init for `maxSubscribers` to the channels' `onInit()` from `integrationProperties`, not from parsers * extract `default` `integrationProperties` from static block in the `IntegrationProperties` and use them as `default` on `IntegrationContextUtils#getIntegrationProperties` * Add bean definition expression building to get the default values for `integration properties` on bean building phase. INT-3006: Add `taskScheduler.poolSize` property INT-3006: Polishing --- .../AbstractSubscribableAmqpChannel.java | 19 ++-- .../PointToPointSubscribableAmqpChannel.java | 6 +- .../channel/PublishSubscribeAmqpChannel.java | 6 +- .../amqp/config/AmqpChannelFactoryBean.java | 10 ++- .../amqp/config/AmqpChannelParser.java | 17 ++-- .../integration/channel/DirectChannel.java | 13 +++ .../integration/channel/ExecutorChannel.java | 9 +- .../channel/PublishSubscribeChannel.java | 8 +- .../xml/AbstractChannelAdapterParser.java | 13 +-- .../config/xml/AbstractChannelParser.java | 44 +--------- .../AbstractIntegrationNamespaceHandler.java | 9 +- .../config/xml/ChannelInitializer.java | 45 +--------- ...ltConfiguringBeanFactoryPostProcessor.java | 4 +- .../config/xml/IntegrationNamespaceUtils.java | 27 ++---- .../config/xml/PointToPointChannelParser.java | 14 ++- .../xml/PublishSubscribeChannelParser.java | 4 +- .../context/IntegrationContextUtils.java | 22 ++--- .../context/IntegrationObjectSupport.java | 17 +++- .../context/IntegrationProperties.java | 88 ++++++++++++++++++- .../spring.integration.default.properties | 4 +- ...ibersDefaultConfigurationTests-context.xml | 2 + ...ubscribersOverrideDefaultTests-context.xml | 19 ++-- .../xml/DispatcherMaxSubscribersTests.java | 23 ++--- .../context/IntegrationContextTests.java | 14 ++- .../META-INF/spring.integration.properties | 3 + .../jms/SubscribableJmsChannel.java | 9 +- .../jms/config/JmsChannelParser.java | 8 +- .../channel/SubscribableRedisChannel.java | 8 ++ .../redis/config/RedisChannelParser.java | 8 +- 29 files changed, 270 insertions(+), 203 deletions(-) diff --git a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/AbstractSubscribableAmqpChannel.java b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/AbstractSubscribableAmqpChannel.java index ba204e081c..5823ae6fda 100644 --- a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/AbstractSubscribableAmqpChannel.java +++ b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/AbstractSubscribableAmqpChannel.java @@ -33,6 +33,7 @@ import org.springframework.integration.Message; import org.springframework.integration.MessageDeliveryException; import org.springframework.integration.MessageDispatchingException; import org.springframework.integration.MessagingException; +import org.springframework.integration.context.IntegrationProperties; import org.springframework.integration.core.MessageHandler; import org.springframework.integration.core.SubscribableChannel; import org.springframework.integration.dispatcher.AbstractDispatcher; @@ -43,6 +44,7 @@ import org.springframework.util.Assert; /** * @author Mark Fisher * @author Gary Russell + * @author Artem Bilan * @since 2.1 */ abstract class AbstractSubscribableAmqpChannel extends AbstractAmqpChannel implements SubscribableChannel, SmartLifecycle, DisposableBean { @@ -51,11 +53,11 @@ abstract class AbstractSubscribableAmqpChannel extends AbstractAmqpChannel imple private final SimpleMessageListenerContainer container; - private volatile MessageDispatcher dispatcher; + private volatile AbstractDispatcher dispatcher; private final boolean isPubSub; - private volatile int maxSubscribers = Integer.MAX_VALUE; + private volatile Integer maxSubscribers; public AbstractSubscribableAmqpChannel(String channelName, SimpleMessageListenerContainer container, AmqpTemplate amqpTemplate) { this(channelName, container, amqpTemplate, false); @@ -79,6 +81,9 @@ abstract class AbstractSubscribableAmqpChannel extends AbstractAmqpChannel imple */ public void setMaxSubscribers(int maxSubscribers) { this.maxSubscribers = maxSubscribers; + if (this.dispatcher != null) { + this.dispatcher.setMaxSubscribers(this.maxSubscribers); + } } public boolean subscribe(MessageHandler handler) { @@ -93,9 +98,13 @@ abstract class AbstractSubscribableAmqpChannel extends AbstractAmqpChannel imple public void onInit() throws Exception { super.onInit(); this.dispatcher = this.createDispatcher(); - if (this.dispatcher instanceof AbstractDispatcher) { - ((AbstractDispatcher) this.dispatcher).setMaxSubscribers(this.maxSubscribers); + if (this.maxSubscribers == null) { + this.maxSubscribers = this.getIntegrationProperty(this.isPubSub ? + IntegrationProperties.CHANNELS_MAX_BROADCAST_SUBSCRIBERS : + IntegrationProperties.CHANNELS_MAX_UNICAST_SUBSCRIBERS, + Integer.class); } + this.setMaxSubscribers(this.maxSubscribers); AmqpAdmin admin = new RabbitAdmin(this.container.getConnectionFactory()); Queue queue = this.initializeQueue(admin, this.channelName); this.container.setQueues(queue); @@ -110,7 +119,7 @@ abstract class AbstractSubscribableAmqpChannel extends AbstractAmqpChannel imple } } - protected abstract MessageDispatcher createDispatcher(); + protected abstract AbstractDispatcher createDispatcher(); protected abstract Queue initializeQueue(AmqpAdmin admin, String channelName); diff --git a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/PointToPointSubscribableAmqpChannel.java b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/PointToPointSubscribableAmqpChannel.java index ded7d382e2..181f9d40d9 100644 --- a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/PointToPointSubscribableAmqpChannel.java +++ b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/PointToPointSubscribableAmqpChannel.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import org.springframework.amqp.core.AmqpAdmin; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; -import org.springframework.integration.dispatcher.MessageDispatcher; +import org.springframework.integration.dispatcher.AbstractDispatcher; import org.springframework.integration.dispatcher.RoundRobinLoadBalancingStrategy; import org.springframework.integration.dispatcher.UnicastingDispatcher; @@ -57,7 +57,7 @@ public class PointToPointSubscribableAmqpChannel extends AbstractSubscribableAmq } @Override - protected MessageDispatcher createDispatcher() { + protected AbstractDispatcher createDispatcher() { UnicastingDispatcher unicastingDispatcher = new UnicastingDispatcher(); unicastingDispatcher.setLoadBalancingStrategy(new RoundRobinLoadBalancingStrategy()); return unicastingDispatcher; diff --git a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/PublishSubscribeAmqpChannel.java b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/PublishSubscribeAmqpChannel.java index a3b979e70a..4f7af317ff 100644 --- a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/PublishSubscribeAmqpChannel.java +++ b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/channel/PublishSubscribeAmqpChannel.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,8 +23,8 @@ import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; +import org.springframework.integration.dispatcher.AbstractDispatcher; import org.springframework.integration.dispatcher.BroadcastingDispatcher; -import org.springframework.integration.dispatcher.MessageDispatcher; /** * @author Mark Fisher @@ -65,7 +65,7 @@ public class PublishSubscribeAmqpChannel extends AbstractSubscribableAmqpChannel } @Override - protected MessageDispatcher createDispatcher() { + protected AbstractDispatcher createDispatcher() { return new BroadcastingDispatcher(true); } diff --git a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/config/AmqpChannelFactoryBean.java b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/config/AmqpChannelFactoryBean.java index d09a04070b..934afde5ad 100644 --- a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/config/AmqpChannelFactoryBean.java +++ b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/config/AmqpChannelFactoryBean.java @@ -121,7 +121,7 @@ public class AmqpChannelFactoryBean extends AbstractFactoryBean T getIntegrationProperty(String key, Class tClass) { + return this.defaultConversionService.convert(this.integrationProperties.getProperty(key), tClass); } @Override diff --git a/spring-integration-core/src/main/java/org/springframework/integration/context/IntegrationProperties.java b/spring-integration-core/src/main/java/org/springframework/integration/context/IntegrationProperties.java index c54cb0dae3..38faa7a16d 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/context/IntegrationProperties.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/context/IntegrationProperties.java @@ -16,16 +16,96 @@ package org.springframework.integration.context; +import java.io.IOException; +import java.util.Properties; + +import org.springframework.beans.factory.config.PropertiesFactoryBean; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; + /** - * Convention Enumeration to represent keys from 'META-INF/spring.integration.properties'. + * Utility class to encapsulate infrastructure Integration properties constants and + * their default values from resources 'META-INF/spring.integration.default.properties'. * * @author Artem Bilan * @since 3.0 */ -public interface IntegrationProperties { +public final class IntegrationProperties { - String LATE_REPLY_LOGGING_LEVEL = "messagingTemplate.lateReply.logging.level"; + /** + * Specifies whether to allow create automatically {@link org.springframework.integration.channel.DirectChannel} + * beans for non-declared channels or not. + */ + public static final String CHANNELS_AUTOCREATE = "channels.autoCreate"; - String CHANNELS_AUTOCREATE = "channels.autoCreate"; + /** + * Specifies the value for {@link org.springframework.integration.dispatcher.UnicastingDispatcher#maxSubscribers} + * in case of point-to-point channels (e.g. {@link org.springframework.integration.channel.ExecutorChannel}), + * if the attribute {@code max-subscribers} isn't configured on the channel component. + */ + public static final String CHANNELS_MAX_UNICAST_SUBSCRIBERS = "channels.maxUnicastSubscribers"; + + /** + * Specifies the value for {@link org.springframework.integration.dispatcher.BroadcastingDispatcher#maxSubscribers} + * in case of point-to-point channels (e.g. {@link org.springframework.integration.channel.PublishSubscribeChannel}), + * if the attribute {@code max-subscribers} isn't configured on the channel component. + */ + public static final String CHANNELS_MAX_BROADCAST_SUBSCRIBERS = "channels.maxBroadcastSubscribers"; + + /** + * Specifies the value of {@link org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler#poolSize} + * for {@code taskScheduler} bean initialized but Integration infrastructure. + * @see org.springframework.integration.config.xml.DefaultConfiguringBeanFactoryPostProcessor#registerTaskScheduler + */ + public static final String TASKSCHEDULER_POOLSIZE = "taskScheduler.poolSize"; + +// TODO public static final String LATE_REPLY_LOGGING_LEVEL = "messagingTemplate.lateReply.logging.level"; + + private static Properties defaults; + + static { + String resourcePattern = "classpath*:META-INF/spring.integration.default.properties"; + try { + ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(IntegrationProperties.class.getClassLoader()); + Resource[] defaultResources = resourceResolver.getResources(resourcePattern); + + PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); + propertiesFactoryBean.setLocations(defaultResources); + propertiesFactoryBean.afterPropertiesSet(); + defaults = propertiesFactoryBean.getObject(); + } + catch (IOException e) { + throw new IllegalStateException("Can't load '" + resourcePattern + "' resources.", e); + } + } + + /** + * @return {@link Properties} with default values for Integration properties + * from resources 'META-INF/spring.integration.default.properties'. + */ + public static Properties defaults() { + return defaults; + } + + /** + * Build the bean property definition expression to resolve the value + * from Integration properties within the bean building phase. + * + * @param key the Integration property key. + * @return the bean property definition expression. + * @throws IllegalArgumentException if provided {@code key} isn't an Integration property. + */ + public static String getExpressionFor(String key) { + if (defaults.containsKey(key)) { + return "#{T(" + IntegrationContextUtils.class.getName() + ").getIntegrationProperties(beanFactory).getProperty('" + key + "')}"; + } + else { + throw new IllegalArgumentException("The provided key [" + key + "] isn't the one of Integration properties: " + defaults.keySet()); + } + } + + private IntegrationProperties() { + } } diff --git a/spring-integration-core/src/main/resources/META-INF/spring.integration.default.properties b/spring-integration-core/src/main/resources/META-INF/spring.integration.default.properties index 199b366130..3633615b97 100644 --- a/spring-integration-core/src/main/resources/META-INF/spring.integration.default.properties +++ b/spring-integration-core/src/main/resources/META-INF/spring.integration.default.properties @@ -1,2 +1,4 @@ channels.autoCreate=true -messagingTemplate.lateReply.logging.level=warn +channels.maxUnicastSubscribers=0x7fffffff +channels.maxBroadcastSubscribers=0x7fffffff +taskScheduler.poolSize=10 diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersDefaultConfigurationTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersDefaultConfigurationTests-context.xml index 7d4a9c1182..902587d6ad 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersDefaultConfigurationTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersDefaultConfigurationTests-context.xml @@ -7,6 +7,8 @@ http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> + + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersOverrideDefaultTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersOverrideDefaultTests-context.xml index 388be5668a..b4a39d9398 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersOverrideDefaultTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersOverrideDefaultTests-context.xml @@ -1,15 +1,16 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:int="http://www.springframework.org/schema/integration" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> - - - - - + + 456 + 789 + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersTests.java index 79c7701824..21cba2662b 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DispatcherMaxSubscribersTests.java @@ -23,11 +23,15 @@ import org.springframework.integration.test.util.TestUtils; /** * @author Gary Russell + * @author Artem Bilan * @since 2.2 * */ public abstract class DispatcherMaxSubscribersTests { + @Autowired + private MessageChannel autoCreateChannel; + @Autowired private MessageChannel defaultChannel; @@ -54,20 +58,17 @@ public abstract class DispatcherMaxSubscribersTests { } protected void doTestUnicast(int val1, int val2, int val3, int val4, int val5) { - Integer defaultMax = TestUtils.getPropertyValue( - TestUtils.getPropertyValue(defaultChannel, "dispatcher"), "maxSubscribers", Integer.class); + Integer autoCreateMax = TestUtils.getPropertyValue(autoCreateChannel, "dispatcher.maxSubscribers", Integer.class); + assertEquals(val1, autoCreateMax.intValue()); + Integer defaultMax = TestUtils.getPropertyValue(defaultChannel, "dispatcher.maxSubscribers", Integer.class); assertEquals(val1, defaultMax.intValue()); - Integer defaultMax2 = TestUtils.getPropertyValue( - TestUtils.getPropertyValue(defaultChannel2, "dispatcher"), "maxSubscribers", Integer.class); + Integer defaultMax2 = TestUtils.getPropertyValue(defaultChannel2, "dispatcher.maxSubscribers", Integer.class); assertEquals(val2, defaultMax2.intValue()); - Integer explicitMax = TestUtils.getPropertyValue( - TestUtils.getPropertyValue(explicitChannel, "dispatcher"), "maxSubscribers", Integer.class); + Integer explicitMax = TestUtils.getPropertyValue(explicitChannel, "dispatcher.maxSubscribers", Integer.class); assertEquals(val3, explicitMax.intValue()); - Integer execMax = TestUtils.getPropertyValue( - TestUtils.getPropertyValue(executorChannel, "dispatcher"), "maxSubscribers", Integer.class); + Integer execMax = TestUtils.getPropertyValue(executorChannel, "dispatcher.maxSubscribers", Integer.class); assertEquals(val4, execMax.intValue()); - Integer explicitExecMax = TestUtils.getPropertyValue( - TestUtils.getPropertyValue(explicitExecutorChannel, "dispatcher"), "maxSubscribers", Integer.class); + Integer explicitExecMax = TestUtils.getPropertyValue(explicitExecutorChannel, "dispatcher.maxSubscribers", Integer.class); assertEquals(val5, explicitExecMax.intValue()); } @@ -81,4 +82,4 @@ public abstract class DispatcherMaxSubscribersTests { Integer explicitMin = TestUtils.getPropertyValue(pubSubExplicitChannel, "dispatcher.minSubscribers", Integer.class); assertEquals(1, explicitMin.intValue()); } -} \ No newline at end of file +} diff --git a/spring-integration-core/src/test/java/org/springframework/integration/context/IntegrationContextTests.java b/spring-integration-core/src/test/java/org/springframework/integration/context/IntegrationContextTests.java index 64d9ee572e..3ad521a9bc 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/context/IntegrationContextTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/context/IntegrationContextTests.java @@ -17,7 +17,6 @@ package org.springframework.integration.context; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; import java.util.Properties; @@ -26,6 +25,8 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.integration.test.util.TestUtils; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -38,17 +39,22 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; public class IntegrationContextTests { @Autowired - @Qualifier(IntegrationContextUtils.INTEGRATION_PROPERTIES_BEAN_NAME) + @Qualifier(IntegrationContextUtils.INTEGRATION_GLOBAL_PROPERTIES_BEAN_NAME) private Properties integrationProperties; @Autowired @Qualifier("fooService") private IntegrationObjectSupport serviceActivator; + @Autowired + private ThreadPoolTaskScheduler taskScheduler; + @Test public void testIntegrationContextComponents() { - assertEquals("error", this.integrationProperties.get(IntegrationProperties.LATE_REPLY_LOGGING_LEVEL)); - assertSame(this.integrationProperties, this.serviceActivator.getIntegrationProperties()); + //TODO INT-3005 assertEquals("error", this.integrationProperties.get(IntegrationProperties.LATE_REPLY_LOGGING_LEVEL)); + assertEquals("20", this.integrationProperties.get(IntegrationProperties.TASKSCHEDULER_POOLSIZE)); + assertEquals(this.integrationProperties, this.serviceActivator.getIntegrationProperties()); + assertEquals(20, TestUtils.getPropertyValue(this.taskScheduler, "poolSize")); } } diff --git a/spring-integration-core/src/test/resources/META-INF/spring.integration.properties b/spring-integration-core/src/test/resources/META-INF/spring.integration.properties index 38ffd39c66..bd78272249 100644 --- a/spring-integration-core/src/test/resources/META-INF/spring.integration.properties +++ b/spring-integration-core/src/test/resources/META-INF/spring.integration.properties @@ -1,2 +1,5 @@ #channels.autoCreate=false +#channels.maxUnicastSubscribers=1 +#channels.maxBroadcastSubscribers=1 messagingTemplate.lateReply.logging.level=error +taskScheduler.poolSize=20 diff --git a/spring-integration-jms/src/main/java/org/springframework/integration/jms/SubscribableJmsChannel.java b/spring-integration-jms/src/main/java/org/springframework/integration/jms/SubscribableJmsChannel.java index 41886087f7..0c420e0433 100644 --- a/spring-integration-jms/src/main/java/org/springframework/integration/jms/SubscribableJmsChannel.java +++ b/spring-integration-jms/src/main/java/org/springframework/integration/jms/SubscribableJmsChannel.java @@ -26,6 +26,7 @@ import org.springframework.integration.Message; import org.springframework.integration.MessageDeliveryException; import org.springframework.integration.MessageDispatchingException; import org.springframework.integration.MessagingException; +import org.springframework.integration.context.IntegrationProperties; import org.springframework.integration.core.MessageHandler; import org.springframework.integration.core.SubscribableChannel; import org.springframework.integration.dispatcher.AbstractDispatcher; @@ -51,7 +52,7 @@ public class SubscribableJmsChannel extends AbstractJmsChannel implements Subscr private volatile boolean initialized; - private volatile int maxSubscribers = Integer.MAX_VALUE; + private volatile Integer maxSubscribers; public SubscribableJmsChannel(AbstractMessageListenerContainer container, JmsTemplate jmsTemplate) { super(jmsTemplate); @@ -105,6 +106,12 @@ public class SubscribableJmsChannel extends AbstractJmsChannel implements Subscr unicastingDispatcher.setLoadBalancingStrategy(new RoundRobinLoadBalancingStrategy()); this.dispatcher = unicastingDispatcher; } + if (this.maxSubscribers == null) { + this.maxSubscribers = this.getIntegrationProperty(isPubSub ? + IntegrationProperties.CHANNELS_MAX_BROADCAST_SUBSCRIBERS : + IntegrationProperties.CHANNELS_MAX_UNICAST_SUBSCRIBERS, + Integer.class); + } this.dispatcher.setMaxSubscribers(this.maxSubscribers); } diff --git a/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsChannelParser.java b/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsChannelParser.java index 9223835a5f..24acc8f2b8 100644 --- a/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsChannelParser.java +++ b/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsChannelParser.java @@ -18,12 +18,13 @@ package org.springframework.integration.jms.config; import javax.jms.Session; +import org.w3c.dom.Element; + import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.config.xml.AbstractChannelParser; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; import org.springframework.util.StringUtils; -import org.w3c.dom.Element; /** * Parser for the 'channel' and 'publish-subscribe-channel' elements of the @@ -58,12 +59,13 @@ public class JmsChannelParser extends AbstractChannelParser { builder.addPropertyReference("connectionFactory", connectionFactory); if ("channel".equals(element.getLocalName())) { this.parseDestination(element, parserContext, builder, "queue"); - this.setMaxSubscribersProperty(parserContext, builder, element, IntegrationNamespaceUtils.DEFAULT_MAX_UNICAST_SUBSCRIBERS_PROPERTY_NAME); } else if ("publish-subscribe-channel".equals(element.getLocalName())) { this.parseDestination(element, parserContext, builder, "topic"); - this.setMaxSubscribersProperty(parserContext, builder, element, IntegrationNamespaceUtils.DEFAULT_MAX_BROADCAST_SUBSCRIBERS_PROPERTY_NAME); } + + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "max-subscribers"); + String containerType = element.getAttribute(CONTAINER_TYPE_ATTRIBUTE); String containerClass = element.getAttribute(CONTAINER_CLASS_ATTRIBUTE); if (!StringUtils.hasText(containerClass)) { diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/channel/SubscribableRedisChannel.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/channel/SubscribableRedisChannel.java index c28ea42f53..d81221b79a 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/channel/SubscribableRedisChannel.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/channel/SubscribableRedisChannel.java @@ -34,6 +34,7 @@ import org.springframework.integration.MessageDeliveryException; import org.springframework.integration.MessageDispatchingException; import org.springframework.integration.channel.AbstractMessageChannel; import org.springframework.integration.channel.MessagePublishingErrorHandler; +import org.springframework.integration.context.IntegrationProperties; import org.springframework.integration.core.MessageHandler; import org.springframework.integration.core.SubscribableChannel; import org.springframework.integration.dispatcher.AbstractDispatcher; @@ -61,6 +62,8 @@ public class SubscribableRedisChannel extends AbstractMessageChannel implements private final AbstractDispatcher dispatcher = new BroadcastingDispatcher(true); + private volatile Integer maxSubscribers; + private volatile boolean initialized; // defaults @@ -97,6 +100,7 @@ public class SubscribableRedisChannel extends AbstractMessageChannel implements * @param maxSubscribers */ public void setMaxSubscribers(int maxSubscribers) { + this.maxSubscribers = maxSubscribers; this.dispatcher.setMaxSubscribers(maxSubscribers); } @@ -120,6 +124,10 @@ public class SubscribableRedisChannel extends AbstractMessageChannel implements return; } super.onInit(); + if (this.maxSubscribers == null) { + Integer maxSubscribers = this.getIntegrationProperty(IntegrationProperties.CHANNELS_MAX_BROADCAST_SUBSCRIBERS, Integer.class); + this.setMaxSubscribers(maxSubscribers); + } if (this.messageConverter == null){ this.messageConverter = new SimpleMessageConverter(); } diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/config/RedisChannelParser.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/config/RedisChannelParser.java index 42432169bb..369646a017 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/config/RedisChannelParser.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/config/RedisChannelParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,14 @@ package org.springframework.integration.redis.config; +import org.w3c.dom.Element; + import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.config.xml.AbstractChannelParser; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; import org.springframework.integration.redis.channel.SubscribableRedisChannel; import org.springframework.util.StringUtils; -import org.w3c.dom.Element; /** * Parser for the 'channel' and 'publish-subscribe-channel' elements of the @@ -52,7 +53,8 @@ public class RedisChannelParser extends AbstractChannelParser { // The following 2 attributes should be added once configurable on the RedisMessageListenerContainer // IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "phase"); // IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "auto-startup"); - this.setMaxSubscribersProperty(parserContext, builder, element, IntegrationNamespaceUtils.DEFAULT_MAX_BROADCAST_SUBSCRIBERS_PROPERTY_NAME); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "max-subscribers"); + return builder; } From 4a3ba5abd052f994470cfba73cb47326e9421de9 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 26 Nov 2013 19:27:19 +0200 Subject: [PATCH 2/6] INT-3217 Update Default Spring to 3.2.5 JIRA: https://jira.springsource.org/browse/INT-3217 INT-3217 Polishing PR Comments Also fixes some other warnings (mainly unused imports). --- build.gradle | 5 ++++- .../amqp/support/DefaultAmqpHeaderMapper.java | 3 +++ .../AmqpInboundChannelAdapterParserTests.java | 12 +++++------ .../FileOutboundGatewayIntegrationTests.java | 2 -- ...nelAdapterWithRecursiveDirectoryTests.java | 20 +++++++++--------- .../RemoteFileOutboundGatewayTests.java | 4 ++-- ...ultipartAwareFormHttpMessageConverter.java | 8 ++++++- ...tegrationRequestMappingHandlerMapping.java | 7 +++++++ .../http/support/DefaultHttpHeaderMapper.java | 9 ++++++-- .../http/HttpProxyScenarioTests.java | 3 ++- ...HttpOutboundChannelAdapterParserTests.java | 6 ++++-- ...tpHeaderMapperFromMessageInboundTests.java | 5 +++-- ...pHeaderMapperFromMessageOutboundTests.java | 4 ++++ .../integration/jdbc/JdbcMessageStore.java | 6 ++++++ .../jdbc/store/JdbcChannelMessageStore.java | 13 ++++++++++++ ...PollingChannelAdapterIntegrationTests.java | 13 ++++++++++++ ...dGatewayWithNamespaceIntegrationTests.java | 4 +--- .../JdbcOutboundGatewayParserTests.java | 5 ++--- .../config/StoredProcInvalidConfigsTests.java | 21 +------------------ .../JpaOutboundGatewayIntegrationTests.java | 3 --- ...ueueOutboundChannelAdapterParserTests.java | 2 -- .../xml/source/DomSourceFactoryTests.java | 4 +++- src/reference/docbook/preface.xml | 2 +- 23 files changed, 99 insertions(+), 62 deletions(-) diff --git a/build.gradle b/build.gradle index 5cb5176d47..a2c9119800 100644 --- a/build.gradle +++ b/build.gradle @@ -59,7 +59,7 @@ subprojects { subproject -> ftpServerVersion = '1.0.6' - springVersionDefault = '3.1.4.RELEASE' + springVersionDefault = '3.2.5.RELEASE' springVersion = project.hasProperty('springVersion') ? getProperty('springVersion') : springVersionDefault springAmqpVersion = '1.2.0.RELEASE' @@ -294,6 +294,9 @@ project('spring-integration-http') { } compile ("net.java.dev.rome:rome:1.0.0", optional) testCompile project(":spring-integration-test") + + // suppress deprecation warnings (@SuppressWarnings("deprecation") is not enough for javac) + compileJava.options.compilerArgs = ["${xLintArg},-deprecation"] } } diff --git a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/support/DefaultAmqpHeaderMapper.java b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/support/DefaultAmqpHeaderMapper.java index 1779152dad..8957dde9b3 100644 --- a/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/support/DefaultAmqpHeaderMapper.java +++ b/spring-integration-amqp/src/main/java/org/springframework/integration/amqp/support/DefaultAmqpHeaderMapper.java @@ -171,12 +171,14 @@ public class DefaultAmqpHeaderMapper extends AbstractHeaderMapper extractUserDefinedHeaders(MessageProperties amqpMessageProperties) { Map headers = amqpMessageProperties.getHeaders(); diff --git a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpInboundChannelAdapterParserTests.java b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpInboundChannelAdapterParserTests.java index 2844f021f0..6c78344323 100644 --- a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpInboundChannelAdapterParserTests.java +++ b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpInboundChannelAdapterParserTests.java @@ -16,13 +16,18 @@ package org.springframework.integration.amqp.config; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer; -import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; import org.springframework.context.ApplicationContext; @@ -35,11 +40,6 @@ import org.springframework.integration.test.util.TestUtils; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - /** * @author Mark Fisher * @author Artem Bilan diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/FileOutboundGatewayIntegrationTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/FileOutboundGatewayIntegrationTests.java index 9a26e1f1a4..47f6b257ef 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/FileOutboundGatewayIntegrationTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/FileOutboundGatewayIntegrationTests.java @@ -19,7 +19,6 @@ package org.springframework.integration.file; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -40,7 +39,6 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.integration.Message; import org.springframework.integration.MessageChannel; import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.file.FileHeaders; import org.springframework.integration.support.MessageBuilder; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/recursive/FileInboundChannelAdapterWithRecursiveDirectoryTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/recursive/FileInboundChannelAdapterWithRecursiveDirectoryTests.java index ce612f36ab..e2ca264c4f 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/recursive/FileInboundChannelAdapterWithRecursiveDirectoryTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/recursive/FileInboundChannelAdapterWithRecursiveDirectoryTests.java @@ -16,9 +16,19 @@ package org.springframework.integration.file.recursive; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.springframework.integration.test.matcher.PayloadMatcher.hasPayload; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.Message; import org.springframework.integration.core.PollableChannel; @@ -27,16 +37,6 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; -import static org.hamcrest.CoreMatchers.hasItems; -import static org.springframework.integration.test.matcher.PayloadMatcher.hasPayload; - /** * @author Iwein Fuld * @author Gunnar Hillert diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/remote/gateway/RemoteFileOutboundGatewayTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/remote/gateway/RemoteFileOutboundGatewayTests.java index 5b9b473782..1a019083fd 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/remote/gateway/RemoteFileOutboundGatewayTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/remote/gateway/RemoteFileOutboundGatewayTests.java @@ -1056,8 +1056,8 @@ public class RemoteFileOutboundGatewayTests { return null; } }).when(session).write(any(InputStream.class), anyString()); - File file1 = tempFolder.newFile("baz.txt"); - File file2 = tempFolder.newFile("qux.txt"); + tempFolder.newFile("baz.txt"); + tempFolder.newFile("qux.txt"); Message requestMessage = MessageBuilder.withPayload(tempFolder.getRoot()) .build(); @SuppressWarnings("unchecked") diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/converter/MultipartAwareFormHttpMessageConverter.java b/spring-integration-http/src/main/java/org/springframework/integration/http/converter/MultipartAwareFormHttpMessageConverter.java index c891cd9b75..f2e885c60b 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/converter/MultipartAwareFormHttpMessageConverter.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/converter/MultipartAwareFormHttpMessageConverter.java @@ -40,10 +40,11 @@ import org.springframework.web.multipart.MultipartFile; * An {@link HttpMessageConverter} implementation that delegates to an instance of * {@link XmlAwareFormHttpMessageConverter} while adding the capability to read * multipart/form-data content in an HTTP request. - * + * * @author Mark Fisher * @since 2.0 */ +@SuppressWarnings("deprecation") public class MultipartAwareFormHttpMessageConverter implements HttpMessageConverter> { private volatile MultipartFileReader multipartFileReader = new DefaultMultipartFileReader(); @@ -66,10 +67,12 @@ public class MultipartAwareFormHttpMessageConverter implements HttpMessageConver this.multipartFileReader = multipartFileReader; } + @Override public List getSupportedMediaTypes() { return this.wrappedConverter.getSupportedMediaTypes(); } + @Override public boolean canRead(Class clazz, MediaType mediaType) { if (!(MultiValueMap.class.isAssignableFrom(clazz) || byte[].class.isAssignableFrom(clazz))) { return false; @@ -83,10 +86,12 @@ public class MultipartAwareFormHttpMessageConverter implements HttpMessageConver } } + @Override public boolean canWrite(Class clazz, MediaType mediaType) { return this.wrappedConverter.canWrite(clazz, mediaType); } + @Override public MultiValueMap read(Class> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { @@ -118,6 +123,7 @@ public class MultipartAwareFormHttpMessageConverter implements HttpMessageConver return resultMap; } + @Override public void write(MultiValueMap map, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { this.wrappedConverter.write(map, contentType, outputMessage); diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/IntegrationRequestMappingHandlerMapping.java b/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/IntegrationRequestMappingHandlerMapping.java index 5dcdec0ef0..82399ae4ac 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/IntegrationRequestMappingHandlerMapping.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/IntegrationRequestMappingHandlerMapping.java @@ -116,30 +116,37 @@ public final class IntegrationRequestMappingHandlerMapping extends RequestMappin org.springframework.web.bind.annotation.RequestMapping requestMappingAnnotation = new org.springframework.web.bind.annotation.RequestMapping() { + @Override public String[] value() { return requestMapping.getPathPatterns(); } + @Override public RequestMethod[] method() { return requestMapping.getRequestMethods(); } + @Override public String[] params() { return requestMapping.getParams(); } + @Override public String[] headers() { return requestMapping.getHeaders(); } + @Override public String[] consumes() { return requestMapping.getConsumes(); } + @Override public String[] produces() { return requestMapping.getProduces(); } + @Override public Class annotationType() { return org.springframework.web.bind.annotation.RequestMapping.class; } diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java b/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java index 57b9f926bf..37d70c293a 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java @@ -21,8 +21,8 @@ import java.net.URISyntaxException; import java.nio.charset.Charset; import java.text.DateFormat; import java.text.MessageFormat; -import java.text.SimpleDateFormat; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -30,9 +30,9 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.Locale; import java.util.TimeZone; import org.apache.commons.logging.Log; @@ -265,6 +265,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF private volatile String userDefinedHeaderPrefix = "X-"; + @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } @@ -326,6 +327,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF * Depending on which type of adapter is using this mapper, the HttpHeaders might be * for an HTTP request (outbound adapter) or for an HTTP response (inbound adapter). */ + @Override public void fromHeaders(MessageHeaders headers, HttpHeaders target) { if (logger.isDebugEnabled()){ logger.debug(MessageFormat.format("outboundHeaderNames={0}", CollectionUtils.arrayToList(outboundHeaderNames))); @@ -356,6 +358,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF * Depending on which type of adapter is using this mapper, the HttpHeaders might be * from an HTTP request (inbound adapter) or from an HTTP response (outbound adapter). */ + @Override public Map toHeaders(HttpHeaders source) { if (logger.isDebugEnabled()) { logger.debug(MessageFormat.format("inboundHeaderNames={0}", CollectionUtils.arrayToList(inboundHeaderNames))); @@ -389,6 +392,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF return target; } + @Override public void afterPropertiesSet() throws Exception { if (this.beanFactory != null){ this.conversionService = IntegrationContextUtils.getConversionService(this.beanFactory); @@ -901,6 +905,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF return source.getIfNoneMatch(); } else if (IF_MODIFIED_SINCE.equalsIgnoreCase(name)) { + @SuppressWarnings("deprecation") long modifiedSince = source.getIfNotModifiedSince(); return (modifiedSince > -1) ? modifiedSince : null; } diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/HttpProxyScenarioTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/HttpProxyScenarioTests.java index 81fa293e87..03c4203ed0 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/HttpProxyScenarioTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/HttpProxyScenarioTests.java @@ -107,11 +107,12 @@ public class HttpProxyScenarioTests { RestTemplate template = Mockito.spy(new RestTemplate()); Mockito.doAnswer(new Answer>() { + @SuppressWarnings("deprecation") @Override public ResponseEntity answer(InvocationOnMock invocation) throws Throwable { URI uri = (URI) invocation.getArguments()[0]; assertEquals(new URI("http://testServer/test?foo=bar&FOO=BAR"), uri); - HttpEntity httpEntity = (HttpEntity) invocation.getArguments()[2]; + HttpEntity httpEntity = (HttpEntity) invocation.getArguments()[2]; HttpHeaders httpHeaders = httpEntity.getHeaders(); assertEquals(ifModifiedSince, httpHeaders.getIfNotModifiedSince()); assertEquals(ifUnmodifiedSinceValue, httpHeaders.getFirst("If-Unmodified-Since")); diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParserTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParserTests.java index 4fa7a4affc..d00def415f 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParserTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParserTests.java @@ -16,9 +16,9 @@ package org.springframework.integration.http.config; -import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; @@ -28,6 +28,7 @@ import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -167,7 +168,6 @@ public class HttpOutboundChannelAdapterParserTests { } @Test - @SuppressWarnings("uchecked") public void withUrlAndTemplate() { DirectFieldAccessor endpointAccessor = new DirectFieldAccessor(this.withUrlAndTemplate); RestTemplate restTemplate = @@ -257,10 +257,12 @@ public class HttpOutboundChannelAdapterParserTests { public static class StubErrorHandler implements ResponseErrorHandler { + @Override public boolean hasError(ClientHttpResponse response) throws IOException { return false; } + @Override public void handleError(ClientHttpResponse response) throws IOException { } } diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageInboundTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageInboundTests.java index 6f48fdce0d..420f2c66bc 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageInboundTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageInboundTests.java @@ -18,8 +18,8 @@ package org.springframework.integration.http.support; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import java.net.URI; import java.text.ParseException; @@ -33,10 +33,10 @@ import java.util.Locale; import java.util.Map; import org.junit.Test; + import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.converter.Converter; -import org.springframework.core.convert.support.ConversionServiceFactory; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.convert.support.GenericConversionService; import org.springframework.http.HttpHeaders; @@ -577,6 +577,7 @@ public class DefaultHttpHeaderMapperFromMessageInboundTests { public static class TestClassConverter implements Converter{ + @Override public String convert(TestClass source) { return "TestClass.class"; } diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java index 82911df7f6..af5c2af4e0 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java @@ -386,6 +386,7 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests { // If-Modified-Since tests + @SuppressWarnings("deprecation") @Test public void validateIfModifiedSinceAsNumber() throws ParseException{ HeaderMapper mapper = DefaultHttpHeaderMapper.outboundMapper(); @@ -399,6 +400,7 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests { assertEquals(simpleDateFormat.parse("Thu, 01 Jan 1970 03:25:45 GMT").getTime(), headers.getIfNotModifiedSince()); } + @SuppressWarnings("deprecation") @Test public void validateIfModifiedSinceAsString() throws ParseException{ HeaderMapper mapper = DefaultHttpHeaderMapper.outboundMapper(); @@ -411,6 +413,7 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests { assertEquals(simpleDateFormat.parse("Thu, 01 Jan 1970 03:25:45 GMT").getTime(), headers.getIfNotModifiedSince()); } + @SuppressWarnings("deprecation") @Test public void validateIfModifiedSinceAsDate() throws ParseException{ HeaderMapper mapper = DefaultHttpHeaderMapper.outboundMapper(); @@ -673,6 +676,7 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests { assertEquals(0, messageHeaders.size()); } + @SuppressWarnings("deprecation") public void testInt2995IfModifiedSince() throws Exception{ Date ifModifiedSince = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy", Locale.US); diff --git a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/JdbcMessageStore.java b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/JdbcMessageStore.java index c335aa70eb..2714e87fb1 100644 --- a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/JdbcMessageStore.java +++ b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/JdbcMessageStore.java @@ -31,6 +31,7 @@ import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.beans.DirectFieldAccessor; import org.springframework.core.serializer.Deserializer; import org.springframework.core.serializer.Serializer; @@ -308,6 +309,7 @@ public class JdbcMessageStore extends AbstractMessageGroupStore implements Messa return null; } + @SuppressWarnings("deprecation") @Override @ManagedAttribute public long getMessageCount() { @@ -365,6 +367,7 @@ public class JdbcMessageStore extends AbstractMessageGroupStore implements Messa public MessageGroup addMessageToGroup(Object groupId, Message message) { final String groupKey = getKey(groupId); final String messageId = getKey(message.getHeaders().getId()); + @SuppressWarnings("deprecation") boolean groupNotExist = jdbcTemplate.queryForInt(this.getQuery(Query.GROUP_EXISTS), groupKey, region) < 1; final Timestamp updatedDate = new Timestamp(System.currentTimeMillis()); @@ -402,18 +405,21 @@ public class JdbcMessageStore extends AbstractMessageGroupStore implements Messa } + @SuppressWarnings("deprecation") @Override @ManagedAttribute public int getMessageGroupCount() { return jdbcTemplate.queryForInt(getQuery(Query.COUNT_ALL_GROUPS), region); } + @SuppressWarnings("deprecation") @Override @ManagedAttribute public int getMessageCountForAllMessageGroups() { return jdbcTemplate.queryForInt(getQuery(Query.COUNT_ALL_MESSAGES_IN_GROUPS), region); } + @SuppressWarnings("deprecation") @Override @ManagedAttribute public int messageGroupSize(Object groupId) { diff --git a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/store/JdbcChannelMessageStore.java b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/store/JdbcChannelMessageStore.java index 3a07934db5..8384deb543 100644 --- a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/store/JdbcChannelMessageStore.java +++ b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/store/JdbcChannelMessageStore.java @@ -220,6 +220,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement * Method not implemented. * @throws UnsupportedOperationException */ + @Override public void setLastReleasedSequenceNumberForGroup(Object groupId, final int sequenceNumber) { throw new UnsupportedOperationException("Not implemented"); } @@ -367,6 +368,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement * * @throws Exception */ + @Override public void afterPropertiesSet() throws Exception { Assert.state(jdbcTemplate != null, "A DataSource or JdbcTemplate must be provided"); Assert.notNull(this.channelMessageStoreQueryProvider, "A channelMessageStoreQueryProvider must be provided."); @@ -391,6 +393,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement * @param groupId the group id to store the message under * @param message a message */ + @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public MessageGroup addMessageToGroup(Object groupId, Message message) { @@ -408,6 +411,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement final byte[] messageBytes = serializer.convert(result); jdbcTemplate.update(getQuery(channelMessageStoreQueryProvider.getCreateMessageQuery()), new PreparedStatementSetter() { + @Override public void setValues(PreparedStatement ps) throws SQLException { if (logger.isDebugEnabled()){ logger.debug("Inserting message with id key=" + messageId); @@ -427,6 +431,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement * Method not implemented. * @throws UnsupportedOperationException */ + @Override public void completeGroup(Object groupId) { throw new UnsupportedOperationException("Not implemented"); } @@ -524,6 +529,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement /** * Not fully used. Only wraps the provided group id. */ + @Override public MessageGroup getMessageGroup(Object groupId) { return new SimpleMessageGroup(groupId); } @@ -561,6 +567,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement * Method not implemented. * @throws UnsupportedOperationException */ + @Override public Iterator iterator() { throw new UnsupportedOperationException("Not implemented"); } @@ -569,6 +576,8 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement * Returns the number of messages persisted for the specified channel id (groupId) * and the specified region ({@link #setRegion(String)}). */ + @Override + @SuppressWarnings("deprecation") @ManagedAttribute public int messageGroupSize(Object groupId) { final String key = getKey(groupId); @@ -579,6 +588,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement * Polls the database for a new message that is persisted for the given * group id which represents the channel identifier. */ + @Override public Message pollMessageFromGroup(Object groupId) { final String key = getKey(groupId); @@ -600,6 +610,7 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement * @param messageToRemove The message to remove * */ + @Override public MessageGroup removeMessageFromGroup(Object groupId, Message messageToRemove) { this.doRemoveMessageFromGroup(groupId, messageToRemove); @@ -661,11 +672,13 @@ public class JdbcChannelMessageStore extends AbstractMessageGroupStore implement /** * Will remove all messages from the message channel. */ + @Override public void removeMessageGroup(Object groupId) { final String groupKey = getKey(groupId); jdbcTemplate.update(getQuery(channelMessageStoreQueryProvider.getDeleteMessageGroupQuery()), new PreparedStatementSetter() { + @Override public void setValues(PreparedStatement ps) throws SQLException { if (logger.isDebugEnabled()){ logger.debug("Marking messages with group key=" + groupKey); diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcPollingChannelAdapterIntegrationTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcPollingChannelAdapterIntegrationTests.java index fa2b9de2f2..bdd5752792 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcPollingChannelAdapterIntegrationTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcPollingChannelAdapterIntegrationTests.java @@ -94,18 +94,22 @@ public class JdbcPollingChannelAdapterIntegrationTests { "select * from item where status=:status"); adapter.setSelectSqlParameterSource(new SqlParameterSource() { + @Override public boolean hasValue(String name) { return "status".equals(name); } + @Override public Object getValue(String name) throws IllegalArgumentException { return 2; } + @Override public String getTypeName(String name) { return null; } + @Override public int getSqlType(String name) { return Types.INTEGER; } @@ -162,12 +166,14 @@ public class JdbcPollingChannelAdapterIntegrationTests { assertEquals("Wrong id", 1, item.getId()); assertEquals("Wrong status", 2, item.getStatus()); + @SuppressWarnings("deprecation") int countOfStatusTwo = this.jdbcTemplate .queryForInt("select count(*) from item where status = 2"); assertEquals( "Status not updated incorect number of rows with status 2", 0, countOfStatusTwo); + @SuppressWarnings("deprecation") int countOfStatusTen = this.jdbcTemplate .queryForInt("select count(*) from item where status = 10"); assertEquals( @@ -198,12 +204,14 @@ public class JdbcPollingChannelAdapterIntegrationTests { assertEquals("Wrong id", 1, item.getId()); assertEquals("Wrong status", 2, item.getStatus()); + @SuppressWarnings("deprecation") int countOfStatusTwo = this.jdbcTemplate .queryForInt("select count(*) from item where status = 2"); assertEquals( "Status not updated incorect number of rows with status 2", 0, countOfStatusTwo); + @SuppressWarnings("deprecation") int countOfStatusTen = this.jdbcTemplate .queryForInt("select count(*) from item where status = 10"); assertEquals( @@ -237,12 +245,14 @@ public class JdbcPollingChannelAdapterIntegrationTests { assertEquals("Wrong id", 2, item.getId()); assertEquals("Wrong status", 2, item.getStatus()); + @SuppressWarnings("deprecation") int countOfStatusTwo = this.jdbcTemplate .queryForInt("select count(*) from item where status = 2"); assertEquals( "Status not updated incorect number of rows with status 2", 2, countOfStatusTwo); + @SuppressWarnings("deprecation") int countOfStatusTen = this.jdbcTemplate .queryForInt("select count(*) from copy where status = 10"); assertEquals( @@ -275,12 +285,14 @@ public class JdbcPollingChannelAdapterIntegrationTests { assertEquals("Wrong id", 2, item.getId()); assertEquals("Wrong status", 2, item.getStatus()); + @SuppressWarnings("deprecation") int countOfStatusTwo = this.jdbcTemplate .queryForInt("select count(*) from item where status = 2"); assertEquals( "Status not updated incorect number of rows with status 2", 0, countOfStatusTwo); + @SuppressWarnings("deprecation") int countOfStatusTen = this.jdbcTemplate .queryForInt("select count(*) from item where status = 10"); assertEquals( @@ -328,6 +340,7 @@ public class JdbcPollingChannelAdapterIntegrationTests { private static class ItemRowMapper implements RowMapper { + @Override public Item mapRow(ResultSet rs, int rowNum) throws SQLException { Item item = new Item(); item.setId(rs.getInt(1)); diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/StoredProcOutboundGatewayWithNamespaceIntegrationTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/StoredProcOutboundGatewayWithNamespaceIntegrationTests.java index 17c7186004..d30b1eb09b 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/StoredProcOutboundGatewayWithNamespaceIntegrationTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/StoredProcOutboundGatewayWithNamespaceIntegrationTests.java @@ -31,8 +31,8 @@ import java.util.concurrent.atomic.AtomicInteger; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.support.AbstractApplicationContext; import org.springframework.integration.Message; import org.springframework.integration.MessageChannel; import org.springframework.integration.annotation.ServiceActivator; @@ -44,8 +44,6 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import javax.sql.DataSource; - /** * @author Gunnar Hillert * @author Artem Bilan diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/config/JdbcOutboundGatewayParserTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/config/JdbcOutboundGatewayParserTests.java index 00cdd7b42a..69e197e67b 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/config/JdbcOutboundGatewayParserTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/config/JdbcOutboundGatewayParserTests.java @@ -12,13 +12,12 @@ */ package org.springframework.integration.jdbc.config; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.util.Collections; -import java.util.List; import java.util.Map; import javax.sql.DataSource; @@ -26,13 +25,13 @@ import javax.sql.DataSource; import org.junit.After; import org.junit.Assert; import org.junit.Test; + import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.Message; import org.springframework.integration.MessageChannel; -import org.springframework.integration.core.MessageHandler; import org.springframework.integration.core.MessagingTemplate; import org.springframework.integration.core.PollableChannel; import org.springframework.integration.endpoint.PollingConsumer; diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/config/StoredProcInvalidConfigsTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/config/StoredProcInvalidConfigsTests.java index eaa958f93d..e77e36f44f 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/config/StoredProcInvalidConfigsTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/config/StoredProcInvalidConfigsTests.java @@ -13,40 +13,21 @@ package org.springframework.integration.jdbc.config; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; -import java.sql.Types; -import java.util.List; import java.util.Properties; -import org.junit.After; import org.junit.Test; -import org.springframework.beans.DirectFieldAccessor; + import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.GenericApplicationContext; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.InputStreamResource; -import org.springframework.expression.Expression; -import org.springframework.integration.Message; -import org.springframework.integration.core.MessageHandler; -import org.springframework.integration.endpoint.EventDrivenConsumer; -import org.springframework.integration.handler.advice.AbstractRequestHandlerAdvice; -import org.springframework.integration.jdbc.storedproc.ProcedureParameter; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.test.util.TestUtils; -import org.springframework.jdbc.core.SqlInOutParameter; -import org.springframework.jdbc.core.SqlOutParameter; -import org.springframework.jdbc.core.SqlParameter; /** * @author Artem Bilan diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayIntegrationTests.java b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayIntegrationTests.java index a62d471a27..cbecab6c9d 100644 --- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayIntegrationTests.java +++ b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayIntegrationTests.java @@ -16,12 +16,10 @@ package org.springframework.integration.jpa.outbound; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; import java.util.List; import javax.persistence.EntityManager; -import javax.persistence.FlushModeType; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,7 +31,6 @@ import org.springframework.integration.MessagingException; import org.springframework.integration.core.MessageHandler; import org.springframework.integration.core.SubscribableChannel; import org.springframework.integration.support.MessageBuilder; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/config/RedisQueueOutboundChannelAdapterParserTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/config/RedisQueueOutboundChannelAdapterParserTests.java index 14dcd4ccff..bda5ae442b 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/config/RedisQueueOutboundChannelAdapterParserTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/config/RedisQueueOutboundChannelAdapterParserTests.java @@ -30,8 +30,6 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.expression.Expression; import org.springframework.integration.redis.outbound.RedisQueueOutboundChannelAdapter; -import org.springframework.integration.redis.rules.RedisAvailable; -import org.springframework.integration.redis.rules.RedisAvailableTests; import org.springframework.integration.test.util.TestUtils; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/source/DomSourceFactoryTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/source/DomSourceFactoryTests.java index e5b7d8c774..9ece9e0039 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/source/DomSourceFactoryTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/source/DomSourceFactoryTests.java @@ -16,7 +16,9 @@ package org.springframework.integration.xml.source; -import static org.custommonkey.xmlunit.XMLAssert.*; +import static org.junit.Assert.assertNotNull; +import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; +import static org.junit.Assert.assertEquals; import java.io.StringReader; diff --git a/src/reference/docbook/preface.xml b/src/reference/docbook/preface.xml index b749a7b2fb..f7e90b3fe3 100644 --- a/src/reference/docbook/preface.xml +++ b/src/reference/docbook/preface.xml @@ -32,7 +32,7 @@ The default dependency used by Spring Integration 3.0.0.RELEASE is - Spring Framework 3.1.4.RELEASE. + Spring Framework 3.2.x. Generally, Spring Integration 3.0.x From a08b033b7c850ef95c85090ed96ef1c00fd71804 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 26 Nov 2013 14:23:44 -0500 Subject: [PATCH 3/6] What's New Polishing Typos; add a comment about HTTP paths. --- src/reference/docbook/whats-new.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/reference/docbook/whats-new.xml b/src/reference/docbook/whats-new.xml index 8a6ffa7642..fac46686a3 100644 --- a/src/reference/docbook/whats-new.xml +++ b/src/reference/docbook/whats-new.xml @@ -141,6 +141,7 @@ To achieve flexible Request Mapping configuration, Spring Integration provides the <request-mapping/> sub-element for <http:inbound-channel-adapter/> and <http:inbound-gateway/>. Both HTTP Inbound Endpoints are now fully based on the Request Mapping infrastructure that was introduced with Spring MVC 3.1. + For example, multiple paths are supported on a single inbound endpoint. For more information see . @@ -643,7 +644,7 @@
- Redis Adapters Changers + Redis Adapter Changes @@ -665,7 +666,7 @@
- Persistend File List Filters (file, (S)FTP) + Persistent File List Filters (file, (S)FTP) New FileListFilters that use a persistent MetadataStore are now available. These can be used to prevent duplicate files after a system restart. See From 5f555e31b39d02da87b5beb619b11af8632ac5d3 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 26 Nov 2013 17:30:12 -0500 Subject: [PATCH 4/6] INT-3218 Spring 4 Compatibility Use `Arrays.asList()` instead of `Collections.arrayToList()` in places where a generic type needs to be supplied by the caller. This maintains compile-time compatibility with both Spring 3 and 4, where Spring 4 added the generic type to the utility class. The four occurrences where this was needed are not impacted by the fact that `Arrays.asList()` returns an unmodifiable list. --- .../ApplicationEventListeningMessageProducer.java | 6 +++--- ...TcpConnectionEventListeningMessageProducer.java | 5 +++-- .../integration/security/SecurityTestUtils.java | 10 ++++++---- .../xml/selector/XmlValidatingMessageSelector.java | 14 ++++++++------ 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/spring-integration-event/src/main/java/org/springframework/integration/event/inbound/ApplicationEventListeningMessageProducer.java b/spring-integration-event/src/main/java/org/springframework/integration/event/inbound/ApplicationEventListeningMessageProducer.java index cf1a50218b..bb8cc2305f 100644 --- a/spring-integration-event/src/main/java/org/springframework/integration/event/inbound/ApplicationEventListeningMessageProducer.java +++ b/spring-integration-event/src/main/java/org/springframework/integration/event/inbound/ApplicationEventListeningMessageProducer.java @@ -16,6 +16,7 @@ package org.springframework.integration.event.inbound; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -31,7 +32,6 @@ import org.springframework.integration.Message; import org.springframework.integration.endpoint.ExpressionMessageProducerSupport; import org.springframework.integration.support.MessageBuilder; import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; /** * An inbound Channel Adapter that implements {@link ApplicationListener} and @@ -69,9 +69,9 @@ public class ApplicationEventListeningMessageProducer extends ExpressionMessageP * @see ApplicationEventMulticaster#addApplicationListener * @see #supportsEventType */ - @SuppressWarnings("unchecked") public void setEventTypes(Class... eventTypes) { - Set> eventSet = new HashSet>(CollectionUtils.arrayToList(eventTypes)); + Set> eventSet = new HashSet>( + Arrays.asList(eventTypes)); eventSet.remove(null); this.eventTypes = (eventSet.size() > 0 ? eventSet : null); diff --git a/spring-integration-ip/src/main/java/org/springframework/integration/ip/tcp/connection/TcpConnectionEventListeningMessageProducer.java b/spring-integration-ip/src/main/java/org/springframework/integration/ip/tcp/connection/TcpConnectionEventListeningMessageProducer.java index b63c754fdf..8a63a71dac 100644 --- a/spring-integration-ip/src/main/java/org/springframework/integration/ip/tcp/connection/TcpConnectionEventListeningMessageProducer.java +++ b/spring-integration-ip/src/main/java/org/springframework/integration/ip/tcp/connection/TcpConnectionEventListeningMessageProducer.java @@ -15,6 +15,7 @@ */ package org.springframework.integration.ip.tcp.connection; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -44,14 +45,14 @@ public class TcpConnectionEventListeningMessageProducer extends MessageProducerS * this adapter should send to the message channel. By default, all event * types will be sent. */ - @SuppressWarnings("unchecked") public void setEventTypes(Class[] eventTypes) { Assert.notEmpty(eventTypes, "at least one event type is required"); Set> eventTypeSet = new HashSet>(); - eventTypeSet.addAll(CollectionUtils.arrayToList(eventTypes)); + eventTypeSet.addAll(Arrays.asList(eventTypes)); this.eventTypes = eventTypeSet; } + @Override public void onApplicationEvent(TcpConnectionEvent event) { if (this.isRunning()) { if (CollectionUtils.isEmpty(this.eventTypes)) { diff --git a/spring-integration-security/src/test/java/org/springframework/integration/security/SecurityTestUtils.java b/spring-integration-security/src/test/java/org/springframework/integration/security/SecurityTestUtils.java index b7bfd4fb78..21814c4f42 100644 --- a/spring-integration-security/src/test/java/org/springframework/integration/security/SecurityTestUtils.java +++ b/spring-integration-security/src/test/java/org/springframework/integration/security/SecurityTestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,20 +16,21 @@ package org.springframework.integration.security; +import java.util.Arrays; + import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextImpl; -import org.springframework.util.CollectionUtils; /** * @author Jonas Partner * @author Oleg Zhurakousky + * @author Gary Russell */ public class SecurityTestUtils { - @SuppressWarnings("unchecked") public static SecurityContext createContext(String username, String password, String... roles) { SecurityContextImpl ctxImpl = new SecurityContextImpl(); UsernamePasswordAuthenticationToken authToken; @@ -38,7 +39,8 @@ public class SecurityTestUtils { for (int i = 0; i < roles.length; i++) { authorities[i] = new SimpleGrantedAuthority(roles[i]); } - authToken = new UsernamePasswordAuthenticationToken(username, password, CollectionUtils.arrayToList(authorities)); + authToken = new UsernamePasswordAuthenticationToken(username, password, + Arrays.asList(authorities)); } else { authToken = new UsernamePasswordAuthenticationToken(username, password); diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/selector/XmlValidatingMessageSelector.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/selector/XmlValidatingMessageSelector.java index 5639dc9641..487739fe7f 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/selector/XmlValidatingMessageSelector.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/selector/XmlValidatingMessageSelector.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package org.springframework.integration.xml.selector; import java.io.IOException; +import java.util.Arrays; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -31,7 +32,6 @@ import org.springframework.integration.xml.AggregatedXmlMessageValidationExcepti import org.springframework.integration.xml.DefaultXmlPayloadConverter; import org.springframework.integration.xml.XmlPayloadConverter; import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import org.springframework.xml.validation.XmlValidator; @@ -39,6 +39,7 @@ import org.springframework.xml.validation.XmlValidatorFactory; /** * @author Oleg Zhurakousky + * @author Gary Russell * @since 2.0 */ public class XmlValidatingMessageSelector implements MessageSelector { @@ -62,7 +63,7 @@ public class XmlValidatingMessageSelector implements MessageSelector { * the provided 'schema' location {@link Resource} and 'schemaType'. The valid options for schema * type are {@link XmlValidatorFactory#SCHEMA_W3C_XML} or {@link XmlValidatorFactory#SCHEMA_RELAX_NG}. * If no 'schemaType' is provided it will default to {@link XmlValidatorFactory#SCHEMA_W3C_XML}; - * + * * @throws IOException if the XmlValidatorFactory fails to create a validator */ public XmlValidatingMessageSelector(Resource schema, String schemaType) throws IOException { @@ -86,7 +87,7 @@ public class XmlValidatingMessageSelector implements MessageSelector { this.converter = converter; } - @SuppressWarnings("unchecked") + @Override public boolean accept(Message message) { SAXParseException[] validationExceptions = null; try { @@ -98,8 +99,9 @@ public class XmlValidatingMessageSelector implements MessageSelector { boolean validationSuccess = ObjectUtils.isEmpty(validationExceptions); if (!validationSuccess) { if (this.throwExceptionOnRejection) { - throw new MessageRejectedException(message, "Message was rejected due to XML Validation errors", - new AggregatedXmlMessageValidationException(CollectionUtils.arrayToList(validationExceptions))); + throw new MessageRejectedException(message, "Message was rejected due to XML Validation errors", + new AggregatedXmlMessageValidationException( + Arrays. asList(validationExceptions))); } if (logger.isDebugEnabled()) { logger.debug("Message was rejected due to XML Validation errors"); From 72cbefbdda6561e78480d690029bac22e264526f Mon Sep 17 00:00:00 2001 From: Spring Buildmaster Date: Tue, 26 Nov 2013 15:32:27 -0800 Subject: [PATCH 5/6] [artifactory-release] Release version 3.0.0.RC1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7645a9fa6f..602ec724eb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version=3.0.0.BUILD-SNAPSHOT +version=3.0.0.RC1 From 43226da62a8c6fa117919537c9af663a4f11bf8f Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Wed, 27 Nov 2013 10:09:08 -0500 Subject: [PATCH 6/6] Revert to 3.0.0.BUILD-SNAPSHOT --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 602ec724eb..7645a9fa6f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version=3.0.0.RC1 +version=3.0.0.BUILD-SNAPSHOT