Polish "Add support to auto-configure javax.jms.ExceptionListener"

See gh-25278
pull/25299/head
Stephane Nicoll 4 years ago
parent 1f00c27c7e
commit 8c0c30e7a8

@ -40,12 +40,12 @@ public final class DefaultJmsListenerContainerFactoryConfigurer {
private MessageConverter messageConverter;
private ExceptionListener exceptionListener;
private JtaTransactionManager transactionManager;
private JmsProperties jmsProperties;
private ExceptionListener exceptionListener;
/**
* Set the {@link DestinationResolver} to use or {@code null} if no destination
* resolver should be associated with the factory by default.
@ -64,6 +64,15 @@ public final class DefaultJmsListenerContainerFactoryConfigurer {
this.messageConverter = messageConverter;
}
/**
* Set the {@link ExceptionListener} to use or {@code null} if no exception listener
* should be associated by default.
* @param exceptionListener the {@link ExceptionListener}
*/
void setExceptionListener(ExceptionListener exceptionListener) {
this.exceptionListener = exceptionListener;
}
/**
* Set the {@link JtaTransactionManager} to use or {@code null} if the JTA support
* should not be used.
@ -81,14 +90,6 @@ public final class DefaultJmsListenerContainerFactoryConfigurer {
this.jmsProperties = jmsProperties;
}
/**
* Set the {@link ExceptionListener}.
* @param exceptionListener the {@link ExceptionListener}
*/
void setExceptionListener(ExceptionListener exceptionListener) {
this.exceptionListener = exceptionListener;
}
/**
* Configure the specified jms listener container factory. The factory can be further
* tuned and default settings can be overridden.
@ -112,6 +113,9 @@ public final class DefaultJmsListenerContainerFactoryConfigurer {
if (this.messageConverter != null) {
factory.setMessageConverter(this.messageConverter);
}
if (this.exceptionListener != null) {
factory.setExceptionListener(this.exceptionListener);
}
JmsProperties.Listener listener = this.jmsProperties.getListener();
factory.setAutoStartup(listener.isAutoStartup());
if (listener.getAcknowledgeMode() != null) {
@ -125,9 +129,6 @@ public final class DefaultJmsListenerContainerFactoryConfigurer {
if (receiveTimeout != null) {
factory.setReceiveTimeout(receiveTimeout.toMillis());
}
if (this.exceptionListener != null) {
factory.setExceptionListener(this.exceptionListener);
}
}
}

@ -212,6 +212,16 @@ class JmsAutoConfigurationTests {
});
}
@Test
void testDefaultContainerFactoryWithExceptionListener() {
ExceptionListener exceptionListener = mock(ExceptionListener.class);
this.contextRunner.withUserConfiguration(EnableJmsConfiguration.class)
.withBean(ExceptionListener.class, () -> exceptionListener).run((context) -> {
DefaultMessageListenerContainer container = getContainer(context, "jmsListenerContainerFactory");
assertThat(container.getExceptionListener()).isSameAs(exceptionListener);
});
}
@Test
void testCustomContainerFactoryWithConfigurer() {
this.contextRunner.withUserConfiguration(TestConfiguration9.class, EnableJmsConfiguration.class)
@ -395,15 +405,6 @@ class JmsAutoConfigurationTests {
.hasBean(JmsListenerConfigUtils.JMS_LISTENER_ENDPOINT_REGISTRY_BEAN_NAME));
}
@Test
void testDefaultContainerFactoryWithExceptionListener() {
this.contextRunner.withUserConfiguration(TestConfiguration11.class, EnableJmsConfiguration.class)
.run((context) -> {
DefaultMessageListenerContainer container = getContainer(context, "jmsListenerContainerFactory");
assertThat(container.getExceptionListener()).isSameAs(context.getBean("exceptionListener"));
});
}
@Configuration(proxyBeanMethods = false)
static class TestConfiguration {
@ -559,16 +560,6 @@ class JmsAutoConfigurationTests {
}
@Configuration(proxyBeanMethods = false)
static class TestConfiguration11 {
@Bean
ExceptionListener exceptionListener() {
return mock(ExceptionListener.class);
}
}
@Configuration(proxyBeanMethods = false)
@EnableJms
static class EnableJmsConfiguration {

@ -5416,7 +5416,7 @@ If a `DestinationResolver` or a `MessageConverter` bean is defined, it is associ
==== Receiving a Message
When the JMS infrastructure is present, any bean can be annotated with `@JmsListener` to create a listener endpoint.
If no `JmsListenerContainerFactory` has been defined, a default one is configured automatically.
If a `DestinationResolver` or a `MessageConverter` beans is defined, it is associated automatically to the default factory.
If a `DestinationResolver`, a `MessageConverter`, or a `javax.jms.ExceptionListener` beans are defined, they are associated automatically with the default factory.
By default, the default factory is transactional.
If you run in an infrastructure where a `JtaTransactionManager` is present, it is associated to the listener container by default.

Loading…
Cancel
Save