Browse Source
This commit introduces a `SimpleJmsListenerContainerFactoryConfigurer` that can be used to conveniently apply settings provided by JMS auto-configuration to `SimpleJmsListenerContainerFactory` instances. Signed-off-by: Vedran Pavic <vedran@vedranpavic.com>pull/47716/head
6 changed files with 200 additions and 88 deletions
@ -0,0 +1,131 @@
@@ -0,0 +1,131 @@
|
||||
/* |
||||
* Copyright 2012-present 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.jms.autoconfigure; |
||||
|
||||
import io.micrometer.observation.ObservationRegistry; |
||||
import jakarta.jms.ConnectionFactory; |
||||
import jakarta.jms.ExceptionListener; |
||||
import org.jspecify.annotations.Nullable; |
||||
|
||||
import org.springframework.boot.context.properties.PropertyMapper; |
||||
import org.springframework.boot.jms.autoconfigure.JmsProperties.Listener.Session; |
||||
import org.springframework.jms.config.AbstractJmsListenerContainerFactory; |
||||
import org.springframework.jms.support.converter.MessageConverter; |
||||
import org.springframework.jms.support.destination.DestinationResolver; |
||||
import org.springframework.util.Assert; |
||||
|
||||
/** |
||||
* Configures {@link AbstractJmsListenerContainerFactory} with sensible defaults. |
||||
* |
||||
* @param <T> the connection factory type. |
||||
* @author Vedran Pavic |
||||
* @since 4.0.0 |
||||
*/ |
||||
public abstract class AbstractJmsListenerContainerFactoryConfigurer<T extends AbstractJmsListenerContainerFactory<?>> { |
||||
|
||||
private @Nullable DestinationResolver destinationResolver; |
||||
|
||||
private @Nullable MessageConverter messageConverter; |
||||
|
||||
private @Nullable ExceptionListener exceptionListener; |
||||
|
||||
private @Nullable ObservationRegistry observationRegistry; |
||||
|
||||
private @Nullable JmsProperties jmsProperties; |
||||
|
||||
/** |
||||
* Set the {@link DestinationResolver} to use or {@code null} if no destination |
||||
* resolver should be associated with the factory by default. |
||||
* @param destinationResolver the {@link DestinationResolver} |
||||
*/ |
||||
void setDestinationResolver(@Nullable DestinationResolver destinationResolver) { |
||||
this.destinationResolver = destinationResolver; |
||||
} |
||||
|
||||
/** |
||||
* Set the {@link MessageConverter} to use or {@code null} if the out-of-the-box |
||||
* converter should be used. |
||||
* @param messageConverter the {@link MessageConverter} |
||||
*/ |
||||
void setMessageConverter(@Nullable MessageConverter messageConverter) { |
||||
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(@Nullable ExceptionListener exceptionListener) { |
||||
this.exceptionListener = exceptionListener; |
||||
} |
||||
|
||||
/** |
||||
* Set the {@link JmsProperties} to use. |
||||
* @param jmsProperties the {@link JmsProperties} |
||||
*/ |
||||
void setJmsProperties(@Nullable JmsProperties jmsProperties) { |
||||
this.jmsProperties = jmsProperties; |
||||
} |
||||
|
||||
/** |
||||
* Set the {@link ObservationRegistry} to use. |
||||
* @param observationRegistry the {@link ObservationRegistry} |
||||
*/ |
||||
void setObservationRegistry(@Nullable ObservationRegistry observationRegistry) { |
||||
this.observationRegistry = observationRegistry; |
||||
} |
||||
|
||||
/** |
||||
* Configure the specified jms listener container factory. The factory can be further |
||||
* tuned and default settings can be overridden. |
||||
* @param factory the {@link AbstractJmsListenerContainerFactory} instance to |
||||
* configure |
||||
* @param connectionFactory the {@link ConnectionFactory} to use |
||||
*/ |
||||
public void configure(T factory, ConnectionFactory connectionFactory) { |
||||
Assert.notNull(factory, "'factory' must not be null"); |
||||
Assert.notNull(connectionFactory, "'connectionFactory' must not be null"); |
||||
Assert.state(this.jmsProperties != null, "'jmsProperties' must not be null"); |
||||
JmsProperties.Listener listenerProperties = this.jmsProperties.getListener(); |
||||
Session sessionProperties = listenerProperties.getSession(); |
||||
factory.setConnectionFactory(connectionFactory); |
||||
PropertyMapper map = PropertyMapper.get(); |
||||
map.from(this.jmsProperties::isPubSubDomain).to(factory::setPubSubDomain); |
||||
map.from(this.jmsProperties::isSubscriptionDurable).to(factory::setSubscriptionDurable); |
||||
map.from(this.jmsProperties::getClientId).to(factory::setClientId); |
||||
map.from(this.destinationResolver).to(factory::setDestinationResolver); |
||||
map.from(this.messageConverter).to(factory::setMessageConverter); |
||||
map.from(this.exceptionListener).to(factory::setExceptionListener); |
||||
map.from(sessionProperties.getAcknowledgeMode()::getMode).to(factory::setSessionAcknowledgeMode); |
||||
map.from(this.observationRegistry).to(factory::setObservationRegistry); |
||||
map.from(sessionProperties::getTransacted).to(factory::setSessionTransacted); |
||||
map.from(listenerProperties::isAutoStartup).to(factory::setAutoStartup); |
||||
configure(factory, connectionFactory, this.jmsProperties); |
||||
} |
||||
|
||||
/** |
||||
* Configures the given {@code factory} using the given {@code connectionFactory} and |
||||
* {@code jmsProperties}. |
||||
* @param factory the {@link AbstractJmsListenerContainerFactory} instance to |
||||
* configure |
||||
* @param connectionFactory the {@link ConnectionFactory} to use |
||||
* @param jmsProperties the {@link JmsProperties} to use |
||||
*/ |
||||
protected abstract void configure(T factory, ConnectionFactory connectionFactory, JmsProperties jmsProperties); |
||||
|
||||
} |
||||
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
/* |
||||
* Copyright 2012-present 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.jms.autoconfigure; |
||||
|
||||
import jakarta.jms.ConnectionFactory; |
||||
|
||||
import org.springframework.jms.config.SimpleJmsListenerContainerFactory; |
||||
|
||||
/** |
||||
* Configures {@link SimpleJmsListenerContainerFactory} with sensible defaults. |
||||
* |
||||
* @author Vedran Pavic |
||||
* @since 4.0.0 |
||||
*/ |
||||
public final class SimpleJmsListenerContainerFactoryConfigurer |
||||
extends AbstractJmsListenerContainerFactoryConfigurer<SimpleJmsListenerContainerFactory> { |
||||
|
||||
@Override |
||||
protected void configure(SimpleJmsListenerContainerFactory factory, ConnectionFactory connectionFactory, |
||||
JmsProperties jmsProperties) { |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue