From 61f89a1f049dd69b8b8b356168888fa5aae17a71 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 3 Sep 2023 01:13:51 +0200 Subject: [PATCH 1/3] Refine note on listener container setup with CachingConnectionFactory Closes gh-25503 --- .../listener/DefaultMessageListenerContainer.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java index 4c700feffa..af2a2993db 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java @@ -98,12 +98,14 @@ import org.springframework.util.backoff.FixedBackOff; * number of 1 consumer, otherwise you'd receive the same message multiple times on * the same node. * - *

Note: Don't use Spring's {@link org.springframework.jms.connection.CachingConnectionFactory} - * in combination with dynamic scaling. Ideally, don't use it with a message - * listener container at all, since it is generally preferable to let the - * listener container itself handle appropriate caching within its lifecycle. - * Also, stopping and restarting a listener container will only work with an - * independent, locally cached Connection - not with an externally cached one. + *

Note: You may use {@link org.springframework.jms.connection.CachingConnectionFactory} + * with a listener container but it comes with limitations. It is generally preferable + * to let the listener container itself handle appropriate caching within its lifecycle. + * Also, stopping and restarting a listener container will only work with an independent, + * locally cached {@code Connection}, not with an externally cached one. Last but not least, + * with {@code CachingConnectionFactory}, dynamic scaling with custom provider hints such as + * {@link #setMaxMessagesPerTask "maxMessagesPerTask"} can result in JMS messages delivered + * to cached consumers even when they are no longer attached to the listener container. * *

It is strongly recommended to either set {@link #setSessionTransacted * "sessionTransacted"} to "true" or specify an external {@link #setTransactionManager From c0c4298048a5e32973d521bb0eaa31e4d67db389 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 3 Sep 2023 01:14:55 +0200 Subject: [PATCH 2/3] Polishing --- .../jdbc/core/PreparedStatementCreatorFactory.java | 4 ++-- .../org/springframework/jdbc/object/SqlUpdateTests.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java index e01abfaeb1..f3b3d495da 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 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. @@ -180,7 +180,7 @@ public class PreparedStatementCreatorFactory { */ public PreparedStatementCreator newPreparedStatementCreator(String sqlToUse, @Nullable Object[] params) { return new PreparedStatementCreatorImpl( - sqlToUse, params != null ? Arrays.asList(params) : Collections.emptyList()); + sqlToUse, (params != null ? Arrays.asList(params) : Collections.emptyList())); } diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/object/SqlUpdateTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/object/SqlUpdateTests.java index 8f29e657cd..2904dec413 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/object/SqlUpdateTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/object/SqlUpdateTests.java @@ -211,9 +211,8 @@ public class SqlUpdateTests { given(resultSet.getObject(1)).willReturn(11); given(preparedStatement.executeUpdate()).willReturn(1); given(preparedStatement.getGeneratedKeys()).willReturn(resultSet); - given(connection.prepareStatement(INSERT_GENERATE_KEYS, - PreparedStatement.RETURN_GENERATED_KEYS) - ).willReturn(preparedStatement); + given(connection.prepareStatement(INSERT_GENERATE_KEYS, PreparedStatement.RETURN_GENERATED_KEYS)) + .willReturn(preparedStatement); GeneratedKeysUpdater pc = new GeneratedKeysUpdater(); KeyHolder generatedKeyHolder = new GeneratedKeyHolder(); @@ -294,6 +293,7 @@ public class SqlUpdateTests { pc::run); } + private class Updater extends SqlUpdate { public Updater() { From 278f228688dc605a8b899f53a7384eac6983a3a6 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 3 Sep 2023 01:25:47 +0200 Subject: [PATCH 3/3] Upgrade to Groovy 4.0.14, Tomcat 10.1.13, Jetty 11.0.16, Netty 4.1.97, Undertow 2.3.8, Mockito 5.5 --- framework-platform/framework-platform.gradle | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/framework-platform/framework-platform.gradle b/framework-platform/framework-platform.gradle index f4ac09132a..8af0ae79fc 100644 --- a/framework-platform/framework-platform.gradle +++ b/framework-platform/framework-platform.gradle @@ -9,17 +9,17 @@ javaPlatform { dependencies { api(platform("com.fasterxml.jackson:jackson-bom:2.14.3")) api(platform("io.micrometer:micrometer-bom:1.10.9")) - api(platform("io.netty:netty-bom:4.1.96.Final")) + api(platform("io.netty:netty-bom:4.1.97.Final")) api(platform("io.netty:netty5-bom:5.0.0.Alpha5")) api(platform("io.projectreactor:reactor-bom:2022.0.9")) api(platform("io.rsocket:rsocket-bom:1.1.3")) - api(platform("org.apache.groovy:groovy-bom:4.0.13")) + api(platform("org.apache.groovy:groovy-bom:4.0.14")) api(platform("org.apache.logging.log4j:log4j-bom:2.20.0")) - api(platform("org.eclipse.jetty:jetty-bom:11.0.15")) + api(platform("org.eclipse.jetty:jetty-bom:11.0.16")) api(platform("org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.4")) api(platform("org.jetbrains.kotlinx:kotlinx-serialization-bom:1.4.0")) api(platform("org.junit:junit-bom:5.9.3")) - api(platform("org.mockito:mockito-bom:5.4.0")) + api(platform("org.mockito:mockito-bom:5.5.0")) constraints { api("com.fasterxml:aalto-xml:1.3.2") @@ -54,9 +54,9 @@ dependencies { api("io.r2dbc:r2dbc-spi:1.0.0.RELEASE") api("io.reactivex.rxjava3:rxjava:3.1.6") api("io.smallrye.reactive:mutiny:1.9.0") - api("io.undertow:undertow-core:2.3.7.Final") - api("io.undertow:undertow-servlet:2.3.7.Final") - api("io.undertow:undertow-websockets-jsr:2.3.7.Final") + api("io.undertow:undertow-core:2.3.8.Final") + api("io.undertow:undertow-servlet:2.3.8.Final") + api("io.undertow:undertow-websockets-jsr:2.3.8.Final") api("io.vavr:vavr:0.10.4") api("jakarta.activation:jakarta.activation-api:2.0.1") api("jakarta.annotation:jakarta.annotation-api:2.0.0") @@ -99,10 +99,10 @@ dependencies { api("org.apache.httpcomponents.client5:httpclient5:5.2.1") api("org.apache.httpcomponents.core5:httpcore5-reactive:5.2.2") api("org.apache.poi:poi-ooxml:5.2.3") - api("org.apache.tomcat.embed:tomcat-embed-core:10.1.12") - api("org.apache.tomcat.embed:tomcat-embed-websocket:10.1.12") - api("org.apache.tomcat:tomcat-util:10.1.12") - api("org.apache.tomcat:tomcat-websocket:10.1.12") + api("org.apache.tomcat.embed:tomcat-embed-core:10.1.13") + api("org.apache.tomcat.embed:tomcat-embed-websocket:10.1.13") + api("org.apache.tomcat:tomcat-util:10.1.13") + api("org.apache.tomcat:tomcat-websocket:10.1.13") api("org.aspectj:aspectjrt:1.9.20") api("org.aspectj:aspectjtools:1.9.20") api("org.aspectj:aspectjweaver:1.9.20")