Skip to content

Commit 0d2eaa7

Browse files
committed
Polish "Add config prop for JMS listener's sessionTransacted flag"
See gh-37473
1 parent 79e2cb3 commit 0d2eaa7

File tree

3 files changed

+26
-22
lines changed

3 files changed

+26
-22
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/DefaultJmsListenerContainerFactoryConfigurer.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import jakarta.jms.ConnectionFactory;
2222
import jakarta.jms.ExceptionListener;
2323

24+
import org.springframework.boot.autoconfigure.jms.JmsProperties.Listener.Session;
2425
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
2526
import org.springframework.jms.support.converter.MessageConverter;
2627
import org.springframework.jms.support.destination.DestinationResolver;
@@ -103,14 +104,16 @@ public void configure(DefaultJmsListenerContainerFactory factory, ConnectionFact
103104
factory.setConnectionFactory(connectionFactory);
104105
factory.setPubSubDomain(this.jmsProperties.isPubSubDomain());
105106
JmsProperties.Listener listener = this.jmsProperties.getListener();
107+
Session session = listener.getSession();
108+
Boolean sessionTransacted = session.getTransacted();
106109
if (this.transactionManager != null) {
107110
factory.setTransactionManager(this.transactionManager);
108111
}
109-
else if (listener.getSessionTransacted() == null) {
112+
else if (sessionTransacted == null) {
110113
factory.setSessionTransacted(true);
111114
}
112-
if (listener.getSessionTransacted() != null) {
113-
factory.setSessionTransacted(listener.getSessionTransacted());
115+
if (sessionTransacted != null) {
116+
factory.setSessionTransacted(sessionTransacted);
114117
}
115118
if (this.destinationResolver != null) {
116119
factory.setDestinationResolver(this.destinationResolver);
@@ -122,7 +125,7 @@ else if (listener.getSessionTransacted() == null) {
122125
factory.setExceptionListener(this.exceptionListener);
123126
}
124127
factory.setAutoStartup(listener.isAutoStartup());
125-
factory.setSessionAcknowledgeMode(listener.getSession().getAcknowledgeMode().getMode());
128+
factory.setSessionAcknowledgeMode(session.getAcknowledgeMode().getMode());
126129
String concurrency = listener.formatConcurrency();
127130
if (concurrency != null) {
128131
factory.setConcurrency(concurrency);

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/JmsProperties.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,6 @@ public static class Listener {
141141
*/
142142
private boolean autoStartup = true;
143143

144-
/**
145-
* Whether the container should use transacted JMS sessions.
146-
*/
147-
private Boolean sessionTransacted;
148-
149144
/**
150145
* Minimum number of concurrent consumers. When max-concurrency is not specified
151146
* the minimum will also be used as the maximum.
@@ -185,14 +180,6 @@ public void setAcknowledgeMode(AcknowledgeMode acknowledgeMode) {
185180
this.session.setAcknowledgeMode(acknowledgeMode);
186181
}
187182

188-
public Boolean getSessionTransacted() {
189-
return this.sessionTransacted;
190-
}
191-
192-
public void setSessionTransacted(Boolean sessionTransacted) {
193-
this.sessionTransacted = sessionTransacted;
194-
}
195-
196183
@DeprecatedConfigurationProperty(replacement = "spring.jms.listener.min-concurrency", since = "3.2.0")
197184
@Deprecated(since = "3.2.0", forRemoval = true)
198185
public Integer getConcurrency() {
@@ -247,6 +234,12 @@ public static class Session {
247234
*/
248235
private AcknowledgeMode acknowledgeMode = AcknowledgeMode.AUTO;
249236

237+
/**
238+
* Whether the listener container should use transacted JMS sessions. Defaults
239+
* to false in the presence of a JtaTransactionManager and true otherwise.
240+
*/
241+
private Boolean transacted;
242+
250243
public AcknowledgeMode getAcknowledgeMode() {
251244
return this.acknowledgeMode;
252245
}
@@ -255,6 +248,14 @@ public void setAcknowledgeMode(AcknowledgeMode acknowledgeMode) {
255248
this.acknowledgeMode = acknowledgeMode;
256249
}
257250

251+
public Boolean getTransacted() {
252+
return this.transacted;
253+
}
254+
255+
public void setTransacted(Boolean transacted) {
256+
this.transacted = transacted;
257+
}
258+
258259
}
259260

260261
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/JmsAutoConfigurationTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@ void jmsListenerContainerFactoryWhenMultipleConnectionFactoryBeansShouldBackOff(
144144
void testJmsListenerContainerFactoryWithCustomSettings() {
145145
this.contextRunner.withUserConfiguration(EnableJmsConfiguration.class)
146146
.withPropertyValues("spring.jms.listener.autoStartup=false",
147-
"spring.jms.listener.session.acknowledgeMode=client", "spring.jms.listener.sessionTransacted=false",
148-
"spring.jms.listener.minConcurrency=2", "spring.jms.listener.receiveTimeout=2s",
149-
"spring.jms.listener.maxConcurrency=10")
147+
"spring.jms.listener.session.acknowledgeMode=client",
148+
"spring.jms.listener.session.transacted=false", "spring.jms.listener.minConcurrency=2",
149+
"spring.jms.listener.receiveTimeout=2s", "spring.jms.listener.maxConcurrency=10")
150150
.run(this::testJmsListenerContainerFactoryWithCustomSettings);
151151
}
152152

@@ -185,7 +185,7 @@ void testDefaultContainerFactoryWithJtaTransactionManager() {
185185
@Test
186186
void testDefaultContainerFactoryWithJtaTransactionManagerAndSessionTransactedEnabled() {
187187
this.contextRunner.withUserConfiguration(TestConfiguration7.class, EnableJmsConfiguration.class)
188-
.withPropertyValues("spring.jms.listener.sessionTransacted=true")
188+
.withPropertyValues("spring.jms.listener.session.transacted=true")
189189
.run((context) -> {
190190
DefaultMessageListenerContainer container = getContainer(context, "jmsListenerContainerFactory");
191191
assertThat(container.isSessionTransacted()).isTrue();
@@ -216,7 +216,7 @@ void testDefaultContainerFactoryNoTransactionManager() {
216216
@Test
217217
void testDefaultContainerFactoryNoTransactionManagerAndSessionTransactedDisabled() {
218218
this.contextRunner.withUserConfiguration(EnableJmsConfiguration.class)
219-
.withPropertyValues("spring.jms.listener.sessionTransacted=false")
219+
.withPropertyValues("spring.jms.listener.session.transacted=false")
220220
.run((context) -> {
221221
DefaultMessageListenerContainer container = getContainer(context, "jmsListenerContainerFactory");
222222
assertThat(container.isSessionTransacted()).isFalse();

0 commit comments

Comments
 (0)