diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2315423468..03c51875a7 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -45,6 +45,52 @@ updates: - com.thoughtworks.xstream:xstream - org.springframework.security* + - package-ecosystem: gradle + target-branch: 6.4.x + directory: / + schedule: + interval: weekly + day: sunday + ignore: + - dependency-name: '*' + update-types: + - version-update:semver-major + - version-update:semver-minor + open-pull-requests-limit: 10 + labels: + - 'type: dependency-upgrade' + groups: + development-dependencies: + update-types: + - patch + patterns: + - com.gradle.* + - com.github.spotbugs + - io.spring.* + - org.ajoberstar.grgit + - org.antora + - com.google.protobuf + - io.micrometer:micrometer-docs-generator + - com.willowtreeapps.assertk:assertk-jvm + - org.jetbrains.dokka + - org.apache.activemq* + - org.aspectj* + - org.awaitility:awaitility + - org.apache.commons:commons-dbcp2 + - org.apache.derby + - com.icegreen:greenmail + - org.hibernate.orm* + - org.testcontainers* + - org.hsqldb:hsqldb + - com.h2database:h2 + - org.postgresql:postgresql + - mysql:mysql-connector-java + - com.oracle.database.jdbc:ojdbc11 + - org.apache.tomcat.embed:tomcat-embed-websocket + - org.xmlunit:xmlunit-assertj3 + - com.thoughtworks.xstream:xstream + - org.springframework.security* + - package-ecosystem: gradle target-branch: 6.3.x directory: / @@ -102,6 +148,18 @@ updates: development-dependencies: patterns: - '*' + - package-ecosystem: github-actions + target-branch: 6.4.x + directory: / + schedule: + interval: weekly + day: saturday + labels: + - 'type: task' + groups: + development-dependencies: + patterns: + - '*' - package-ecosystem: github-actions target-branch: 6.3.x diff --git a/build.gradle b/build.gradle index 7709239624..25408a984c 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id 'io.spring.antora.generate-antora-yml' version '0.0.1' id 'com.github.spotbugs' version '6.0.27' id 'com.google.protobuf' version '0.9.4' apply false - id 'io.freefair.aggregate-javadoc' version '8.10.2' + id 'io.freefair.aggregate-javadoc' version '8.11' } if (isCI) { @@ -55,15 +55,15 @@ ext { modifiedFiles.finalizeValueOnRead() apacheSshdVersion = '2.14.0' - artemisVersion = '2.37.0' + artemisVersion = '2.39.0' aspectjVersion = '1.9.22.1' - assertjVersion = '3.26.3' + assertjVersion = '3.27.1' assertkVersion = '0.28.1' avroVersion = '1.12.0' awaitilityVersion = '4.2.2' - camelVersion = '4.8.2' - commonsDbcp2Version = '2.12.0' - commonsIoVersion = '2.17.0' + camelVersion = '4.9.0' + commonsDbcp2Version = '2.13.0' + commonsIoVersion = '2.18.0' commonsNetVersion = '3.11.1' curatorVersion = '5.7.1' debeziumVersion = '3.0.6.Final' @@ -89,35 +89,35 @@ ext { junitJupiterVersion = '5.11.4' kotlinCoroutinesVersion = '1.8.1' kryoVersion = '5.6.2' - lettuceVersion = '6.4.1.RELEASE' + lettuceVersion = '6.5.2.RELEASE' log4jVersion = '2.24.3' mailVersion = '2.0.3' - micrometerTracingVersion = '1.4.1' - micrometerVersion = '1.14.2' + micrometerTracingVersion = '1.5.0-SNAPSHOT' + micrometerVersion = '1.15.0-SNAPSHOT' mockitoVersion = '5.14.2' mongoDriverVersion = '5.2.1' mysqlVersion = '9.1.0' - oracleVersion = '23.5.0.24.07' + oracleVersion = '23.6.0.24.10' pahoMqttClientVersion = '1.2.5' postgresVersion = '42.7.4' - protobufVersion = '4.28.3' + protobufVersion = '4.29.2' r2dbch2Version = '1.0.0.RELEASE' reactorVersion = '2024.0.1' resilience4jVersion = '2.2.0' romeToolsVersion = '2.1.0' rsocketVersion = '1.1.4' - servletApiVersion = '6.0.0' + servletApiVersion = '6.1.0' smackVersion = '4.4.8' springAmqpVersion = '3.2.1' - springDataVersion = '2024.1.1' + springDataVersion = '2025.0.0-SNAPSHOT' springGraphqlVersion = '1.3.3' springKafkaVersion = '3.3.1' springRetryVersion = '2.0.11' - springSecurityVersion = '6.4.2' + springSecurityVersion = '6.5.0-SNAPSHOT' springVersion = '6.2.1' springWsVersion = '4.0.11' testcontainersVersion = '1.20.4' - tomcatVersion = '10.1.34' + tomcatVersion = '11.0.2' xmlUnitVersion = '2.10.0' xstreamVersion = '1.4.21' ztZipVersion = '1.17' @@ -265,6 +265,10 @@ configure(javaProjects) { subproject -> options.addBooleanOption('Werror', true) // fail build on Javadoc warnings } + tasks.withType(JavaForkOptions) { + jvmArgs '--add-opens', 'java.base/java.util=ALL-UNNAMED' + } + eclipse { project { natures += 'org.springframework.ide.eclipse.core.springnature' @@ -380,7 +384,7 @@ configure(javaProjects) { subproject -> checkstyle { configDirectory.set(rootProject.file('src/checkstyle')) - toolVersion = project.hasProperty('checkstyleVersion') ? project.checkstyleVersion : '10.18.2' + toolVersion = project.hasProperty('checkstyleVersion') ? project.checkstyleVersion : '10.21.1' } jar { @@ -663,8 +667,7 @@ project('spring-integration-groovy') { } tasks.withType(JavaForkOptions) { - jvmArgs '--add-opens', 'java.base/java.lang=ALL-UNNAMED', - '--add-opens', 'java.base/java.util=ALL-UNNAMED' + jvmArgs '--add-opens', 'java.base/java.lang=ALL-UNNAMED' } } @@ -716,8 +719,7 @@ project('spring-integration-ip') { } tasks.withType(JavaForkOptions) { - jvmArgs '--add-opens', 'java.base/java.nio.channels.spi=ALL-UNNAMED', - '--add-opens', 'java.base/java.util=ALL-UNNAMED' + jvmArgs '--add-opens', 'java.base/java.nio.channels.spi=ALL-UNNAMED' } } @@ -822,7 +824,6 @@ project('spring-integration-r2dbc') { description = 'Spring Integration R2DBC Support' dependencies { api 'org.springframework.data:spring-data-r2dbc' - api 'org.springframework:spring-r2dbc' testImplementation "io.r2dbc:r2dbc-h2:$r2dbch2Version" } @@ -831,8 +832,7 @@ project('spring-integration-r2dbc') { project('spring-integration-mqtt') { description = 'Spring Integration MQTT Support' dependencies { - api "org.eclipse.paho:org.eclipse.paho.client.mqttv3:$pahoMqttClientVersion" - + optionalApi "org.eclipse.paho:org.eclipse.paho.client.mqttv3:$pahoMqttClientVersion" optionalApi "org.eclipse.paho:org.eclipse.paho.mqttv5.client:$pahoMqttClientVersion" testImplementation project(':spring-integration-jmx') @@ -844,13 +844,10 @@ project('spring-integration-redis') { description = 'Spring Integration Redis Support' dependencies { api 'org.springframework.data:spring-data-redis' + testImplementation "io.lettuce:lettuce-core:$lettuceVersion" testImplementation 'com.fasterxml.jackson.core:jackson-databind' } - - tasks.withType(JavaForkOptions) { - jvmArgs '--add-opens', 'java.base/java.util=ALL-UNNAMED' - } } project('spring-integration-rsocket') { @@ -876,7 +873,6 @@ project('spring-integration-scripting') { jvmArgs '--add-opens', 'java.base/sun.nio.ch=ALL-UNNAMED', '--add-opens', 'java.base/java.io=ALL-UNNAMED', '--add-opens', 'java.base/java.lang=ALL-UNNAMED', - '--add-opens', 'java.base/java.util=ALL-UNNAMED', '-Dpolyglot.engine.WarnInterpreterOnly=false' } } diff --git a/gradle.properties b/gradle.properties index 4a1e146154..507fea3b6b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=6.4.2-SNAPSHOT +version=6.5.0-SNAPSHOT org.gradle.jvmargs=-Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 kotlin.jvm.target.validation.mode=IGNORE org.gradle.caching=true diff --git a/src/reference/antora/modules/ROOT/nav.adoc b/src/reference/antora/modules/ROOT/nav.adoc index 6dbf35e0f8..c0c110dbc5 100644 --- a/src/reference/antora/modules/ROOT/nav.adoc +++ b/src/reference/antora/modules/ROOT/nav.adoc @@ -255,6 +255,7 @@ * xref:samples.adoc[] * xref:resources.adoc[] * xref:history.adoc[] +** xref:changes-6.3-6.4.adoc[] ** xref:changes-6.2-6.3.adoc[] ** xref:changes-6.1-6.2.adoc[] ** xref:changes-6.0-6.1.adoc[] diff --git a/src/reference/antora/modules/ROOT/pages/changes-6.3-6.4.adoc b/src/reference/antora/modules/ROOT/pages/changes-6.3-6.4.adoc new file mode 100644 index 0000000000..583f8bee17 --- /dev/null +++ b/src/reference/antora/modules/ROOT/pages/changes-6.3-6.4.adoc @@ -0,0 +1,93 @@ +[[migration-6.3-6.4]] += Changes between 6.3 and 6.4 + +[[x6.4-new-components]] +== New Components + +A `BaseMessageBuilder` class has been extracted from the `MessageBuilder` to simplify a custom builder implementation where the most of the logic should be the same as `MessageBuilder` one. +See xref:message.adoc#message-builder[`MessageBuilder`] for more information. + +The new Control Bus interaction model is implemented in the `ControlBusCommandRegistry`. +A new `ControlBusFactoryBean` class is recommended to be used instead of deprecated `ExpressionControlBusFactoryBean`. +See xref:control-bus.adoc[Control Bus] for more information. + +Also, a `ControlBusController` (together with an `@EnableControlBusController`) is introduced for managing exposed commands by the mentioned `ControlBusCommandRegistry`. +See xref:http.adoc[HTTP Support] for more information. + +The SpEL evaluation infrastructure now supports configuration for `IndexAccessor`. +Also, an out-of-the-box `JsonIndexAccessor` is provided. +See xref:spel.adoc[SpEL Support] for more information. + +[[x6.4-general]] +== General Changes + +The Java DSL `SourcePollingChannelAdapterSpec` can now be configured with a custom `TaskScheduler` + +[[x6.4-remote-files-changes]] +== Remote File Adapters Changes + +The `AbstractRemoteFileStreamingMessageSource` has now a convenient `clearFetchedCache()` API to remove references from cache for not processed remote files. +The references stay in cache because polling configuration does not allow to process all the fetched in one cycle, and the target `SessionFactory` might be changed between polling cycles, e.g. via `RotatingServerAdvice`. + +[[x6.4-jdbc-changes]] +== JDBC Changes + +The `LobHandler` (and respective API) has been deprecated for removal in Spring Framework `6.2`. +Respective option on `JdbcMessageStore` (and similar) have been deprecated as well. +The byte array handling for serialized message is fully deferred to JDBC driver. + +The `LockRepository.delete()` method return the result of removing ownership of a distributed lock. +And the `JdbcLockRegistry.JdbcLock.unlock()` method throws `ConcurrentModificationException` if the ownership of the lock is expired. +See xref:jdbc.adoc[JDBC Support] for more information. + +[[x6.4-zeromq-changes]] +== ZeroMQ Changes + +The outbound component `ZeroMqMessageHandler` (and respective API) can now bind a TCP port instead of connecting to a given URL. +See xref:zeromq.adoc[ZeroMQ Support] for more information. + +[[x6.4-redis-changes]] +== Redis Changes + +Instead of throwing `IllegalStateException`, the `RedisLockRegistry.RedisLock.unlock()` method throws `ConcurrentModificationException` if the ownership of the lock is expired. +Add a `RedisLockRegistry.setRenewalTaskScheduler()` to periodic lock renewal. +See xref:redis.adoc[Redis Support] for more information. + +[[x6.4-groovy-changes]] +== Groovy Changes + +The `ControlBusFactoryBean` (and respective `` XML tag) has been deprecated (for removal) in favor of new introduced `ControlBusFactoryBean` based on a new model implemented in the `ControlBusCommandRegistry`. +See xref:control-bus.adoc[Control Bus] for more information. + + +[[x6.4-sftp-changes]] +== SFTP Support Changes + +The `DefaultSftpSessionFactory` now exposes a `Consumer` configurer property to further customize an internal `SshClient`. +See xref:sftp/session-factory.adoc[SFTP Session Factory] for more information. + +[[x6.4-mqtt-support-changes]] +== MQTT Support Changes + +Multiple instances of `MqttPahoMessageDrivenChannelAdapter` and `Mqttv5PahoMessageDrivenChannelAdapter` can now be added at runtime using corresponding `ClientManager` through `IntegrationFlowContext` +Also a `MqttMessageNotDeliveredEvent` event has been introduced to emit when action callback reacts to the delivery failure. +See xref:mqtt.adoc[MQTT Support] for more information. + +[[x6.4-zip-support-changes]] +== Zip Support Changes + +The `ZipTransformer` now exposes a `fileNameGenerator` property to customize a target zip file (and optional zip entry) name generation. +See xref:zip.adoc[Zip Support] for more information. + + +[[x6.4-scripting-changes]] +== Scripting Changes + +The Python scripts evaluation is now migrated to the GraalVM Polyglot. +See xref:scripting.adoc[Scripting Support] for more information. + +[[x6.4-mail-changes]] +== Mail Changes + +The `AbstractMailReceiver` exposes an option to disable setting `Flags.Flag.FLAGGED` into a received message as fallback flag. +See xref:mail.adoc[Mail Support] for more information. \ No newline at end of file diff --git a/src/reference/antora/modules/ROOT/pages/whats-new.adoc b/src/reference/antora/modules/ROOT/pages/whats-new.adoc index 35c4a0ff85..61ced0381a 100644 --- a/src/reference/antora/modules/ROOT/pages/whats-new.adoc +++ b/src/reference/antora/modules/ROOT/pages/whats-new.adoc @@ -2,104 +2,14 @@ = What's New? [[spring-integration-intro-new]] -For those who are already familiar with Spring Integration, this chapter provides a brief overview of the new features of version 6.4. +For those who are already familiar with Spring Integration, this chapter provides a brief overview of the new features of version 6.5. If you are interested in the changes and features that were introduced in earlier versions, see the xref:history.adoc[Change History]. -[[what-s-new-in-spring-integration-6-4]] -== What's New in Spring Integration 6.4? +[[what-s-new-in-spring-integration-6-5]] +== What's New in Spring Integration 6.5? -If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 6.4 development process. +If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 6.5 development process. In general the project has been moved to the latest dependency versions. -[[x6.4-new-components]] -=== New Components - -A `BaseMessageBuilder` class has been extracted from the `MessageBuilder` to simplify a custom builder implementation where the most of the logic should be the same as `MessageBuilder` one. -See xref:message.adoc#message-builder[`MessageBuilder`] for more information. - -The new Control Bus interaction model is implemented in the `ControlBusCommandRegistry`. -A new `ControlBusFactoryBean` class is recommended to be used instead of deprecated `ExpressionControlBusFactoryBean`. -See xref:control-bus.adoc[Control Bus] for more information. - -Also, a `ControlBusController` (together with an `@EnableControlBusController`) is introduced for managing exposed commands by the mentioned `ControlBusCommandRegistry`. -See xref:http.adoc[HTTP Support] for more information. - -The SpEL evaluation infrastructure now supports configuration for `IndexAccessor`. -Also, an out-of-the-box `JsonIndexAccessor` is provided. -See xref:spel.adoc[SpEL Support] for more information. - -[[x6.4-general]] -=== General Changes - -The Java DSL `SourcePollingChannelAdapterSpec` can now be configured with a custom `TaskScheduler` - -[[x6.4-remote-files-changes]] -=== Remote File Adapters Changes - -The `AbstractRemoteFileStreamingMessageSource` has now a convenient `clearFetchedCache()` API to remove references from cache for not processed remote files. -The references stay in cache because polling configuration does not allow to process all the fetched in one cycle, and the target `SessionFactory` might be changed between polling cycles, e.g. via `RotatingServerAdvice`. - -[[x6.4-jdbc-changes]] -=== JDBC Changes - -The `LobHandler` (and respective API) has been deprecated for removal in Spring Framework `6.2`. -Respective option on `JdbcMessageStore` (and similar) have been deprecated as well. -The byte array handling for serialized message is fully deferred to JDBC driver. - -The `LockRepository.delete()` method return the result of removing ownership of a distributed lock. -And the `JdbcLockRegistry.JdbcLock.unlock()` method throws `ConcurrentModificationException` if the ownership of the lock is expired. -See xref:jdbc.adoc[JDBC Support] for more information. - -[[x6.4-zeromq-changes]] -=== ZeroMQ Changes - -The outbound component `ZeroMqMessageHandler` (and respective API) can now bind a TCP port instead of connecting to a given URL. -See xref:zeromq.adoc[ZeroMQ Support] for more information. - -[[x6.4-redis-changes]] -=== Redis Changes - -Instead of throwing `IllegalStateException`, the `RedisLockRegistry.RedisLock.unlock()` method throws `ConcurrentModificationException` if the ownership of the lock is expired. -Add a `RedisLockRegistry.setRenewalTaskScheduler()` to periodic lock renewal. -See xref:redis.adoc[Redis Support] for more information. - -[[x6.4-groovy-changes]] -=== Groovy Changes - -The `ControlBusFactoryBean` (and respective `` XML tag) has been deprecated (for removal) in favor of new introduced `ControlBusFactoryBean` based on a new model implemented in the `ControlBusCommandRegistry`. -See xref:control-bus.adoc[Control Bus] for more information. - - -[[x6.4-sftp-changes]] -=== SFTP Support Changes - -The `DefaultSftpSessionFactory` now exposes a `Consumer` configurer property to further customize an internal `SshClient`. -See xref:sftp/session-factory.adoc[SFTP Session Factory] for more information. - -[[x6.4-mqtt-support-changes]] -=== MQTT Support Changes - -Multiple instances of `MqttPahoMessageDrivenChannelAdapter` and `Mqttv5PahoMessageDrivenChannelAdapter` can now be added at runtime using corresponding `ClientManager` through `IntegrationFlowContext` -Also a `MqttMessageNotDeliveredEvent` event has been introduced to emit when action callback reacts to the delivery failure. -See xref:mqtt.adoc[MQTT Support] for more information. - -[[x6.4-zip-support-changes]] -=== Zip Support Changes - -The `ZipTransformer` now exposes a `fileNameGenerator` property to customize a target zip file (and optional zip entry) name generation. -See xref:zip.adoc[Zip Support] for more information. - - -[[x6.4-scripting-changes]] -=== Scripting Changes - -The Python scripts evaluation is now migrated to the GraalVM Polyglot. -See xref:scripting.adoc[Scripting Support] for more information. - -[[x6.4-mail-changes]] -=== Mail Changes - -The `AbstractMailReceiver` exposes an option to disable setting `Flags.Flag.FLAGGED` into a received message as fallback flag. -See xref:mail.adoc[Mail Support] for more information. \ No newline at end of file