diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java b/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java index d8782b2b031..f60fbbd42c4 100644 --- a/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java +++ b/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java @@ -66,7 +66,9 @@ import org.springframework.context.annotation.Import; * } * * The container factory to use is identified by the {@link JmsListener#containerFactory() containerFactory} - * attribute defining the name of the {@code JmsListenerContainerFactory} bean to use. + * attribute defining the name of the {@code JmsListenerContainerFactory} bean to use. When none + * is set a {@code JmsListenerContainerFactory} bean with name {@code jmsListenerContainerFactory} is + * assumed to be present. * *
the following configuration would ensure that every time a {@link javax.jms.Message} * is received on the {@link javax.jms.Destination} named "myQueue", {@code MyService.process()} @@ -118,9 +120,8 @@ import org.springframework.context.annotation.Import; *
When more control is desired, a {@code @Configuration} class may implement * {@link JmsListenerConfigurer}. This allows access to the underlying * {@link org.springframework.jms.config.JmsListenerEndpointRegistrar JmsListenerEndpointRegistrar} - * instance. The following example demonstrates how to specify a default - * {@code JmsListenerContainerFactory} so that {@link JmsListener#containerFactory()} may be - * omitted for endpoints willing to use the default container factory. + * instance. The following example demonstrates how to specify an explicit default + * {@code JmsListenerContainerFactory} * *
* @Configuration
@@ -128,7 +129,7 @@ import org.springframework.context.annotation.Import;
* public class AppConfig implements JmsListenerConfigurer {
* @Override
* public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
- * registrar.setDefaultContainerFactory(myJmsListenerContainerFactory());
+ * registrar.setContainerFactory(myJmsListenerContainerFactory());
* }
*
* @Bean
@@ -146,7 +147,7 @@ import org.springframework.context.annotation.Import;
* configuration:
*
* {@code
- *
+ *
*
*
diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
index 2294ea090e6..02a4aa692f0 100644
--- a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
+++ b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
@@ -28,8 +28,10 @@ import org.springframework.messaging.handler.annotation.MessageMapping;
* Annotation that marks a method to be the target of a JMS message
* listener on the specified {@link #destination()}. The {@link #containerFactory()}
* identifies the {@link org.springframework.jms.config.JmsListenerContainerFactory
- * JmsListenerContainerFactory} to use to build the jms listener container. It may
- * be omitted as long as a default container factory has been defined.
+ * JmsListenerContainerFactory} to use to build the jms listener container. If not
+ * set, a default container factory is assumed to be available with a bean
+ * name of {@code jmsListenerContainerFactory} unless an explicit default has been
+ * provided through configuration.
*
* Processing of {@code @JmsListener} annotations is performed by
* registering a {@link JmsListenerAnnotationBeanPostProcessor}. This can be
diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java
index 784a5762fdc..a3157722686 100644
--- a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java
+++ b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java
@@ -73,13 +73,18 @@ import org.springframework.util.StringUtils;
public class JmsListenerAnnotationBeanPostProcessor implements BeanPostProcessor, Ordered,
ApplicationContextAware, ApplicationListener {
+ /**
+ * The bean name of the default {@link JmsListenerContainerFactory}
+ */
+ static final String DEFAULT_JMS_LISTENER_CONTAINER_FACTORY_BEAN_NAME = "jmsListenerContainerFactory";
+
private final AtomicInteger counter = new AtomicInteger();
private ApplicationContext applicationContext;
private JmsListenerEndpointRegistry endpointRegistry;
- private JmsListenerContainerFactory> defaultContainerFactory;
+ private String containerFactoryBeanName = DEFAULT_JMS_LISTENER_CONTAINER_FACTORY_BEAN_NAME;
private final JmsHandlerMethodFactoryAdapter jmsHandlerMethodFactory = new JmsHandlerMethodFactoryAdapter();
@@ -99,12 +104,12 @@ public class JmsListenerAnnotationBeanPostProcessor implements BeanPostProcessor
}
/**
- * Set the default {@link JmsListenerContainerFactory} to use in case a
- * {@link JmsListener} does not define any.
- * {@linkplain JmsListener#containerFactory() containerFactory}
+ * Set the name of the {@link JmsListenerContainerFactory} to use by default.
+ * If none is specified, {@value #DEFAULT_JMS_LISTENER_CONTAINER_FACTORY_BEAN_NAME}
+ * is assumed to be defined.
*/
- public void setDefaultContainerFactory(JmsListenerContainerFactory> defaultContainerFactory) {
- this.defaultContainerFactory = defaultContainerFactory;
+ public void setContainerFactoryBeanName(String containerFactoryBeanName) {
+ this.containerFactoryBeanName = containerFactoryBeanName;
}
/**
@@ -209,6 +214,9 @@ public class JmsListenerAnnotationBeanPostProcessor implements BeanPostProcessor
for (JmsListenerConfigurer configurer : instances.values()) {
configurer.configureJmsListeners(registrar);
}
+
+ registrar.setApplicationContext(this.applicationContext);
+
if (registrar.getEndpointRegistry() == null) {
if (endpointRegistry == null) {
endpointRegistry = applicationContext
@@ -217,10 +225,13 @@ public class JmsListenerAnnotationBeanPostProcessor implements BeanPostProcessor
}
registrar.setEndpointRegistry(endpointRegistry);
}
- if (registrar.getDefaultContainerFactory() == null && defaultContainerFactory != null) {
- registrar.setDefaultContainerFactory(defaultContainerFactory);
+
+ if (this.containerFactoryBeanName != null) {
+ registrar.setContainerFactoryBeanName(this.containerFactoryBeanName);
}
+
+ // Set the custom handler method factory once resolved by the configurer
JmsHandlerMethodFactory handlerMethodFactory = registrar.getJmsHandlerMethodFactory();
if (handlerMethodFactory != null) {
this.jmsHandlerMethodFactory.setJmsHandlerMethodFactory(handlerMethodFactory);
@@ -235,7 +246,6 @@ public class JmsListenerAnnotationBeanPostProcessor implements BeanPostProcessor
}
}
-
private String getEndpointId(JmsListener jmsListener) {
if (StringUtils.hasText(jmsListener.id())) {
return jmsListener.id();
@@ -267,7 +277,7 @@ public class JmsListenerAnnotationBeanPostProcessor implements BeanPostProcessor
private JmsHandlerMethodFactory getJmsHandlerMethodFactory() {
if (jmsHandlerMethodFactory == null) {
- jmsHandlerMethodFactory= createDefaultJmsHandlerMethodFactory();
+ jmsHandlerMethodFactory = createDefaultJmsHandlerMethodFactory();
}
return jmsHandlerMethodFactory;
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/config/AnnotationDrivenJmsBeanDefinitionParser.java b/spring-jms/src/main/java/org/springframework/jms/config/AnnotationDrivenJmsBeanDefinitionParser.java
index b4322abd7bf..10c95094f03 100644
--- a/spring-jms/src/main/java/org/springframework/jms/config/AnnotationDrivenJmsBeanDefinitionParser.java
+++ b/spring-jms/src/main/java/org/springframework/jms/config/AnnotationDrivenJmsBeanDefinitionParser.java
@@ -64,10 +64,12 @@ final class AnnotationDrivenJmsBeanDefinitionParser implements BeanDefinitionPar
else {
registerDefaultEndpointRegistry(source, parserContext);
}
- String defaultContainerFactory = element.getAttribute("default-container-factory");
- if (StringUtils.hasText(defaultContainerFactory)) {
- builder.addPropertyReference("defaultContainerFactory", defaultContainerFactory);
+
+ String containerFactory = element.getAttribute("container-factory");
+ if (StringUtils.hasText(containerFactory)) {
+ builder.addPropertyValue("containerFactoryBeanName", containerFactory);
}
+
String handlerMethodFactory = element.getAttribute("handler-method-factory");
if (StringUtils.hasText(handlerMethodFactory)) {
builder.addPropertyReference("jmsHandlerMethodFactory", handlerMethodFactory);
diff --git a/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerEndpointRegistrar.java b/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerEndpointRegistrar.java
index e14ff415960..73e0f964cd3 100644
--- a/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerEndpointRegistrar.java
+++ b/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerEndpointRegistrar.java
@@ -20,6 +20,8 @@ import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
import org.springframework.util.Assert;
/**
@@ -30,14 +32,18 @@ import org.springframework.util.Assert;
* @since 4.1
* @see org.springframework.jms.annotation.JmsListenerConfigurer
*/
-public class JmsListenerEndpointRegistrar implements InitializingBean {
+public class JmsListenerEndpointRegistrar implements ApplicationContextAware, InitializingBean {
private JmsListenerEndpointRegistry endpointRegistry;
- private JmsListenerContainerFactory> defaultContainerFactory;
+ private String containerFactoryBeanName;
+
+ private JmsListenerContainerFactory> containerFactory;
private JmsHandlerMethodFactory jmsHandlerMethodFactory;
+ private ApplicationContext applicationContext;
+
private final List endpointDescriptors
= new ArrayList();
@@ -57,20 +63,24 @@ public class JmsListenerEndpointRegistrar implements InitializingBean {
}
/**
- * Set the default {@link JmsListenerContainerFactory} to use in case a
- * {@link JmsListenerEndpoint} is registered with a {@code null} container
- * factory.
+ * Set the bean name of the {@link JmsListenerContainerFactory} to use in
+ * case a {@link JmsListenerEndpoint} is registered with a {@code null}
+ * container factory. Alternatively, the container factory instance can
+ * be registered directly, see {@link #setContainerFactory(JmsListenerContainerFactory)}
*/
- public void setDefaultContainerFactory(JmsListenerContainerFactory> defaultContainerFactory) {
- this.defaultContainerFactory = defaultContainerFactory;
+ public void setContainerFactoryBeanName(String containerFactoryBeanName) {
+ this.containerFactoryBeanName = containerFactoryBeanName;
}
/**
- * Return the {@link JmsListenerContainerFactory} to use if none has been
- * defined for a particular endpoint or {@code null} if no default is set.
+ * Set the {@link JmsListenerContainerFactory} to use in case a
+ * {@link JmsListenerEndpoint} is registered with a {@code null} container
+ * factory.
+ * Alternatively, the bean name of the {@link JmsListenerContainerFactory}
+ * to use can be specified for a lazy lookup, see {@see #setContainerFactoryBeanName}
*/
- public JmsListenerContainerFactory> getDefaultContainerFactory() {
- return defaultContainerFactory;
+ public void setContainerFactory(JmsListenerContainerFactory> containerFactory) {
+ this.containerFactory = containerFactory;
}
/**
@@ -92,6 +102,11 @@ public class JmsListenerEndpointRegistrar implements InitializingBean {
return jmsHandlerMethodFactory;
}
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) {
+ this.applicationContext = applicationContext;
+ }
+
/**
* Register a new {@link JmsListenerEndpoint} alongside the {@link JmsListenerContainerFactory}
* to use to create the underlying container.
@@ -109,7 +124,7 @@ public class JmsListenerEndpointRegistrar implements InitializingBean {
* Register a new {@link JmsListenerEndpoint} using the default {@link JmsListenerContainerFactory}
* to create the underlying container.
*
- * @see #setDefaultContainerFactory(JmsListenerContainerFactory)
+ * @see #setContainerFactory(JmsListenerContainerFactory)
* @see #registerEndpoint(JmsListenerEndpoint, JmsListenerContainerFactory)
*/
public void registerEndpoint(JmsListenerEndpoint endpoint) {
@@ -118,6 +133,7 @@ public class JmsListenerEndpointRegistrar implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
+ Assert.notNull(applicationContext, "ApplicationContext must not be null");
startAllEndpoints();
}
@@ -132,8 +148,13 @@ public class JmsListenerEndpointRegistrar implements InitializingBean {
if (descriptor.containerFactory != null) {
return descriptor.containerFactory;
}
- else if (defaultContainerFactory != null) {
- return defaultContainerFactory;
+ else if (this.containerFactory != null) {
+ return this.containerFactory;
+ }
+ else if (this.containerFactoryBeanName != null) {
+ this.containerFactory = applicationContext.getBean(
+ this.containerFactoryBeanName, JmsListenerContainerFactory.class);
+ return this.containerFactory; // Consider changing this if live change of the factory is required
}
else {
throw new IllegalStateException("Could not resolve the "
diff --git a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd
index 582cd48ca66..740da217f3e 100644
--- a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd
+++ b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd
@@ -43,13 +43,15 @@
-
+
diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java
index 45016184a89..4e7d2b726d4 100644
--- a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java
@@ -59,17 +59,21 @@ public abstract class AbstractJmsAnnotationDrivenTests {
public abstract void customConfiguration();
@Test
- public abstract void defaultContainerFactoryConfiguration();
+ public abstract void explicitContainerFactory();
+
+ @Test
+ public abstract void defaultContainerFactory();
@Test
public abstract void jmsHandlerMethodFactoryConfiguration() throws JMSException;
/**
- * Test for {@link SampleBean} discovery.
+ * Test for {@link SampleBean} discovery. If a factory with the default name
+ * is set, an endpoint will use it automatically
*/
public void testSampleConfiguration(ApplicationContext context) {
JmsListenerContainerTestFactory defaultFactory =
- context.getBean("defaultFactory", JmsListenerContainerTestFactory.class);
+ context.getBean("jmsListenerContainerFactory", JmsListenerContainerTestFactory.class);
JmsListenerContainerTestFactory simpleFactory =
context.getBean("simpleFactory", JmsListenerContainerTestFactory.class);
assertEquals(1, defaultFactory.getContainers().size());
@@ -79,7 +83,7 @@ public abstract class AbstractJmsAnnotationDrivenTests {
@Component
static class SampleBean {
- @JmsListener(containerFactory = "defaultFactory", destination = "myQueue")
+ @JmsListener(destination = "myQueue")
public void defaultHandle(String msg) {
}
@@ -89,7 +93,9 @@ public abstract class AbstractJmsAnnotationDrivenTests {
}
/**
- * Test for {@link FullBean} discovery.
+ * Test for {@link FullBean} discovery. In this case, no default is set because
+ * all endpoints provide a default registry. This shows that the default factory
+ * is only retrieved if it needs to be.
*/
public void testFullConfiguration(ApplicationContext context) {
JmsListenerContainerTestFactory simpleFactory =
@@ -116,11 +122,12 @@ public abstract class AbstractJmsAnnotationDrivenTests {
/**
* Test for {@link CustomBean} and an manually endpoint registered
- * with "myCustomEndpointId".
+ * with "myCustomEndpointId". The custom endpoint does not provide
+ * any factory so it's registered with the default one
*/
public void testCustomConfiguration(ApplicationContext context) {
JmsListenerContainerTestFactory defaultFactory =
- context.getBean("defaultFactory", JmsListenerContainerTestFactory.class);
+ context.getBean("jmsListenerContainerFactory", JmsListenerContainerTestFactory.class);
JmsListenerContainerTestFactory customFactory =
context.getBean("customFactory", JmsListenerContainerTestFactory.class);
assertEquals(1, defaultFactory.getContainers().size());
@@ -150,11 +157,22 @@ public abstract class AbstractJmsAnnotationDrivenTests {
/**
* Test for {@link DefaultBean} that does not define the container
- * factory to use as a default is registered.
+ * factory to use as a default is registered with an explicit
+ * default.
+ */
+ public void testExplicitContainerFactoryConfiguration(ApplicationContext context) {
+ JmsListenerContainerTestFactory defaultFactory =
+ context.getBean("simpleFactory", JmsListenerContainerTestFactory.class);
+ assertEquals(1, defaultFactory.getContainers().size());
+ }
+
+ /**
+ * Test for {@link DefaultBean} that does not define the container
+ * factory to use as a default is registered with the default name.
*/
public void testDefaultContainerFactoryConfiguration(ApplicationContext context) {
JmsListenerContainerTestFactory defaultFactory =
- context.getBean("defaultFactory", JmsListenerContainerTestFactory.class);
+ context.getBean("jmsListenerContainerFactory", JmsListenerContainerTestFactory.class);
assertEquals(1, defaultFactory.getContainers().size());
}
diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java
index 89981a3c969..a6859c31aa7 100644
--- a/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java
@@ -24,7 +24,6 @@ import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerEndpointRegistrar;
import org.springframework.jms.config.SimpleJmsListenerEndpoint;
import org.springframework.jms.listener.adapter.ListenerExecutionFailedException;
@@ -62,9 +61,16 @@ public class AnnotationDrivenNamespaceTests extends AbstractJmsAnnotationDrivenT
@Override
@Test
- public void defaultContainerFactoryConfiguration() {
+ public void explicitContainerFactory() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"annotation-driven-custom-container-factory.xml", getClass());
+ testExplicitContainerFactoryConfiguration(context);
+ }
+
+ @Override
+ public void defaultContainerFactory() {
+ ApplicationContext context = new ClassPathXmlApplicationContext(
+ "annotation-driven-default-container-factory.xml", getClass());
testDefaultContainerFactoryConfiguration(context);
}
@@ -82,23 +88,18 @@ public class AnnotationDrivenNamespaceTests extends AbstractJmsAnnotationDrivenT
private MessageListener messageListener;
- private JmsListenerContainerFactory> containerFactory;
-
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setId("myCustomEndpointId");
endpoint.setDestination("myQueue");
endpoint.setMessageListener(messageListener);
- registrar.registerEndpoint(endpoint, containerFactory);
+ registrar.registerEndpoint(endpoint);
}
public void setMessageListener(MessageListener messageListener) {
this.messageListener = messageListener;
}
- public void setContainerFactory(JmsListenerContainerFactory> containerFactory) {
- this.containerFactory = containerFactory;
- }
}
}
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 4e2cfe393ed..b0150e95b48 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
@@ -54,7 +54,7 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests {
@Test
public void sampleConfiguration() {
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(
- EnableJmsConfig.class, SampleBean.class);
+ EnableJmsSampleConfig.class, SampleBean.class);
testSampleConfiguration(context);
}
@@ -62,7 +62,7 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests {
@Test
public void fullConfiguration() {
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(
- EnableJmsConfig.class, FullBean.class);
+ EnableJmsFullConfig.class, FullBean.class);
testFullConfiguration(context);
}
@@ -76,7 +76,15 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests {
@Override
@Test
- public void defaultContainerFactoryConfiguration() {
+ public void explicitContainerFactory() {
+ ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(
+ EnableJmsCustomContainerFactoryConfig.class, DefaultBean.class);
+ testExplicitContainerFactoryConfiguration(context);
+ }
+
+ @Override
+ @Test
+ public void defaultContainerFactory() {
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(
EnableJmsDefaultContainerFactoryConfig.class, DefaultBean.class);
testDefaultContainerFactoryConfiguration(context);
@@ -98,15 +106,15 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests {
thrown.expect(BeanCreationException.class);
thrown.expectMessage("customFactory"); // Not found
new AnnotationConfigApplicationContext(
- EnableJmsConfig.class, CustomBean.class);
+ EnableJmsSampleConfig.class, CustomBean.class);
}
@EnableJms
@Configuration
- static class EnableJmsConfig {
+ static class EnableJmsSampleConfig {
@Bean
- public JmsListenerContainerTestFactory defaultFactory() {
+ public JmsListenerContainerTestFactory jmsListenerContainerFactory() {
return new JmsListenerContainerTestFactory();
}
@@ -116,12 +124,19 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests {
}
}
+ @EnableJms
@Configuration
- @Import(EnableJmsConfig.class)
- static class EnableJmsCustomConfig implements JmsListenerConfigurer {
+ static class EnableJmsFullConfig {
- @Autowired
- private EnableJmsConfig jmsConfig;
+ @Bean
+ public JmsListenerContainerTestFactory simpleFactory() {
+ return new JmsListenerContainerTestFactory();
+ }
+ }
+
+ @Configuration
+ @EnableJms
+ static class EnableJmsCustomConfig implements JmsListenerConfigurer {
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
@@ -132,7 +147,12 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests {
endpoint.setId("myCustomEndpointId");
endpoint.setDestination("myQueue");
endpoint.setMessageListener(simpleMessageListener());
- registrar.registerEndpoint(endpoint, jmsConfig.defaultFactory());
+ registrar.registerEndpoint(endpoint);
+ }
+
+ @Bean
+ public JmsListenerContainerTestFactory jmsListenerContainerFactory() {
+ return new JmsListenerContainerTestFactory();
}
@Bean
@@ -152,20 +172,32 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests {
}
@Configuration
- @Import(EnableJmsConfig.class)
- static class EnableJmsDefaultContainerFactoryConfig implements JmsListenerConfigurer {
-
- @Autowired
- private EnableJmsConfig jmsConfig;
+ @EnableJms
+ static class EnableJmsCustomContainerFactoryConfig implements JmsListenerConfigurer {
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
- registrar.setDefaultContainerFactory(jmsConfig.defaultFactory());
+ registrar.setContainerFactory(simpleFactory());
+ }
+
+ @Bean
+ public JmsListenerContainerTestFactory simpleFactory() {
+ return new JmsListenerContainerTestFactory();
}
}
@Configuration
- @Import(EnableJmsConfig.class)
+ @EnableJms
+ static class EnableJmsDefaultContainerFactoryConfig {
+
+ @Bean
+ public JmsListenerContainerTestFactory jmsListenerContainerFactory() {
+ return new JmsListenerContainerTestFactory();
+ }
+ }
+
+ @Configuration
+ @EnableJms
static class EnableJmsHandlerMethodFactoryConfig implements JmsListenerConfigurer {
@Override
@@ -179,6 +211,11 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests {
factory.setValidator(new TestValidator());
return factory;
}
+
+ @Bean
+ public JmsListenerContainerTestFactory defaultFactory() {
+ return new JmsListenerContainerTestFactory();
+ }
}
}
diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessorTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessorTests.java
index 6b0a96c9ae9..4d28a7a31ad 100644
--- a/spring-jms/src/test/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessorTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessorTests.java
@@ -113,7 +113,7 @@ public class JmsListenerAnnotationBeanPostProcessorTests {
public JmsListenerAnnotationBeanPostProcessor postProcessor() {
JmsListenerAnnotationBeanPostProcessor postProcessor = new JmsListenerAnnotationBeanPostProcessor();
postProcessor.setEndpointRegistry(jmsListenerEndpointRegistry());
- postProcessor.setDefaultContainerFactory(testFactory());
+ postProcessor.setContainerFactoryBeanName("testFactory");
return postProcessor;
}
diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointRegistrarTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointRegistrarTests.java
index c811950315c..f4dd33da297 100644
--- a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointRegistrarTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointRegistrarTests.java
@@ -23,6 +23,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.springframework.context.support.StaticApplicationContext;
+
/**
*
* @author Stephane Nicoll
@@ -41,6 +43,7 @@ public class JmsListenerEndpointRegistrarTests {
@Before
public void setup() {
registrar.setEndpointRegistry(registry);
+ registrar.setApplicationContext(new StaticApplicationContext());
}
@Test
@@ -59,7 +62,7 @@ public class JmsListenerEndpointRegistrarTests {
public void registerNullContainerFactoryIsAllowed() throws Exception {
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setId("some id");
- registrar.setDefaultContainerFactory(containerFactory);
+ registrar.setContainerFactory(containerFactory);
registrar.registerEndpoint(endpoint, null);
registrar.afterPropertiesSet();
assertNotNull("Container not created", registry.getContainer("some id"));
@@ -81,7 +84,7 @@ public class JmsListenerEndpointRegistrarTests {
public void registerContainerWithoutFactory() throws Exception {
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setId("myEndpoint");
- registrar.setDefaultContainerFactory(containerFactory);
+ registrar.setContainerFactory(containerFactory);
registrar.registerEndpoint(endpoint);
registrar.afterPropertiesSet();
assertNotNull("Container not created", registry.getContainer("myEndpoint"));
diff --git a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-container-factory.xml b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-container-factory.xml
index 98edbfff80e..c2f225c846e 100644
--- a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-container-factory.xml
+++ b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-container-factory.xml
@@ -7,11 +7,11 @@
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.1.xsd">
-
+
-
+
\ No newline at end of file
diff --git a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-registry.xml b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-registry.xml
index a05f762ae9d..520764f2ffd 100644
--- a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-registry.xml
+++ b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-registry.xml
@@ -13,14 +13,13 @@
-
+
-
diff --git a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-default-container-factory.xml b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-default-container-factory.xml
new file mode 100644
index 00000000000..7bff1a219a0
--- /dev/null
+++ b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-default-container-factory.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-sample-config.xml b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-sample-config.xml
index 2bc2820432b..4c3b85f2e69 100644
--- a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-sample-config.xml
+++ b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-sample-config.xml
@@ -11,7 +11,7 @@
-
+