Skip to content

Commit 5ea8be9

Browse files
authored
Merge pull request #50239 from gsmet/3.28.1-backports-1
[3.28] 3.28.1 backports 1
2 parents 0dbc0d0 + dceacd2 commit 5ea8be9

File tree

99 files changed

+1418
-331
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+1418
-331
lines changed

.mvn/extensions.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<extension>
1818
<groupId>io.quarkus.develocity</groupId>
1919
<artifactId>quarkus-project-develocity-extension</artifactId>
20-
<version>1.2.3</version>
20+
<version>1.2.4</version>
2121
</extension>
2222
<extension>
2323
<groupId>eu.maveniverse.maven.nisse</groupId>

bom/application/pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
<properties>
1717
<angus-activation.version>2.0.3</angus-activation.version>
1818
<angus-mail.version>2.0.4</angus-mail.version> <!-- keep in sync with angus-activation (mail depends on activation) -->
19-
<bouncycastle.version>1.81</bouncycastle.version>
20-
<bouncycastle.fips.version>2.1.1</bouncycastle.fips.version>
19+
<bouncycastle.version>1.82</bouncycastle.version>
20+
<bouncycastle.fips.version>2.1.2</bouncycastle.fips.version>
2121
<bouncycastle.tls.fips.version>2.1.20</bouncycastle.tls.fips.version>
2222
<cyclonedx.version>9.0.5</cyclonedx.version>
2323
<expressly.version>6.0.0</expressly.version>
@@ -58,7 +58,7 @@
5858
<smallrye-reactive-streams-operators.version>1.0.13</smallrye-reactive-streams-operators.version>
5959
<smallrye-reactive-types-converter.version>3.0.3</smallrye-reactive-types-converter.version>
6060
<smallrye-mutiny-vertx-binding.version>3.19.2</smallrye-mutiny-vertx-binding.version>
61-
<smallrye-reactive-messaging.version>4.28.0</smallrye-reactive-messaging.version>
61+
<smallrye-reactive-messaging.version>4.29.0</smallrye-reactive-messaging.version>
6262
<smallrye-stork.version>2.7.3</smallrye-stork.version>
6363
<jakarta.activation.version>2.1.4</jakarta.activation.version>
6464
<jakarta.annotation-api.version>3.0.0</jakarta.annotation-api.version>
@@ -70,7 +70,7 @@
7070
<jakarta.interceptor-api.version>2.2.0</jakarta.interceptor-api.version>
7171
<jakarta.json-api.version>2.1.3</jakarta.json-api.version>
7272
<jakarta.json.bind-api.version>3.0.1</jakarta.json.bind-api.version>
73-
<jakarta.mail-api.version>2.1.4</jakarta.mail-api.version>
73+
<jakarta.mail-api.version>2.1.5</jakarta.mail-api.version>
7474
<!--jakarta.persistence-api.version is located in the root pom -->
7575
<jakarta.data-api.version>1.0.1</jakarta.data-api.version>
7676
<jakarta.resource-api.version>2.1.0</jakarta.resource-api.version>
@@ -79,7 +79,7 @@
7979
<jakarta.validation-api.version>3.1.1</jakarta.validation-api.version>
8080
<jakarta.websocket-api.version>2.1.1</jakarta.websocket-api.version>
8181
<jakarta.ws.rs-api.version>3.1.0</jakarta.ws.rs-api.version>
82-
<jakarta.xml.bind-api.version>4.0.2</jakarta.xml.bind-api.version>
82+
<jakarta.xml.bind-api.version>4.0.4</jakarta.xml.bind-api.version>
8383
<jaxb-runtime.version>4.0.5</jaxb-runtime.version>
8484
<asm.version>9.8</asm.version>
8585
<commons-io.version>2.20.0</commons-io.version>
@@ -101,7 +101,7 @@
101101
<narayana-lra.version>1.0.2.Final</narayana-lra.version>
102102
<agroal.version>2.8</agroal.version>
103103
<jboss-transaction-spi.version>8.0.0.Final</jboss-transaction-spi.version>
104-
<elasticsearch-opensource-components.version>9.1.3</elasticsearch-opensource-components.version>
104+
<elasticsearch-opensource-components.version>9.1.4</elasticsearch-opensource-components.version>
105105
<rxjava.version>2.2.21</rxjava.version>
106106
<wildfly.openssl-java.version>2.2.5.Final</wildfly.openssl-java.version>
107107
<wildfly.openssl-linux.version>2.2.2.SP01</wildfly.openssl-linux.version>
@@ -120,7 +120,7 @@
120120
<quartz.version>2.5.0</quartz.version>
121121
<h2.version>2.3.230</h2.version> <!-- When updating, needs to be matched in io.quarkus.hibernate.orm.runtime.config.DialectVersions
122122
and the dependency jts-core needs to be updated in extensions/jdbc/jdbc-h2/runtime/pom.xml -->
123-
<postgresql-jdbc.version>42.7.7</postgresql-jdbc.version>
123+
<postgresql-jdbc.version>42.7.8</postgresql-jdbc.version>
124124
<mariadb-jdbc.version>3.5.6</mariadb-jdbc.version>
125125
<mysql-jdbc.version>8.3.0</mysql-jdbc.version>
126126
<mssql-jdbc.version>13.2.0.jre11</mssql-jdbc.version>

build-parent/pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
<!-- These 2 properties are used by CreateProjectMojo to add the Maven Wrapper -->
6464
<proposed-maven-version>3.9.11</proposed-maven-version>
6565
<maven-wrapper.version>3.3.4</maven-wrapper.version>
66-
<gradle-wrapper.version>9.0.0</gradle-wrapper.version>
66+
<gradle-wrapper.version>9.1.0</gradle-wrapper.version>
6767
<quarkus-gradle-plugin.version>${project.version}</quarkus-gradle-plugin.version>
6868
<quarkus-maven-plugin.version>${project.version}</quarkus-maven-plugin.version>
6969
<maven-plugin-plugin.version>3.8.1</maven-plugin-plugin.version>
@@ -74,7 +74,7 @@
7474
<volume.access.modifier>:Z</volume.access.modifier>
7575

7676
<!-- Defaults for integration tests -->
77-
<elasticsearch-server.version>9.1.3</elasticsearch-server.version>
77+
<elasticsearch-server.version>9.1.4</elasticsearch-server.version>
7878
<elasticsearch.image>docker.io/elastic/elasticsearch:${elasticsearch-server.version}</elasticsearch.image>
7979
<logstash.image>docker.io/elastic/logstash:${elasticsearch-server.version}</logstash.image>
8080
<kibana.image>docker.io/elastic/kibana:${elasticsearch-server.version}</kibana.image>
@@ -97,14 +97,14 @@
9797
<junit4.version>4.13.2</junit4.version>
9898

9999
<!-- The image to use for tests that run Keycloak -->
100-
<keycloak.server.version>26.3.0</keycloak.server.version>
100+
<keycloak.server.version>26.3.4</keycloak.server.version>
101101
<keycloak.wildfly.version>19.0.3</keycloak.wildfly.version>
102102
<keycloak.docker.image>quay.io/keycloak/keycloak:${keycloak.server.version}</keycloak.docker.image>
103103
<keycloak.docker.legacy.image>quay.io/keycloak/keycloak:${keycloak.wildfly.version}-legacy</keycloak.docker.legacy.image>
104104

105105
<unboundid-ldap.version>7.0.3</unboundid-ldap.version>
106106

107-
<assertj.version>3.27.4</assertj.version>
107+
<assertj.version>3.27.6</assertj.version>
108108

109109
<wiremock.version>3.13.1</wiremock.version>
110110
<wiremock-maven-plugin.version>7.3.0</wiremock-maven-plugin.version>

core/deployment/src/main/java/io/quarkus/deployment/dev/testing/JunitTestRunner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public class JunitTestRunner {
9898
public static final DotName TESTABLE = DotName.createSimple(Testable.class.getName());
9999
public static final DotName NESTED = DotName.createSimple(Nested.class.getName());
100100
private static final String ARCHUNIT_FIELDSOURCE_FQCN = "com.tngtech.archunit.junit.FieldSource";
101-
public static final String FACADE_CLASS_LOADER_NAME = "io.quarkus.test.junit.classloading.FacadeClassLoader";
101+
private static final String FACADE_CLASS_LOADER_NAME = "io.quarkus.test.junit.classloading.FacadeClassLoader";
102102

103103
private final long runId;
104104
private final DevModeContext.ModuleInfo moduleInfo;

devtools/gradle/gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ kotlin = "2.2.20"
55
smallrye-config = "3.13.4"
66

77
junit5 = "5.13.4"
8-
assertj = "3.27.4"
8+
assertj = "3.27.6"
99

1010
[plugins]
1111
plugin-publish = { id = "com.gradle.plugin-publish", version.ref = "plugin-publish" }
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
33
# https://gradle.org/release-checksums/
4-
distributionSha256Sum=f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365
5-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-all.zip
4+
distributionSha256Sum=b84e04fa845fecba48551f425957641074fcc00a88a84d2aae5808743b35fc85
5+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip
66
networkTimeout=10000
77
zipStoreBase=GRADLE_USER_HOME
88
zipStorePath=wrapper/dists

docs/src/main/asciidoc/building-my-first-extension.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ Your extension is a multi-module project. So let's start by checking out the par
177177
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
178178
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
179179
<quarkus.version>{quarkus-version}</quarkus.version>
180-
<surefire-plugin.version>3.0.0</surefire-plugin.version>
180+
<surefire-plugin.version>3.5.4</surefire-plugin.version>
181181
</properties>
182182
<dependencyManagement>
183183
<dependencies>

docs/src/main/asciidoc/jreleaser.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ As a reference, these are the full contents of the `pom.xml`:
644644
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
645645
<quarkus.platform.group-id>{quarkus-platform-groupid}</quarkus.platform.group-id>
646646
<quarkus.platform.version>{quarkus-version}</quarkus.platform.version>
647-
<surefire-plugin.version>3.0.0</surefire-plugin.version>
647+
<surefire-plugin.version>3.5.4</surefire-plugin.version>
648648
</properties>
649649
<dependencyManagement>
650650
<dependencies>

docs/src/main/asciidoc/native-reference.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ For example:
602602
----
603603
$ ./mvnw verify -DskipITs=false -Dquarkus.test.integration-test-profile=test-with-native-agent
604604
...
605-
[INFO] --- failsafe:3.5.2:integration-test (default) @ new-project ---
605+
[INFO] --- failsafe:3.5.4:integration-test (default) @ new-project ---
606606
...
607607
[INFO] -------------------------------------------------------
608608
[INFO] T E S T S

docs/src/main/asciidoc/redis-reference.adoc

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@ There are other methods that can be useful to manipulate counters, such as:
643643
- `set` - to set an initial value if needed
644644
- `decr` and `decrby` - allows decrementing the stored value
645645

646-
==== Communicate with pub/sub
646+
=== Communicate with pub/sub
647647

648648
Redis allows sending _messages_ to channels and listening for these messages.
649649
These features are available from the `pubsub` group.
@@ -710,7 +710,7 @@ public static class MyCache {
710710
}
711711
----
712712

713-
==== Use Redis transactions
713+
=== Use Redis transactions
714714

715715
Redis transactions are slightly different from relational database transactions.
716716
Redis transactions are a batch of commands executed altogether.
@@ -741,7 +741,7 @@ TransactionResult result = ds.withTransaction(tx -> {
741741
});
742742
----
743743

744-
The received `tx` object can also be used to _discard_ the transaction, using: `tx.discard();`.
744+
The received `tx` object can also be used to _discard_ the transaction, using `tx.discard()`.
745745
The returned `TransactionResult` lets you retrieve the result of each command.
746746

747747
When using the reactive variant of the data source, the passed callback is a `Function<ReactiveTransactionalRedisDataSource, Uni<Void>>`:
@@ -761,7 +761,7 @@ Uni<TransactionResult> result = ds.withTransaction(tx -> {
761761

762762
Transaction execution can be conditioned by _keys_.
763763
When a passed key gets modified during the execution of a transaction, the transaction is discarded.
764-
The keys are passed as `String` as a second parameter to the `withTransaction` method:
764+
The keys are passed as ``String``s to the second, vararg parameter of the `withTransaction` method:
765765

766766
[source,java]
767767
----
@@ -776,19 +776,21 @@ IMPORTANT: You cannot use the pub/sub feature from within a transaction.
776776

777777
==== Implement the optimistic locking pattern
778778

779-
To use optimistic locking, you need to use a variant of the `withTransaction` method, allowing the execution of code before the transaction starts.
779+
To use optimistic locking, you need to use a variant of the `withTransaction` method allowing execution of code before the transaction starts.
780780
In other words, it will be executed as follows:
781781

782782
[source]
783783
----
784784
WATCH key
785785
786786
// Pre-transaction block
787-
// ....
787+
// ...
788788
// Produce a result
789789
790790
MULTI
791-
// In transaction code, receive the result produced by the pre-transaction block.
791+
792+
// In transaction code, receive the result produced by the pre-transaction block.
793+
792794
EXEC
793795
----
794796

@@ -801,14 +803,16 @@ OptimisticLockingTransactionResult<Boolean> result = blocking.withTransaction(ds
801803
HashCommands<String, String, String> hashCommands = ds.hash(String.class);
802804
return hashCommands.hexists(key, "field"); // Produce a result (boolean in this case)
803805
},
804-
(exists, tx) -> { // The transactional block, receives the result and the transactional data source
805-
if (exists) {
806-
tx.hash(String.class).hset(key, "field", "new value");
807-
} else {
808-
tx.discard();
809-
}
810-
},
811-
key); // The watched key
806+
(exists, tx) -> {
807+
// The transactional block, receives the result and the transactional data source
808+
if (exists) {
809+
tx.hash(String.class).hset(key, "field", "new value");
810+
} else {
811+
tx.discard();
812+
}
813+
},
814+
// The watched key
815+
key);
812816
----
813817

814818
If one of the watched keys is touched before or during the execution of the pre-transaction or transactional blocks, the transaction is aborted.
@@ -821,9 +825,35 @@ Consequently, the pre-transaction block must use the passed data source to execu
821825
Thus, the commands are emitted from that connection.
822826
These commands must not modify the watched keys.
823827

824-
The transaction is aborted if the pre-transaction block throws an exception (or produces a failure when using the reactive API).
828+
==== Error handling
829+
830+
If the transaction block returns successfully (or completes with an item in case of the reactive API), the transaction is executed.
831+
Note that in this case, some transaction commands may succeed and some may fail; this is standard Redis behavior.
832+
The `TransactionResult.hasErrors()` method indicates whether at least one command failed.
833+
Results of failed commands in the `TransactionResult` are represented as ``Throwable``s.
834+
If the transaction block throws an exception (or completes with a failure in case of the reactive API), the transaction is discarded automatically and the exception is rethrown (or the resulting `Uni` completes with the same failure in case of the reactive API).
835+
836+
In case of the optimistic locking API, if the pre-transaction block returns successfully (or completes with an item in case of the reactive API), the transaction is started and execution proceeds to the transaction block.
837+
If the pre-transaction block throws an exception (or completes with a failure in case of the reactive API), all watched keys are ``UNWATCH``ed automatically and the exception is rethrown (or the resulting `Uni` completes with the same failure in case of the reactive API).
838+
In this case, the transaction is not started and the transaction block is not executed.
839+
840+
==== Transactions in Redis Cluster
841+
842+
In the cluster mode, transaction commands (`MULTI`, `EXEC`, `DISCARD`, `WATCH`, `UNWATCH`) are handled specially.
843+
844+
By default, transactions in cluster are disabled and transaction commands immediately fail.
845+
846+
It is however possible to enable single-node transactions by setting `quarkus.redis.cluster-transactions` to `single-node`.
847+
Note that this setting only makes sense in the cluster mode and is ignored otherwise.
848+
849+
In this mode, the `MULTI` command is queued and is only issued when the next command is executed.
850+
This next command binds the connection to the corresponding node of the Redis cluster (so it should have keys, otherwise the target node is random).
851+
All subsequent commands are targeted to that node.
852+
If some of the subsequent commands have a key that belongs to another node, the command fails on the server side.
853+
If `WATCH` is used before `MULTI`, its key(s) determine to which node the connection is bound and the subsequent `MULTI` is not queued.
854+
If `WATCH` keys belong to multiple nodes, the command fails on the client side.
825855

826-
==== Execute custom commands
856+
=== Execute custom commands
827857

828858
To execute a custom command, or a command not supported by the API, use the following approach:
829859

@@ -927,8 +957,8 @@ The documentation of the Vert.x Redis Client is available on the https://vertx.i
927957

928958
== Configure Redis hosts programmatically
929959

930-
The `RedisHostsProvider` programmatically provides redis hosts.
931-
This allows for configuration of properties like redis connection password coming from other sources.
960+
The `RedisHostsProvider` programmatically provides Redis hosts.
961+
This allows for configuration of properties like Redis connection password coming from other sources.
932962

933963
[NOTE]
934964
====

0 commit comments

Comments
 (0)