Minor Releases
Any patch release made for an Axon project is tailored towards resolving bugs. This page aims to provide a dedicated overview of patch releases per project.
Release 5.2
Release 5.2.3
Release 5.2.2
Bug fixes
-
Reopen the event stream when its source completed it #4785
Release 5.2.1
Bug fixes
-
Validate return and parameter type against field type (PR #4780, by @smcvb)
-
Only deduplicate fluent accessors for records (PR #4779, by @smcvb)
-
Active entities should only receive tag-matching events during command handling phase ([#4766, [PR #4773, by @MateuszNaKodach)
-
Resolve incorrect event routing in heterogeneous Sequencing Policy setup among Event Handling Components (PR #4771, by @MateuszNaKodach)
-
Only resolve replay context during an active replay (PR #4754, by @abuijze)
-
Do not report rolled-back events in AxonTestFixture (PR #4749, by @abuijze)
Release 5.1
Release 5.1.2
Non-annotated nested message classes now resolve to package.SimpleName instead of package.Outer$SimpleName.
See Nested message class names for how this affects existing applications.
|
Features
-
feat(migration): preserve AF4
MessageOriginProvidermetadata key names in AF5 #4613
Enhancements
-
[#3195] feat(migration): fix Kotlin OpenRewrite migration gaps #4605
Bug fixes
-
[#4643 | Port]
AggregateBasedJpaEventStorageEngine#streamloops untilStreamingConditionmatching events are retrieved #4686 -
[#4625 | Port] Introduce the
EventTypeResolverforEventStorageEngines| Allows for default versions #4672 -
[#4634 | Port] Register the Micrometer
MetricsConfigurationEnhanceronly once when using Spring Boot #4671 -
Port (5.1.x): [#4647] Propagate all entry resources to per-event ProcessingContext #4670
-
fix(messaging): disposing a Flux does not close the underlying subscription query #4667
-
Avoid costly stack walk on every task start in AxonTimeLimitedTask #4655
-
fix(migration): honor skipTests property #4631
-
Align
QualifiedName#(Class)outcome with annotated approach for nested classes #4630 -
test(eventsourcing): assert event metadata is preserved when sourcing aggregate-based events #4628
Nested message class names
Up to 5.1.1, a nested class that was not annotated with @Command, @Event, or @Query resolved to its binary name (for example example.DocumentEvent$DocumentCreated).
As of 5.1.2, it resolves to example.DocumentCreated, as annotated classes already did.
Top-level and annotated classes are not affected, and neither are names passed as a String, such as new MessageType("example.DocumentEvent$DocumentCreated", version).
Gateways or other components that build a MessageType from Class#getName() now dispatch under a different name than the handlers are registered under, resulting in a NoHandlerForCommandException.
Events stored under the old name are no longer matched by handlers and EventCriteria using the new name.
No stored-data migration is needed, as the stored name remains as-is.
Instead, pin the old name on the nested class:
public sealed interface DocumentEvent {
@Event(namespace = "example", name = "DocumentEvent$DocumentCreated", version = "0.0.1")
record DocumentCreated(String id) implements DocumentEvent {
}
}
The version must match the one stored with the events.
Annotations are only honored by the AnnotationMessageTypeResolver, the default, so a replaced MessageTypeResolver must take them into account.
To keep binary names for all non-annotated classes instead, configure an AnnotationMessageTypeResolver with a fallback:
MessagingConfigurer.enhance(applicationConfigurer)
.registerMessageTypeResolver(config -> new AnnotationMessageTypeResolver(
payloadType -> Optional.of(new MessageType(payloadType.getName(), MessageType.DEFAULT_VERSION))
));
This also applies to events stored after upgrading, so prefer pinning per class when events were already persisted under the new names.
Pinning alone is not sufficient if events were already stored under the new name (example.DocumentCreated).
Handlers match on the QualifiedName only, so after pinning they register solely under example.DocumentEvent$DocumentCreated.
Events stored under the new name are then silently skipped: event processors filter them out, and evolve on an event-sourced entity finds no handler and ignores them.
Nothing fails, so projections and entities simply miss state.
Events dispatched after pinning use the old name again, leaving the store with a mix of old, new, and old names.
When events exist under both names, either:
-
Add a handler per name. Annotate a second handler with the new name through
@EventHandler(eventName = "example.DocumentCreated"). As@EventSourcingHandlerhas noeventNameattribute, an entity needs a plain@EventHandler(eventName = …)for the second name. Any@EventCriteriaBuilderfiltering on types needs to list both names.@EventHandler void on(DocumentCreated event) { ... } @EventHandler(eventName = "example.DocumentCreated") void onNew(DocumentCreated event) { ... } -
Rename the event through an event transformation (Axoniq Framework 5.2+). A
rename(from, to)fromexample.DocumentCreatedto the pinned name makes the existing handlers work unchanged. Type-filteredEventCriteriaget the old name added automatically.
Instances resolving a nested class to different names cannot exchange messages.
For a rolling upgrade, first pin the old names on the new version, so all instances share identical names, and drop the pinning only when all instances run the new version and no stored events or external consumers rely on the old names.
Nested classes sharing a simple name within one package collide; disambiguate them through the name or namespace attribute.
See Nested message classes for the current naming rules.
Release 5.1.1
Enhancements
-
#4604 Set expected
axoniq.versionto5.1.1 -
#4599 Add OpenRewrite recipes to migrate
SnapshotTriggerDefinitioninto@Snapshottingannotation (#3195) -
#4598 Account for async snapshot storage in
SnapshottingEntityLifecycleHandlerTestSuite -
#4526 Fix
fromFutureto return empty stream when future completes withnull(#4516) -
#4521 Fix
fromFutureto return empty stream when future completes withnull(#4516) -
#4498 Make
MessageStreamimprovements and addMessageStreamTestSuite -
#4460 Rework snapshotting to allow single request snapshot and events streams
Bug fixes
-
#4610 Remove migration BOM tests failing due to chicken-and-egg problem
-
#4608 Copy AF4 dependencies during generate-test-resources
-
#4607 Combine all
ListAppender-using snapshotting tests into a single@Nestedclass -
#4606 Move AF4 dependencies inside profile for
axon-migrationmodule -
#4603 Validate
ProcessingContextis committed inSimpleQueryBusonemitUpdate,completeSubscriptions, andcompleteSubscriptionsExceptionallyinvocations (#4594) -
#4587 Fix
SplitTaskleaving token store inconsistent after segment split (#4583) -
#4578 Remove
describemethod fromComponentDescriptorinterface -
#4576 Fix migration paths documentation: update annotation from
@InjectStateto@InjectEntityin GiftCard example -
#4567 Fix duplicate command handler registration when subtype overrides handler (#3934)
-
#4566 Fix Axon auto-configuration with graceful shutdown test (#3310)
-
#4565 Align test naming with Maven Surefire/Failsafe defaults (#4425)
-
#4537 Port
TrackingTokenper event inProcessingContextfrom axon-5.1.x branch (#4510) -
#4510 Fix
PooledStreamingEventProcessor/WorkPackage-TrackingTokeninProcessingContextper event, not per batch (#4323) -
#4388 Allow for commands without an entity to succeed (#4362)
Dependency upgrades
-
#4504 Update Axon Server image version
Release 5.0
Release 5.0.3
Enhancements
-
#4141 Make Interceptor and Monitor construction Component aware
-
#4159 Import
axoniq/university-demoto examples -
#4165 Align ProcessorDefinition naming with the EventProcessorModule
-
#4167 Add JDK25 build
-
#4173 Introduce local Command sequencing to avoid optimistic lock failures on concurrent command execution (#4155)
-
#4179 Refactor sequencing policies for general messaging usage
-
#4190 Update event publishing methods to accept lists of EventMessage subtypes
-
#4206 Provide JUnit extension for fixture lifecycle management (#4134)
-
#4212 Move JpaTransactionalExecutorProvider and JdbcTransactionalExecutorProvider to messaging module
-
#4219 Port
axon-4.13.xintoaxon-5.0.x -
#4231 Adjust ReplayToken context field type to byte[] (#4218)
-
#4238 EventAppender: add metadata aware append overloads
-
#4250 Introduce TransactionalExecutor for persistent Token Stores (#4248)
Documentation
-
#4137 Refer to Migration Paths section from Migration Guide main page
-
#4148 Minor Getting Started improvements: Refer to examples and folder rename
-
#4156 Migration paths documentation for Projectors and Event Processors (#4084)
-
#4227 Migration paths documentation for serializer/converter (#4091)
-
#4256 Adjust Spring Boot version support matrix
Bug fixes
-
#4149 Rename missing annotated to autodetected in configuration API
-
#4166 Ensure Event Handling Components are described correctly
-
#4175 Ensure ResourceOverridingProcessingContext#resources() does not throw an UnsupportedOperationException
-
#4186 Fix integration test isolation for MonitoringPooledEventProcessingReportIT
-
#4187 Enabled Spring (Boot) tests and subsequent bug fixes (#3496)
-
#4192 WorkPackageTest: match TokenStore initialization contract
-
#4193 ResourceOverridingProcessingContext run lifecycle hooks with the overridden resources
-
#4217 Replay Handlers: Ensure only EventHandlingMembers are wrapped (#4214)
-
#4221 Add support for returning the resume position from a sourcing
-
#4228 Autoconfigure after should use names instead of classes in JpaEventStoreAutoConfiguration
-
#4229 Resolved some type reliance issues in handler wrappers
-
#4240 RecordingEventSink positioned before interceptors: interceptor message changes not reflected in recorded events (#4237)
-
#4255 Make routing with SequentialPolicy consistent across JVM restarts (#4253)
Release 5.0.2
Features
-
[#4053] Introduce Event Processor Specification to influence Event Processor configuration when Event Handlers are autodetected
-
Added ability to customize event processor configuration in Spring by @abuijze in #4067]
Enhancements
-
[#4013] Add integration test using unit of work and EventStore with transactional resource
-
[#4014] Add new integration test using event store and unit of work
-
Annotated Message Handling Component alignment by @smcvb in #4041
-
Ensure every Message Handling Component can be described by @smcvb in #4047
-
Align
EventHandlerRegistrywith command and query equivalents by @smcvb in #4046 -
Align Annotated Message Handler subscription flow by @smcvb in #4042
-
Filter on
EventHandlingMemberinMethodSequencingPolicyEventHandlerDefinitionby @smcvb in #4049 -
Introduce a
TransactionalExecutorby @hjohn in #4055 -
[#4065] Remove processing context parameter from all EventStorageEngine methods except appendEvents
-
[#4065] Remove processing context from most EventStorageEngine methods by @hjohn in #4068
-
Add missing
@Nonnullannotations in processing lifecycle by @hjohn in #4071 -
Minor
MatchersandAxonTestFixtureimprovements by @smcvb in #4069 -
Rename parameter in EntityManagerExecutor by @hjohn in #4080
-
Adjustments to StorageEngineTestSuite for transactional executors by @hjohn in #4089
-
Event Processor Config: Remove
MessageMonitorandSpanFactorycustomization by @smcvb in #4087 -
Add JDBC transactional executor + Spring integration by @hjohn in #4101
-
Remove the
ProcessingLifecycleHandlerRegistrarby @smcvb in #4121 -
[#4032] [git] .gitignore ignores .idea/ but it contains committed files
-
[#4032] cleanup gitignore/idea/ setup by @jangalinski in #4035
-
[#3995] feat(test fixture): AxonTestThenCommand: resultMessagePayload convert payload before executing the check
-
[#3994] Remove ProcessingLifecycleHandlerRegistrar and its usages
Bug fixes
-
[#4010] Circular dependency error with Spring Boot 4.0 WebMVC and @EventHandler components
-
Fix Circular dependency error with Spring Boot 4.0 WebMVC and @EventHandler components by @jangalinski in #4020
-
[#4086] Align JPA storage engine to not enforce uniqueness of message identifier
-
Update identifier column to be non unique by @hjohn in #4122
-
[#4012] Resolve MessageType for query handlers based on MessageTypeResolver
-
[#4006] AggregateBasedJpaEventStorageEngine should return the max (or latest) token when tokenAt is called with a date in the future
-
[#4007] Feature/fix token at future date
-
[#3706] JDBC connections cannot be used by multiple threads at the same time
-
[#3704] In EventStorageEngine, JDBC/JPA implementations should not do work in AppendTransaction::commit
Release 5.0.1
Enhancements
-
Update the AF 5.0.1 branch with AF 4.12.2 #3973
-
Feature/university example application #3969
-
List all autoconfigurations in Meta Inf, apply naming convention #3948
-
Show failed message handler in logs #3913
-
Adjust PSEP log levels #3896
-
Default to the
AnnotationMessageTypeResolverin annotation specific components #3894
Bug fixes
-
Align
UpdateCheckerfixes from 4.12.2 with 5.0.1 #3985 -
[#3982] fix(test):
Event events(@Nonnull` List<?>… events)`: invalid usage of varargs #3984 -
When splitting and merging tokens, update both tokens involved #3978
-
[#3938] Fix startup of application when axon server is not available #3966
-
ApplicationContext doesn’t start properly when AxonServer is not running #3938
-
Prevent duplicate registration of all handlers when using subtypes #3933