diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java index c2a350e526c..2fc8d46e12d 100644 --- a/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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,10 +16,14 @@ package org.springframework.jms.annotation; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + import javax.jms.JMSException; import javax.jms.MessageListener; import org.hamcrest.core.Is; + import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -32,10 +36,12 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.annotation.AliasFor; import org.springframework.jms.config.JmsListenerContainerTestFactory; import org.springframework.jms.config.JmsListenerEndpointRegistrar; import org.springframework.jms.config.JmsListenerEndpointRegistry; import org.springframework.jms.config.MessageListenerTestContainer; +import org.springframework.jms.config.MethodJmsListenerEndpoint; import org.springframework.jms.config.SimpleJmsListenerEndpoint; import org.springframework.jms.listener.adapter.ListenerExecutionFailedException; import org.springframework.jms.listener.adapter.MessageListenerAdapter; @@ -48,6 +54,7 @@ import static org.junit.Assert.*; /** * @author Stephane Nicoll + * @author Sam Brannen */ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests { @@ -130,11 +137,33 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests { } @Test + public void composedJmsListeners() { + try (ConfigurableApplicationContext context = new AnnotationConfigApplicationContext( + EnableJmsDefaultContainerFactoryConfig.class, ComposedJmsListenersBean.class)) { + JmsListenerContainerTestFactory simpleFactory = context.getBean("jmsListenerContainerFactory", + JmsListenerContainerTestFactory.class); + assertEquals(2, simpleFactory.getListenerContainers().size()); + + MethodJmsListenerEndpoint first = (MethodJmsListenerEndpoint) simpleFactory.getListenerContainer( + "first").getEndpoint(); + assertEquals("first", first.getId()); + assertEquals("orderQueue", first.getDestination()); + assertNull(first.getConcurrency()); + + MethodJmsListenerEndpoint second = (MethodJmsListenerEndpoint) simpleFactory.getListenerContainer( + "second").getEndpoint(); + assertEquals("second", second.getId()); + assertEquals("billingQueue", second.getDestination()); + assertEquals("2-10", second.getConcurrency()); + } + } + + @Test + @SuppressWarnings("resource") public void unknownFactory() { thrown.expect(BeanCreationException.class); thrown.expectMessage("customFactory"); // Not found - new AnnotationConfigApplicationContext( - EnableJmsSampleConfig.class, CustomBean.class); + new AnnotationConfigApplicationContext(EnableJmsSampleConfig.class, CustomBean.class); } @Test @@ -295,4 +324,36 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests { } } + + @JmsListener(destination = "orderQueue") + @Retention(RetentionPolicy.RUNTIME) + private @interface OrderQueueListener { + + @AliasFor(annotation = JmsListener.class) + String id() default ""; + + @AliasFor(annotation = JmsListener.class) + String concurrency() default ""; + } + + @JmsListener(destination = "billingQueue") + @Retention(RetentionPolicy.RUNTIME) + private @interface BillingQueueListener { + + @AliasFor(annotation = JmsListener.class) + String id() default ""; + + @AliasFor(annotation = JmsListener.class) + String concurrency() default ""; + } + + @Component + static class ComposedJmsListenersBean { + + @OrderQueueListener(id = "first") + @BillingQueueListener(id = "second", concurrency = "2-10") + public void repeatableHandle(String msg) { + } + } + }