LTS Releases

All the long-term support releases, with their respective bug fixes and enhancements, are noted here.

Release 4.13.5

Bug fixes

  • Fixed a deserialization error for subscription query updates carrying a void result. Axon Server connector clients on Axon Framework 5.3.2+ set an empty (0-byte) payload instead of omitting it entirely for void updates, which Axon Framework 4 failed to deserialize. Empty payloads are now treated the same as an absent payload, with the same safeguard added to GrpcBackedResponseMessage.

  • Fixed Axon Framework 4 failing to deserialize void command results returned by an Axon Framework 5 application, caused by the same empty-payload behavior described above.

Dependency upgrades

  • Bumped the github-dependencies group across one directory with two updates.

  • Bumped js-yaml, @antora/cli, and @antora/site-generator in /docs/_playbook.

Release 4.13.4

Features

  • Moved the Bill-of-Materials module into the LTS repository itself, aligning its version with the other LTS modules so it can no longer drift from them as a separately maintained artifact.

Enhancements

  • Switched release artifact publishing to a dedicated service account.

  • Subscription query initial results now follow the same ConvertingResponseMessage conversion flow used for direct queries, so singular and plural (for example, array or list) results are both handled consistently.

  • MetadataSpanAttributesProvider no longer throws a NullPointerException on null metadata values; it now resolves values with String#valueOf instead of calling toString() on them directly.

Bug fixes

  • Errors escaping a Unit of Work, WorkPackage, or Coordinator commit/abort path (for example, a NoSuchMethodError from a dependency version mismatch) are now caught instead of silently killing the component without rolling back. UnitOfWork#attachTransaction was also hardened so a transaction is concluded exactly once, with a cleanup safety net in case commit or rollback never fire.

  • Command and query results of type java.lang.String returned by an Axon Framework 5 application are now deserialized correctly. Axon Server sends such results as raw UTF-8 bytes rather than JSON-quoted strings, which previously made Axon Framework 4 fail to parse them; a new GrpcRawStringAwareSerializer falls back to a raw UTF-8 decode only when the regular serializer cannot parse the payload.

  • Queries dispatched by an Axon Framework 5 application, which no longer sets the response_type field, can now find a matching query handler on Axon Framework 4. The missing field previously made the response type resolve to an UnknownSerializedType, preventing any handler match; it is now mapped to the same IgnoredResponseType already used for subscription query updates.

  • @ReplayContext handlers no longer receive a replay context for live events delivered while a ReplayToken wrapper is still present but the processor is no longer replaying. ReplayToken#replayContext and #getTokenAtReset are now gated on the actual replay status, and an inverted type check that caused @ReplayContext parameters declared as a supertype to resolve to null was fixed.

Dependency upgrades

  • Bumped the maven-dependencies group across several rounds of updates.

  • Bumped actions/setup-java from 5.6.0 to 6.0.0 in the github-dependencies group.

  • Bumped org.hibernate.orm:hibernate-core from 6.6.54.Final to 6.6.55.Final.

Release 4.13.3

The first release cut from the dedicated Axon Framework 4 LTS repository. Functionally, this is a maintenance release: no new features, and no changes to the messaging, modelling, or event sourcing APIs. The bulk of the work is a full dependency refresh and the removal of two modules that no longer have a place in the LTS line.

Removed modules

  • axon-legacy has been removed. It contained compatibility shims for reading data serialized by Axon 2 and Axon 3 (amongst others, AggregateScopeDescriptor, SagaScopeDescriptor, GapAwareTrackingToken, GlobalSequenceTrackingToken, MongoTrackingToken, the legacy GenericMessage/GenericEventMessage/MetaData classes, and LegacyAwareJobDataBinder). Anyone on the 4.x LTS line is long past an Axon 2 or 3 migration, so the module, along with its joda-time and axon-mongo dependencies, has been dropped. If you still hold Axon 2/3-serialized tracking tokens, scope descriptors, or Quartz triggers in a datastore, convert them before upgrading.

  • axon-migration has been removed. It shipped the OpenRewrite recipes (axon-javax-4, axon-jakarta-4) for migrating projects to Axon Framework 4.7, and pinned OpenRewrite and Jackson to old versions to do so.

Behavioural and compatibility notes

  • LMAX Disruptor was upgraded from 3.4.4 to 4.0.0 in axon-disruptor. This has two consequences: CommandHandlerInvoker no longer implements com.lmax.disruptor.LifecycleAware (removed in Disruptor 4, a source- and binary-incompatible change for anyone referencing that type), and Disruptor 4 no longer accepts an Executor, only a ThreadFactory. DisruptorCommandBus now passes an internal AxonThreadFactory to the ring buffer; an Executor supplied through DisruptorCommandBus.Builder#executor still drives the publisher threads, but no longer the ring buffer’s own event-processor threads.

  • axon-test now pulls in JUnit Jupiter 6.1.2 (compile scope, transitive). If you do not manage the JUnit version yourself, your test classpath moves from Jupiter 5.13.4 to 6.1.2. Import junit-bom or pin org.junit.jupiter:junit-jupiter to stay on 5.x.

  • jakarta.persistence-api moved from 3.0.0 to 3.2.0, and jakarta.annotation-api from 2.1.1 to 3.0.0, both optional dependencies representing Jakarta EE 11 API versions. Spring Boot 3.x manages jakarta.persistence-api at 3.1.0, and that managed version continues to win in a Boot-managed project.

  • The test-scope EL implementation moved from javax.el/org.glassfish.web:el-impl to jakarta.el/org.glassfish:jakarta.el. This affects the framework’s own bean-validation tests only; nothing changes on the published classpath.

  • Deliberately not upgraded, to keep the LTS baseline intact: Spring Framework 5.3.39, Spring Boot 2.7.18, Spring Security 5.8.16, Hibernate ORM 5.6.15.Final, Hibernate Validator 6.2.5.Final, Ehcache 2.10.9.2, XStream 1.4.21, Avro 1.12.0, dom4j 2.1.5.

Bug fixes

  • Fixed the framework4-springboot4 example application configuration so it runs against a standalone Axon Server and in local development.

Dependency upgrades

Shipped and optional runtime dependencies:

Dependency From To

com.fasterxml.jackson.core:jackson-* (Jackson 2)

2.19.2

2.22.1

tools.jackson:jackson-* (Jackson 3)

3.0.3

3.2.1

com.google.code.gson:gson

2.13.1

2.14.0

xom:xom

1.3.9

1.4.6

org.slf4j:slf4j-api

2.0.17

2.0.18

org.apache.logging.log4j:log4j-*

2.25.3

2.26.1

net.bytebuddy:byte-buddy

1.17.6

1.18.11

commons-io:commons-io

2.20.0

2.22.0

com.lmax:disruptor

3.4.4

4.0.0

org.javassist:javassist

3.30.2-GA

3.32.0-GA

io.projectreactor:reactor-core

3.7.8

3.8.6

io.micrometer:micrometer-core

1.15.2

1.17.0

io.dropwizard.metrics:metrics-core

4.2.33

4.2.39

io.opentelemetry:opentelemetry-api

1.52.0

1.64.0

org.ehcache:ehcache (Ehcache 3)

3.10.8

3.12.0

org.hibernate.orm:hibernate-core (Hibernate 6 line)

6.6.22.Final

6.6.54.Final

org.hibernate.validator:hibernate-validator (8.x line)

8.0.2.Final

8.0.4.Final

jakarta.persistence:jakarta.persistence-api

3.0.0

3.2.0

jakarta.annotation:jakarta.annotation-api

2.1.1

3.0.0

com.github.kagkarlsson:db-scheduler

16.6.0

16.12.0

org.jobrunr:jobrunr

8.0.1

8.7.1

org.quartz-scheduler:quartz

2.4.0

2.4.1

Removed from dependency management: com.eaio.uuid:uuid 3.2, javax.el:javax.el-api 3.0.1-b06, and org.glassfish.web:el-impl 2.2. A second jakarta.persistence-api property that pinned JDK 11-compatible builds to 3.1.0 was dropped; all modules now resolve the single managed version.

Test-scope dependencies:

Dependency From To

org.junit.jupiter:junit-jupiter

5.13.4

6.1.2

org.mockito:mockito-*

4.11.0

5.18.0

com.mchange:c3p0 (was c3p0:c3p0)

0.9.1.2

0.14.1

org.hsqldb:hsqldb

2.5.2

2.7.4

com.mysql:mysql-connector-j

9.3.0

9.7.0

org.postgresql:postgresql

42.7.7

42.7.13

com.oracle.database.jdbc:ojdbc8

23.8.0.25.04

23.26.2.0.0

org.testcontainers:* (Spring Boot 4 integration tests)

1.20.3

1.21.4

io.opentelemetry:opentelemetry-sdk (autoconfigure tests)

1.52.0

1.64.0

The c3p0 coordinates changed group: the abandoned c3p0:c3p0 artifact is replaced by the maintained com.mchange:c3p0. A JDK 11-specific HSQLDB pin (2.7.2) was dropped in favour of the single 2.7.4 version. Unchanged: Awaitility 4.3.0, Hamcrest 3.0, JUnit 4.13.2, Testcontainers 2.0.5 (root), Axon Server Connector Java 2026.0.0.

Build plugins:

Plugin From To

maven-compiler-plugin

3.14.0

3.15.0

maven-surefire-plugin

3.5.3

3.5.6

maven-failsafe-plugin

3.5.3

3.5.6

maven-enforcer-plugin

3.6.1

3.6.3

maven-jar-plugin

3.4.2

3.5.0

maven-source-plugin

3.3.1

3.4.0

maven-javadoc-plugin

3.11.2

3.12.0

maven-assembly-plugin

3.7.1

3.8.0

maven-resources-plugin

3.3.1

3.5.0

maven-release-plugin

3.1.1

3.3.1

jacoco-maven-plugin

0.8.13

0.8.15

The central-publishing-maven-plugin 0.8.0 was removed.

Documentation toolchain (build-time only, not shipped) and CI workflow actions (actions/checkout, actions/setup-java, actions/setup-node, actions/cache, actions/github-script, dependabot/fetch-metadata) were updated as well, and the Sonar analysis and Slack release-notification steps were removed from all workflows.