Repository navigation
Axon Framework v5.0.0
Axon Framework 5 is finally here!
The list below contains all the features, enhancements, bugs, and documentation changes we've done since the start of development of Axon Framework 5. Hence, the list includes changes made in all milestones and release candidates, to be as complete as possible.
For those looking to start with Axon Framework 5, we recommend you go through the Getting Started section of Axoniq Docs.
If you have an Axon Framework 4 background, for example because you are looking to migrate an Axon Framework 4 application to Axon Framework 5, note that thorough migration tooling will follow in release 5.1.0 (please follow this issue when curious).
If you want to give a manual migration a go, we strongly recommend that you check out the /axon-5/api-changes.md file present in the Axon Framework project.
Although the api-changes.md is not strictly the migration guide, we will use it as the basis to form our future migration guide and documentation.
⭐ Features
- Aggregate / Command Model Parameter Resolver in #2399
- New Unit of Work through
ProcessingContextby @smcvb in #2953 - First steps towards the layered
CommandBusby @abuijze in #3003 - Added AsyncRepository interface and implementations by @abuijze in #3052
- Annotation-less Message Handler / Message Handling Component Configuration in #3067
- Adjust Messaging API to carry a Context in #3069
- Revise the Repository in #3070
- Introduce a QualifiedName and MessageType instead of using the FQCN in #3085
- Allow ParameterResolver configuration through Java API in #3090
- Introduce Stateful Command Handlers in #3095
- Implement JPA-based Event Storage Engine using new API in #3166
- Implement Legacy Axon Server-based Event Store using new API in #3167
- [#3085] Introduce the
QualifiedNameby @smcvb in #3172 - [#3085] Enforce setting the
QualifiedNameas theMessage#typein allMessageimplementations by @smcvb in #3190 - Add
LegacyAxonServerEventStorageEngineby @abuijze in #3216 - [#3085] QualifiedName: use
MessageNameResolverforAnnotationCommandHandlerAdapterby @MateuszNaKodach in #3225 - [#3085] QualifiedName: remove static factory method from
GenericEventMessageby @MateuszNaKodach in #3227 - Introduce a
TagResolverby @smcvb in #3228 - [#3085] QualifiedName: use
MessageNameResolverinAnnotationEventHandlerAdapterandSimpleEventSchedulerby @MateuszNaKodach in #3229 - [#3085] QualifiedName: use
MessageNameResolverforQuartzEventSchedulerby @MateuszNaKodach in #3233 - Add
DefaultEventStoreTransactionTestby @MateuszNaKodach in #3234 - Editor, Copyright, and Inspection settings by @smcvb in #3235
- [#3166] Add
LegacyJpaEventStorageEngineby @MateuszNaKodach in #3245 - [#3067] Move Message Handler annotations by @smcvb in #3246
- [#3067] Message Handler, Message Handling Component, and Message Handler Registry interfaces by @smcvb in #3247
TagResolver- use inDefaultEventStoreTransactionby @MateuszNaKodach in #3249- Set Consistency Marker on
AppendConditionfromEventStoreTransaction#sourcecalls by @abuijze in #3254 - [#3276] Annotation based
TagResolverfor events` Tags by @MateuszNaKodach in #3277 - EventStateApplier based on annotations in #3285
- EventStateApplier based on lambda functions in #3286
- CriteriaResoler for SourcingCondition from ID in #3287
- [#3285] feat:
EventStateApplierbased on annotations by @MateuszNaKodach in #3292 - (Stateful) CommandHandler definition using fluent interfaces through composition by @CodeDrivenMitch in #3296
- AnnotatedEventHandlingComponent implementation of EventHandlingComponent in #3298
- [#3298] feat:
EventHandlingComponentbased on annotations by @MateuszNaKodach in #3308 - Injection of entities into message handlers by @CodeDrivenMitch in #3314
- [#3067] Replacement Configuration API by @smcvb in #3319
- Introduce simple ComponentDescriptor in #3337
- [#3337] feature: add
JacksonandFilesystemcomponent descriptors by @MateuszNaKodach in #3340 - Fluent building for EventCriteria and its flattening by @CodeDrivenMitch in #3344
- Introduce Modelling and Event Sourcing configurer in #3345
- [#3067 and #3345] State-based and Event Sourced Entity configuration by @smcvb in #3355
- Allow hierarchic configuration of ParameterResolverFactory and StateManager by @CodeDrivenMitch in #3365
- [#3286] Introduce lambda-based
EntityEvolversin EventSourcedEntityBuilder by @CodeDrivenMitch in #3371 - Introduce EventAppender and reduce EventGateway scope by @CodeDrivenMitch in #3383
- Implement Axon Server-based Event Store using new API
- [#3239] Introduce the
AxonServerEventStorageEngine - [#3075] Implement Spring-based
ComponentRegistry,LifecycleRegistry,ApplicationConfigurer, andAxonConfiguration - [#3239] Enforce
ConsistencyMarkeras the final message forEventStorageEngine#sourceinvocations - Implement
AxonServerEventStorageEngine#tokenAtoperation once Axon Server supports this - [#3239] The
ComponentFactory,AxonServerEventStorageEngineFactory, and Axon ServerConfigurationEnhancer - Event Sourcing Handler support for evolved state return
MessageStream- addpeekmethod- [#3068] Declarable entity modeling
- Creational command handlers for (immutable) entities
- Annotated entity modelling
- Implement AnnotationBasedEventSourcedEntityFactory
- Implement new EntityModule structure for registering entities
- Rename EntityModel to EntityMetamodel across the codebase
- Update Checker with Anonymous Usage Analytics
- [#3402] feat:
MessagingConfigurercan overrideMessageTypeResolver+NamespaceMessageTypeResolverimplementation - Configuration uses instance-of checks for Component retrieval
- [#3434] Do
Class#isAssignableFromto retrieve components and match decorators in theConfigurer - [#3433] Remove Conflict Resolution and Target Aggregate Versioning
- [#3459] feat:
MessageStream- addpeekmethod - [#3313] Enable tests for record support
- Remove Aggregate Versioning and Conflict Resolution
- [#3098] feat(event-processing): add
EventCriteriasupport toPooledStreamingEventProcessor - Annotation-less configuration API for Event Handling Components
- [#3098] feat(eventhandling): new EventProcessing configuration +
SequencingEventHandlingComponent ProcessingContextshould allow to get components from theConfiguration- [#3608] feat:
ProcessingContextshould allow to get components from theConfiguration - Introduce Stateful Event Handler
- [#3357] feat(eventhandling): allows to use EventProcessor with
StateManager - [#3102] Introduce
Message#payloadAs(Type, Converter) - [#722] Introduce class-level
@Command,@Event, and@Queryannotations - Add Async (Annotated) Message Handler test suite
- Feature/handler test case
- Introduce
CommandDispatcherandProcessingContextusage validation for command-flow - [#3401] Introduce the
CommandDispatcher - Introduce special First and Latest
TrackingTokeninstances - Introduce FirstTrackingToken and LatestTrackingToken (#3552)
- [#3641] feat:
SequencingPolicyadjusted to AF5 API #3679 - [#3640] feat:
@SequencingPolicyannotation (class-level and method-level) +@EventHandlerannotationeventNameproperty #3705 - Annotation-less configuration API for Query Handling Components #3364
- [#3488] Query Handler Registration #3719
- feat(test):
AxonTestFixture- await assertions, generic expect, AxonServer enabled customization #3714 - Revamp
SpringAggregateLookupandSpringAggregateConfigurerto new Entity and Configuration API #3499 - Sequencing Policy configuration per Annotated Event Handler and Event Handling Component #3640
- Introduce an
@Internalannotation and use throughout #3427 - Create Framework Extensions by @zambrovski in #3787
- [#3752] feat(messaging):
InterceptingQueryBus- intercept queries and emitted updates by @MateuszNaKodach in #3801 - Update TokenStore interface to be compatible with future mask changes by @hjohn in #3805
- [#722] Introduce class level @command, @event, @query @QueryResponse by @zambrovski in #3806
- [#3465] feat:
TokenStore- store mask in token entry tables by @hjohn in #3792 - [#613 & #3488] The
DistributedQueryBus,QueryBusConnector, andAxonServerQueryBusConnectorby @smcvb in #3762 - feat:
DistributedQueryBusConfigurationEnhancer+DefaultQueryGatewaywith converter by @MateuszNaKodach in #3810 - Usage of Release Candidates #2589
- Add position method to consistency marker #3885
- [#3903] Provide axon-framework-bom #3920
📈 Enhancements
- Remove dynamic proxy for Command and Query handlers in #744
- Move to JDK21 by @smcvb in #2881
- Remove Javax in favor of Jakarta by @smcvb in #2882
- Clean the
axon-legacymodule by @smcvb in #2887 - Remove all deprecated code from the
messagingmodule by @smcvb in #2889 - Remove all deprecated code from the
modellingmodule by @smcvb in #2890 - Remove all deprecated code from the
eventsourcingmodule by @smcvb in #2891 - Remove all deprecated code from the
configmodule by @smcvb in #2892 - Remove all deprecated code from the
axon-server-connectormodule by @smcvb in #2893 - Remove all deprecated code from the
testmodule by @smcvb in #2896 - Remove all deprecated code from the
springandspringbootmodules by @smcvb in #2898 - Remove all deprecated code from the
metricsandmetrics-micrometermodules by @smcvb in #2899 - Resolve warnings within the build by @smcvb in #2902
- Async-Native Command Handling by @abuijze in #2965
- Global Message Handler adjustments by @smcvb in #2967
- Clean-up MessageStream API in #3063
- Upgrade to JDK21 #3066
- Revisit Aggregate Test Fixture in #3073
- Polish new Command Bus implementation in #3077
- Revise Event Store logic in #3101
- [#2966] Add and enhance JavaDoc for the new Unit of Work by @smcvb in #3110
- [#3063] Fine tuning of
MessageStreamand introduction ofMessageStream#reduceby @smcvb in #3116 - Adjust the MessageStream to allow other things than Messages in #3129
- [#3101] Revise the Event Store -
SimpleEventStore,EventStoreTransaction,StreamableEventSource,IndexedEventMessageby @smcvb in #3131 - [#3129] Introduce and use
ContextcontainingMessageStream.Entryby @smcvb in #3139 - [#3101] Deprecated use of
TrackedEventMessagein favor ofMessageStream.Entryby @smcvb in #3140 - [#3101] Introduce the
EventSinkby @smcvb in #3143 - Fine tune
ResourceKeyby @smcvb in #3185 - Added operations on the MessageStream to for non-blocking reads by @abuijze in #3210
- [#3085] Use
MessageNameResolverin message gateways and event schedulers by @MateuszNaKodach in #3214 Index-to-Tagrename and removeEventMessageimpl fromTaggedEventMessageby @smcvb in #3221- Consistency marker interface by @abuijze in #3224
- ci: GitHub Actions - one in-progress run per pull request by @MateuszNaKodach in #3226
- Revise event criteria by @abuijze in #3230
- Add
SimpleEventStoreTestby @MateuszNaKodach in #3231 - ci: GitHub Actions (AF5) - rerun flaky tests by @MateuszNaKodach in #3236
- ci: GitHub Actions (AF5) -
add-to-projectrun only for dependabot pull requests by @MateuszNaKodach in #3237 - Introduce
MessageTypeby @smcvb in #3244 - The Repository shouldn't expose methods that are EventSourcing specific by @abuijze in #3255
- fix: AxonServerUtils - adjust for latest API changes (
targetContextparameter renamed tocontext) by @MateuszNaKodach in #3269 - [#3067] Introduce
MessageStreamSingleandEmptyinterfaces by @smcvb in #3291 - [#3305] refactor: Remove Java Serialization support by @MateuszNaKodach in #3336
- Allow ComponentDecorator registration in absence of a ComponentBuilder in #3325
- Define valid format for Events' Tags in #3326
- [#3067] Make the
Configurer,Configuration,Component, andComponentsDescribableComponentsby @smcvb in #3338 - Allow decorators to be configured in the absence of components by @abuijze in #3342
- Missed review comments for EventCriteria, making a
hasCriteriameth… by @CodeDrivenMitch in #3346 - Remove context from the EventStore by @CodeDrivenMitch in #3349
- [#3073] Axon Framework 5 Test Fixture - based on the new configuration API by @MateuszNaKodach in #3352
- [#3287] Annotated @EventSourcedEntity support by @CodeDrivenMitch in #3353
- Improvement of Configurer structure, favoring composition over inheritance by @abuijze in #3354
- [#3073] Axon Framework 5 Test Fixture - Then phase depends on When message type in #3362
- [#3072] feat: Axon Framework 5 Test Fixture - remove Hamcrest from the interface + enhancements by @MateuszNaKodach in #3366
- [#3085] Remove
CommandMessage.commandNameandQueryMessage.queryNameby @CodeDrivenMitch in #3367 - Adjust EventCriteria to specify tags first and move to QualifiedName by @CodeDrivenMitch in #3379
- Introduce definitions to construct annotation-related classes by @CodeDrivenMitch in #3388
- Rename deprecated
ConfigurationtoLegacyConfigurationby @smcvb in #3393 - Rename
AsyncEventStoretoEventStoreby @smcvb in #3394 - Rename
AsyncEventStorageEnginetoEventStorageEngineby @smcvb in #3395 - Rename
AsyncUnitOfWorktoUnitOfWorkandAsyncRepositorytoRepositoryby @smcvb in #3396 - Move
EntityEvolveraxon-modellingby @smcvb in #3397 - [#3077] Polish majority of the new Command Bus logic by @smcvb in #3400
- Revise Aggregate Modelling
- Redefine command model creation policy flow
- Use EntityId on non-collection Aggregate Members for routing
- Non-String Aggregate Identifiers
- Revisit Aggregate Polymorphism
- Rethink use and intent of
AggregateFactory - Revise use of Aggregate Member
ForwardingMode - Split ChildEntityMatcher for clearer message forwarding
- Rename Message Handler interfaces or Message Handler annotations to ensure they don't clash
- Validate if we can implement
EventSink#publish(String, List<EventMessage<?>>)on theSimpleEventStore - Add
ProcessingContextparameter to theEventGateway - [#3425 and #3243] Align the
EventGatewayandEventSinkAPI withCommandGatewayandCommandBus - refactor: introduce
eventstreamingpackage inmessagingmodule - [#3098] feat: revise EventProcessors - remove LegacyUnitOfWork in favor of UnitOfWork
- [#3098] feat: revise EventProcessors - replace
TransactionManagerwith UnitOfWork - [#3098] refactor:
PooledStreamingEventProcessor- replaceStreamableMessageSourcewithStreamableEventSource - [#3098] refactor:
EventProcessors- remove inheritance fromAbstractEventProcessor - Special Token Positions - Rename tail to first and head to latest
- Remove
SourcingCondition#end - [#3424] Remove
SourcingCondition#end - Remove
? extendsfrom many MessageStream results - Only use Jakarta for nullability annotations
- Make all components use the ProcessingContext
- Rename EventSourcedComponent to EntityEvolvingComponent
- Adjust
MetaDatato aMap<String, String> - [#3423] Adjust
MetaDatato containStringvalues - [#3102] Converter and ContentConverterType clean-up
- [#3102] Mark the
Serializerflow as deprecated - Add
ComponentRegistry#registerIfNotPresentmethods - Add support for generic component registration with TypeReference
- Remove
Lifecycleinterface,StartHandlerannotation, andShutdownHandlerannotation - [#3425] Test util clean-up
- Axon Server for DCB integration tests
- Clean-up new Distributed Command Bus solution
- [#3399]
AxonServerConnectorfor theDistributedCommandBus - Wire the
AxonServerConnectorinstead of theAxonServerCommandBus - [#3076] Numerous Axon Server Spring Boot Auto Configuration fixes
- [#3098] refactor(event-processing): revise
EventProcessors- replaceEventHandlerInvokerwithEventHandlingComponent - [#3098] refactor!: remove
TrackingEventProcessorand setPooledStreamingEventProcessoras a default - feat(event-sourcing): support
@EventCriteriaBuilderdetection in nested classes - feat(eventhandling): change default
SequencingPolicytoSequentialPolicy ModellingConfigurer- simplified "root-level" entity registration- [#3607] feat(modelling):
ModellingConfigurer- simplified "root-level" entity registration - Revise
SequencingPolicyimplementations - [#3641] feat(eventhandling):
SequencingPolicy- addProcessingContextas a parameter - Rewrite
SerializerstoConverters - [#3102] The
JacksonConverterimplementation - [#3102] Pass through on the
PassThroughConverter - [#3102] Remove
TestConverter - [#3102] Allow for
TypeonConverters - [#3102] Rename
Message#getPayloadTypetoMessage#payloadType - [#3102] Use
TypeandConverterforMessage#withConvertedPayload - [#3102] Remember converted payloads in the
GenericMessage - [#3102] Deprecate
EventDataand removeLegacyJpaEventStorageEngine - [#3102] Replace
DomainEventEntryforAggregateBasedEventEntryand fine-tuneAggregateBasedJpaEventStorageEngine - [#3102 / #3167 / #3239] Remove
AxonServerEventStoreand related tools in favor ofAxonServerEventStorageEngine - [#3102] Remove the
XStreamSerializer - [#3102] Remove
MessageandConverterserialization specific methods - [#3102] Reintroduce
Converterlayering andConverterSpring Boot autoconfiguration - [#3102] Add
Serializer-to-Converterdocumentation - [#3103] Align
MessageDispatchInterceptorandMessageHandlerInterceptorwith Async Native API - Convert payload before extracting id from message for AnnotatedEntityMetamodel
- Feature/remove message generic
- Change update checker request parameters
- Store non-domain Events without
aggregateIdentifierandsequenceNumber - Increase batched event processing parallelization
- Use
@Nonnulland@NullablethroughMessageimplementation - Move tag resolution responsibility from
EventStoreTransactiontoEventStore - [#3253] Move
TagResolverfromDefaultEventStoreTransactiontoSimpleEventStore - Rename
Message#getIdentifiertoMessage#identifier - Rename
Message#getPayloadtoMessage#payload - Rename
Message#getMetaDatatoMessage#metaData - Rename
EventMessage#getTimestamp,QueryMessage#getResponseType(), andSubscriptionQueryMessage#getUpdateResponseType() - Streamline
EventProcessortests - Expand the
MessageTestSuite - Revise
SequencingPolicyimplementations #3641 - Update
SequentialPerAggregatePolicyto useProcessingContext#3652 - [#3641] feat:
SequencingPolicyadjusted to AF5 API #3679 - [#3640] feat:
@SequencingPolicyannotation (class-level and method-level) +@EventHandlerannotationeventNameproperty #3705 - [#3357] cleanup: remove unnecessary methods from the legacy
EventProcessingModule#3687 - [#3098] refactor: EventProcessors - change the API to async-native #3693
- [#3640] feat:
EventProcessors - allows to retrieve components fromProcessingContextwhile determining the Sequence Identifier #3695 - Remove EventHandlingComponentBuilder,
MetaDataSequencingPolicy- do not contain fallback internally #3718 - Revise
TokenStoreto be Async Native #3432 - [#3432] Make the
TokenStoreasync-native #3715 - [#3103] Add Dispatch and Handler registration methods #3657
- Revise
MessageHandlerInterceptorandMessageDispatcherInterceptorAPI #3103 - [#3103] Integrate Event Handler Interceptors into Event Processing #3660
- [#3103] Event
MessageDispatchInterceptorsupport for publishing and appending events #3663 - [#3103] Clean-up Message Dispatch and Handler Interceptor revising todos #3665
- Ensure
CorrelationDataProvidersare integrated correctly #3579 - [#3579] Provide correlation data support #3666
- [#3488] Preliminary clean-up of
QueryGatewayandQueryBus#3669 - [#3488] Remove
SimpleQueryBus#Builderand make theQueryBusandSimpleQueryBusinto aQueryHandlerRegistry#3681 - Revise the Query API #3079
- [#3488] Align "Direct Query" / "Point-to-Point Query" with Async Native API #3688
- [#3488] Remove scatter-gather support #3690
- [#3488] Reintroduce
QueryBus#streamingQuery#3700 - [#3488] Reintroduce
QueryBus#subscriptionQuery#3708 - Reintroduce
MessageHandlerLookupandMessageHandlerConfigurer#3498 - [#3498 & #3499] Spring AutoConfiguration for message handlers and event-sourced entities/aggregates #3686
- Updating Event Processor configuration for Spring Boot #3495
- [#3495] Updating Event Processor configuration for Spring Boot #3702
- Unify annotation names #1781
- Add ProcessingContext to EventStore and EventStorageEngine methods #3692
- Add new method afterCommit to EventStorageTransaction#AppendTransaction #3703
- feat: add
EventCriteria#either(Collection<EventCriteria>)method #3694 - Avoid using reserved keywords in the package structure. #3635
- Component configuration shift #902
- Component Decoration type validation #3513
- [#3513] Validate that decoration result matches the registered type #3639
- Convert the
AvroSerializerto anAvroConverter#3609 - Implement Avro Converter #3645
- refactor(messaging):
eventhandling- reorganize subpackages for improved structure and clarity #3646 - Mark
EventStorageEngineinterface as internal. #3671 - enhancement(eventsourcing):
EventStoreinterface extendsStreamableEventSource#3650 - [#3577] Disable enhancer scanning for
BaseModuleimplementations #3668 - Mark
EventStorageEngineas internal #3676 - Add slow and flaky tags to some tests #3685
- Unwrap exceptions when using CommandGateway::sendAndWait #3712
- Mark ConnectionProvider and EntityManagerProvider internal #3722
- Rename
MetaDatatoMetadata, including all usages #3593 - [#3593] Rename all occurences of metadata #3682
- Fix new generic of MetaData #3683
- Replace TokenStore Builders by @nordicthings in #3730
- Fix missed renames by @hjohn in #3741
- testcontainers: change Axon Server image version to
2025.2.0-EAP2by @MateuszNaKodach in #3739 - chore: make functional interface by @jangalinski in #3744
- chore: enable jenv local by @jangalinski in #3743
- refactor(messaging):
SubscribableMessageSourcetoSubscribableEventSource+EventProcessingStrategyremoval by @MateuszNaKodach in #3736 - chore: configure javaagent for mockito by @jangalinski in #3755
- TokenStore rebuild by @zambrovski in #3749
- Send-and-wait API clean-up on the
CommandGatewayby @smcvb in #3748 - [#3358 & #3488] Remove Query-specific
ResponseTypeandStreamingQueryMessageby @smcvb in #3740 - [#3553] Rename trace and correlation identifier to correlation and causation identifier in the
MessageOriginProviderby @smcvb in #3746 - Clean-up
ErrorHandlerAPI by @smcvb in #3747 - Potential build improvements by @hjohn in #3745
- chore: introduce commandhandling sub package for interceptors by @jangalinski in #3765
- [#3601] Remove the
RevisionResolverand@Revisionby @smcvb in #3750 - Move static factory methods for reactor types to MessageStreamUtils by @hjohn in #3766
- Feature/warning fixes by @hjohn in #3775
- [#3392] feat(messaging):
EventStore extends EventBus, async-nativeEventBusby @MateuszNaKodach in #3754 - refactor:
StreamableEventSource- remove generic parameter by @MateuszNaKodach in #3780 - [#3392] feat: remove
AbstractEventBus- prefer composition over inheritance by @MateuszNaKodach in #3778 - [#3653] Reintroduce JPA-based Spring Boot autoconfiguration by @zambrovski in #3769
- [#3596] feat: EntityIdResolver throws an checked exception when resolution fails by @hjohn in #3779
- chore: autoclose file in/out stream by @jangalinski in #3795
- feat:
Configuration- addgetComponents()method to the interface by @MateuszNaKodach in #3793 - Restructuring of the QueryBus, namely for Subscription Queries by @abuijze in #3796
- [#3595] feat:
MessageMonitorsand monitoring support by @jangalinski in #3763 - chore: handler interceptors use generic super message type by @jangalinski in #3797
- [#3521] feat(axon-server-connector):
EventProcessorControlServicealigned with the new Configuration API by @MateuszNaKodach in #3794 - [#3672] Abstract sourcing condition position by @hjohn in #3774
- chore: clean conventions for Utility classes by @jangalinski in #3802
- Removed
SubscriptionQueryMessageand responseType from QueryMessage #3835 - fix(messaging):
DistributedCommandBusConfigurationEnhancer- InterceptingCommandBus wraps DistributedCommandBus #3830 - Add additional tests to StorageEngineTestSuite #3827
- [#3811, #3813] Gateways get default implementations for nullable/optional parameters #3815
- Move QueryGateway to
gatewaypackage #3813 - 4 / 4 Use singular subjectives describing the process of doing in package name (gerundium) #3867
- Rename SimpleEventStore to StorageEngineBackedEventStore #3863
- 2 / 4 Extract
conversionandupdatemodules out of messaging #3859 - Removed exceptional results references from ResultMessage #3844
- test(messaging):
AbstractSubscriptionQueryTestSuite- rewrite to use declarative approach #3843 DistributedCommandBusshould wait for commands in progress to be finished #3842- Cleanup messaging module - restructure packages and modules #3836
- [#3814] feat: Non-blocking parameter resolution - add for
@InjectEntity#3817 - Async
ParameterResolver- eg. non-blocking@InjectEntity#3814 - Remove leftover
Serializerlogic #3602 - Rename "annotated" configuration methods to "autodetected" #3861
- Rename SimpleEventStore to more accurately reflect its engine driven nature #3834
- Sourcing messages should communicate a resume position without needing conversion #3833
- EventProcessingConfigurer should expose registered configurations #2457
- Clean up maven structure - bundle vs jar #3872
- Provide maven-bom from monorepo #3903
- Asynchronous registration of CommandBusConnector and QueryBusConnector #3544
- set copyright notice to 2010-2025 #3905
- chore: cleanup package structure #3900
- [chore/#3861] Rename
annotatedtoautodetected#3870 - Unify pom names and descriptions for consistency #3874
- All util packages have singular name #3869
- [#3872] Remove felix bundle plugin - modules are published as jars #3916
- Upgrade AxonServer Connector for Java to 2025.2.0 #3926
- Avoid blocking when registering handlers on Connector #3917
📖 Documentation
- Added asciidoctor rendering configuration by @abuijze in #3250
- Construct a Getting Started guide in #3332
- [#3332] docs: Axon Framework 5 - Getting Started Guide by @MateuszNaKodach in #3369
- Milestone 1 survey proposal in #3389
- Validate
api-changes.mdfile - [#3382] Add missing, and fine-tune existing,
api-changessections - Add Update Checker mention to the README.md
- Add Command Bus / Command Gateway section to the
api-changes.md - [#3408] Add Command Dispatching and Handling section to
api-changes.md - Expand Getting Started with Event Processing and Handling (Automations) #3648
- [#3648] docs: Axon Framework 5.0.0-M3 - Expand Getting Started with Event Processing and Handling #3658
- Expand Getting Started with Projection (Read Model) example #3659
- [#3659] docs: Axon Framework 5.0.0-M3 - Expand Getting Started with Read Model example #3691
- Review Aggregate to Entities section of AF5 API Changes #3697
- 📝 docs(af5-getting-started): Update Axon version from
5.0.0-M3to5.0.0-preview#3723 - 📝 docs(af5-getting-started): add QueryHandler example #3729
- Typos on website university demo by @rubenahrens in #3737
- Update docs for extensions by @zambrovski in #3799
- Documentation changes to reflect actual behavior of annotated Event Handlers #3927
🪲 Bug fixes
- Move AxonServerRegistration to correct package in #3081
- [#3081] refactor: move
AxonServerRegistrationto correct package by @MateuszNaKodach in #3334 - [#3283] fix: Auto-register
MessageHandlerInterceptorswith Spring Boot fails for interceptors which depends on Axon components by @MateuszNaKodach in #3290 - Fix infinite event source call and missing ConsistencyMarker by @CodeDrivenMitch in #3299
- Prevent ORIGIN marker when source event stream is empty by @CodeDrivenMitch in #3302
- fix:
NewMessageHandlerRegistrationTestdoes not expectGenericMessageHandlingComponent#supportedMessagesmethod by @MateuszNaKodach in #3309 - Fix failing Spring Boot tests due to 4.11.x merge. by @CodeDrivenMitch in #3312
- Fix thread deadlock for HSQLDB by @CodeDrivenMitch in #3351
- Allow non-public @EventCriteriaBuilder methods by @CodeDrivenMitch in #3372
- Fix flaky
StorageEngineTestSuitetest, and disable AS download message - fix: flaky
AggregateBasedStorageEngineTestSuite- wait for commit - Check for @EntityCreator method is not detecting return type correctly
- [#3503] fix: Check for @EntityCreator method is not detecting return type correctly
- Fix exceptions not being propagates from start handlers
- fix:
AxonTestFixtureworks withSpringAxonApplication - Ignore installations without user.home
- Register start/shutdown handlers of "local"
ComponentsasSmartLifecyclebeans - Remove
axon-configurationdependency from Spring, Spring Boot, and Axon Server Connector modules - fix(eventhandling):
EventHandlingComponent#sequenceIdentifierForreturns Optional instead of the value inside - fix(test): resolve non-deterministic race condition in AccessSerializingRepositoryTest
- [#3483] Minor
SimpleEventStorechange - useEventStorageEnginei.o.UnitOfWorkFactoryonEventStore#publishwithoutProcessingContext. - Fix minor generic mismatches allowed by javac, but not by ecj
- ECJ compiler fix in the
AnnotatedHandlerInspector - Consider switching from h2 to TestContainer tests to avoid build pipeline blocking
- [#3623] Add HSQLDB container and use it in JDBCEventStorageEngineTest
- [#3103]
CommandMessage,EventMessage, andQueryMessage-specificMessageDispatchInterceptorsupport #3664 - Ensure
ConfigurationEnhancersare not registered twice #3656 - fix(eventsourcing):
InMemoryEventStorageEnginehandles streaming if the store is empty #3649 - Additional Integration Test,
AxonTestFixture#stop,EventSinkasDescribableComponent,EventAppendercompletes publication, and transactionUnitOfWorkFactoryresource fix #3655 IteratorMessageStreamreports completion too early when usingpeek#3670- Feature/fix iterator message stream #3674
- Return
Long.MAX_VALUEforConsistencyMarker.INFINITY#3675 - Revert "feat(event-sourcing): support
@EventCriteriaBuilderdetection in nested classes (#3538) #3709 - Event Handler in Spring Boot is badly configured and can't receive events #3724
- [#3724] fix(spring):
MessageHandlerConfigurer- setUnitOfWorkFactoryfor eachEventProcessorModule#3725 - Revise failing tests related to
ParameterResolverchanges #3710 - fix:
PooledStreamingEventProcessor'sCoordinatoruses thefirstTokenif null instead ofGlobalSequenceTrackingToken(-1)#3720 - Disabled tests #3711
- Feature/small fixes #3678
- Rename EntityExistsForCreationalCommandHandler exception #
- [#3734] fix(messaging):
QueryGateway- handlesMessageStream.Emptyas a query result by @MateuszNaKodach in #3735 - fix(messaging):
DelegatingCommandBusConnector- fix subscribe returns CompletableFuture by @MateuszNaKodach in #3742 - Allow for multiple initial responses on a subscription query #3829
- fix(axon-server-connector): handle error query result #3828
- [#3809] fix:
DistributedQueryBus- intercept dispatching + register handlers #3826 - [#3752] feat(messaging): InterceptingQueryBus - intercept subscription queries on dispatch #3824
- [#3818] fix(messaging): improving MessageStream creation from single, null, future and concatination #3821
- Distributed SubscriptionQuery (single) does not receive updates from server #3818
- InterceptingQueryGateway must also wrap the DistributedQueryBus, not the local segment #3809
- Retrofit split/merge concurrency issue from 4.12.2 #3866
- AxonServerCommandBusConnector must wait for incoming commands to complete on shutdown #3865
- Fixed inconsistent responses issue in DistributedQueryBus #3845
- fix(messaging): QueryGateway - subscriptionQuery - use converter for response payload #3839
- Fix token query methods #3838
- axon-messaging jar still contains common package #3871
- AnnotationMessageTypeResolver should delegate for defauls on empty namespace or localname #3880
- Duplicate event handling with springboot, EventAppender and spring proxy beans #3906
- Ensure the SpringComponentRegistry scans for components lazily #3889
- Spring Autoconfiguration files need to be ordered #3888
- Fix mismatch between javadoc and annotation processing for @Event, @Command, etc. #3887
- Fix JPA configuration properties and use the simple poller for testing so it doesn't need to be stopped #3898
- Fix transitive dependencies #3882
- [#3871] Correct bundling of artifacts #3873
- Allow handlers in UoW to be executed on same thread #3915
- Fix duplicate registration of overridden @EventHandler methods #3919
- Bump the maven-dependencies group across 1 directory with 25 updates
- Bump slackapi/slack-github-action from 1.27.0 to 2.1.1 in the github-dependencies group
- Bump the maven-dependencies group with 4 updates
- Bump the maven-dependencies group with 6 updates
- Bump actions/checkout from 4 to 5 in the github-dependencies group
- Bump the maven-dependencies group with 11 updates
- Bump sha.js from 2.4.11 to 2.4.12 in /docs/_playbook
- Bump actions/setup-java from 4.7.1 to 5.0.0 in the github-dependencies group
- Bump the maven-dependencies group with 14 updates
- Exclude xml-apis dependency as these are part of JDK 1.6+
- build(deps): bump the maven-dependencies group with 5 updates #3647
- build(deps): bump the github-dependencies group with 2 updates #3661
- build(deps): bump the maven-dependencies group with 3 updates #3662
- Bump the maven-dependencies group across 1 directory with 10 updates #3684
- Bump the maven-dependencies group with 19 updates #3701
- Bump the maven-dependencies group with 8 updates #3726
- Set jackson-core to test scope so it isn't available transitively in eventsourcing module #3677
- Bump the maven-dependencies group with 4 updates by @dependabot[bot] in https://github.com/AxonFramework/AxonFramework/pull/3738
- Bump the maven-dependencies group with 6 updates by @dependabot[bot] in https://github.com/AxonFramework/AxonFramework/pull/3770
- chore(deps): bump actions/setup-node from 5 to 6 in the github-dependencies group by @dependabot[bot] in https://github.com/AxonFramework/AxonFramework/pull/3789
- chore(deps): bump the maven-dependencies group with 8 updates #3790
- chore(deps): bump the maven-dependencies group across 1 directory with 20 updates #3823
- Use axonserver-connector-java 2025.2 GA instead of RC #3904
- build(deps): bump the maven-dependencies group across 1 directory with 7 updates #3877
- build(deps): bump the maven-dependencies group across 1 directory with 26 updates #3846
- build(deps): bump the maven-dependencies group with 6 updates #3883
- Depend on
axon-updateinaxon-messaging#3928 - build(deps): bump the maven-dependencies group across 1 directory with 10 updates #3924
- build(deps): bump js-yaml from 4.1.0 to 4.1.1 in /docs/_playbook #3908
🪲 Dependency upgrades
❤️ Contributors
We'd like to thank all the contributors who worked on this release!