Major Releases
All the enhancements and features which have been introduced to our major releases of the Axon Framework are noted here.
Release 4.10
Enhancements
-
Persistent stream configuration #3043
-
Rebalance Segments in PooledStreamingEventProcessor #3028
-
[#3007] Set a SmartLifecycle phase lower than the ones written in the spring WebServer lifecycle ones. #3009
-
Spring: Place the Axon shutdown hook AFTER the WebServer ones #3007
-
Update index.adoc, remove link to how-to’s #2978
-
Automate migration to Axon 4.9+ #2944
-
refactor: Parameterized logging with constant log values #2910
-
Enhancement/test container reuse #2883
Release 4.9
Behavioral breaking change
In issue #2778 we adapted the default TrackingToken
of each StreamingEventProcessor
to become a ReplayToken
instead of a null
.
These changes result in the certainty that tasks that should not be performed on a replay of old events, like virtually any Saga event handlers, are ignored upon introduction of the Event Handling Component.
However, if you expect all events to be handled as "new" events when introducing a new Event Handling Component, this may come as an unexpected change in behavior.
More specifically, if you use the @DisallowReplay
annotation or ReplayStatus#REPLAY
enumeration on your newly introduced Event Handling Component, you will notice that the annotated method or block of code is no longer invoked.
As such, the default ReplayToken
should be regarded as a behavioral breaking change if you expect all methods of a new Event Handling Component to be invoked, regardless of any Replay API usage.
Features
-
Add suppressible log message when console client is not on the classpath. #2868
-
Instruct compiler to include parameter names metadata #2835
-
Log notification about AxonIQ console, if console-framework-client is not there #2819
-
Add additional Axon Server connector configuration to the
AxonServerConfiguration
#2815 -
Introduce the
AxonServerEventStoreFactory
#2807 -
Claim segments operation for Streaming Event Processors #2803
-
Add property to easily disable using Axon Server as event store. #2801
-
Add support for Spring Docker Compose #2790
-
Add CBOR format and Spring Boot properties for support #2777
-
Allow easy configuration of CBOR #2776
-
Support Java modules #2427
Enhancements
-
Add JDK21 to GitHub Actions #2866
-
[#2843] Make it possible to have multiple instances of the DbScheduler components. #2853
-
AxonDbSchedulerAutoConfiguration can not be used multiple times in hierarchical Spring context due to static fields #2843
-
Add intermediate span factories for Event Processors #2834
-
Add intermediate span factories for Sagas and Repositories #2830
-
Add intermediate span factories for DeadlineManager #2829
-
Intermediate Span Factory pattern for buses #2826
-
Intermediate Span Factory pattern for snapshotters #2824
-
Dead-Letter Sequence Identifier Caching #2818
-
Detect empty snapshots due to Serializer misconfiguration #2817
-
Improve Event Scheduler context configuration #2810
-
Implement StreamingEventProcessor.claimSegment #2805
-
Improve Spanfactory configurability #2780
-
Default to ReplayToken upon creation of new event processor #2778
-
Prevent processors from resetting when no handlers support replay #2769
-
Improve JavaDoc of the
CommandTargetResolver
#2742
Release 4.8
Features
-
[#2689] Support Snapshotting for Polymorphic Aggregates #2753
-
Allow property based configuration of load balancing strategies #2750
-
Add
test-summary
step #2745 -
[#1828] Add Anchore Container Scan step #2744
-
[#2350] JDBC Dead-Letter Queue #2743
-
Enable tracing in DistributedCommandBus with SpanFactory #2729
-
Make the token store claim timeout easily configurable. #2722
-
Allow easy (property) configuration for the
claimTimeout
of the defaultTokenStore
#2708 -
Introduce Polymorphic Aggregate Snapshotting auto-configuration #2689
-
[#2639] Handler Interceptor support for Dead Letter Processing #2661
-
[#2640] Support
@ExceptionHandler
and@MessageHandlerInterceptor
annotated methods in Sagas #2656 -
Support
@ExceptionHandler
annotated methods in Sagas #2640 -
Handler Interceptor support for Dead Letter Processing #2639
-
Add an auto-merge step for Dependabot Pull Request #2608
-
2581 Allow to override EventSchema without modifying default JdbcEve… #2582
-
Allow to override EventSchema without modifying default JdbcEventStorageEngine in Spring context #2581
-
Allow Development mode on test containers #2461
-
Autoconfigure automatic load balancing #2453
-
Enable tracing in DistributedCommandBus with SpanFactory #2403
-
JDBC Dead-Letter Queue #2350
-
Validate
test-summary
GitHub Action #2228 -
Investigate usage of the Anchore Container Scan in GitHub Actions #1828
Enhancements
-
Introduce
AxonServerContainer
as test-container #2763 -
[#2755] Align assertion messages #2757
-
Put test assertion errors on multiple lines #2755
-
Add db-scheduler implementation of the Event Scheduler and Deadline Manager #2727
-
Add db-scheduler implementation of the Event Scheduler and Deadline Manager #2724
-
Add JCacheAdapter test scenarios #2721
-
Make Configuration accessible #2700
-
refactor: Spring Boot 2.x best practices #2663
-
Improve error message in case a streaming query gives an error. #2662
-
Error handling of Streaming queries is less than ideal #2660
-
Add a warning to the creation of the in memory token store. #2650
-
Add a
registerDeadLetterQueueProvider
method in theEventProcessingConfigurer
. #2633 -
[#2628] Extended support for Spring application context hierarchy #2629
-
ObjectMapper cannot be resolved from Spring Parent Context #2628
-
Move AbstractDeadlineManagerTestSuite to spring module so it’s deployed. #2622
-
Clean the test logs #2606
-
Create a SequencedDeadLetterQueueFactory #2598
-
2581 Do not duplicate bean definition of TokenStore #2587
-
[#2074] Allow to customize saga schema table and columns #2575
-
Auto-merge successful Dependabot Pull requests #2569
-
Move to use job builder to have more control how the jobs are stored. Add auto configuration. #2564
-
Enable
cancelAll
andcancelAllwithinScope
in theJobRunrDeadlineManager
. #2507 -
Add JCacheAdapter test scenarios #2421
-
Change jdbc column names to snake case as default. #2074
-
Add cache using EhCache 3 #2709
-
Add cache using Ehcache 3 #2420
Bug fixes
-
Remove payloadType tag from EventProcessorLatencyMetric #2683
Release 4.7
This release introduces compatibility with Spring Boot 3. The support for Spring Boot 3 also entails the removal of the Jakarta-specific modules since Jakarta is now the default. Furthermore, it required us to duplicate the Javax Persistence and Javax Validation classes into dedicated legacy packages. In doing so, we provided support for both Javax and Jakarta, as well as Spring Boot 2 and Spring Boot 3.
However, this required us to introduce breaking changes in 4.7 compared to 4.6. To help you upgrade towards Axon Framework 4.7, we provide a dedicated Upgrading to Axon Framework 4.7 page describing the scenarios you may be in and the steps to take for upgrading.
Next to the Javax-to-Jakarta adjustments and the Spring Boot 3 support, we’ve added an Event Scheduler and Deadline Manager based on JobRunr.
For an exhaustive list of the features, enhancements, and bug fixes introduced, see below:
Features
-
[#1509] Add
whenConstructing
andwhenInvoking
to theAggregateTestFixture
#2551 -
[#2476] Support
EventMessage
handler interceptor registration on theSagaTestFixture
#2548 -
[#2351] The
DeadLetter
Parameter Resolver #2547 -
Add
Configurer#registerHandlerEnhancerDefinition
#2545 -
[#1123] Support
Repository
bean wiring through generics #2527 -
Implement the JobRunr implementation of the event scheduler. #2509
-
JobRunr
DeadlineManager
#2499 -
Added parameter resolver for aggregate type retrieval from domain event messages #2498
-
Implement Event Handler Interceptors registration on
SagaTestFixtures
#2476 -
Message Handler (parameter) support for Dead Letters #2351
-
Alternative deadline manager: JobRunr (Quartz alternative) #2192
-
Allow the AggregateTestFixture to expect methods to be called instead of commands passed. #1509
-
Allow replay on a Saga #1458
-
Provide alternatives for QuartzEventScheduler and QuartzDeadlineManager #1106
-
Configurable Locking Scheme in SagaStore #947
Enhancements
-
Fixed SpringAggregateLookup initialization issue for Spring AOT #2578
-
[#2561] Move Sonar to JDK17 #2574
-
Automatically approve
Dependabot[bot]
PRs #2566 -
Add Segment and Token to UnitOfWork of PooledStreamingEventProcessor #2562
-
Move Sonar to JDK17 build #2561
-
[#2129] Fine tune
Repository
registration in theAggregateTestFixture
#2552 -
[#1630] Allow disabling of sequence number generation in the
GenericJpaRepository
#2550 -
Several fixes to successfully run a JDK17 build #2544
-
Adjust Dependabot behavior #2536
-
Enable heartbeats to Axon Server by default #2530
-
[#2383] Add
ConditionalOnMissingBean
toSpringAxonConfiguration
andSpringConfigurer
#2526 -
Small test and code improvement for JobRunr deadline manager #2510
-
Introduce the NestingSpanFactory #2487
-
Improve mismatch messages for Hamcrest Matchers #2400 #2418
-
Allow OpenTelemetrySpanFactory to only create child spans #2404
-
Add ConditionalOnBean to InfraConfiguration Beans #2383
-
AggregateTestFixture creates EventSourcingRepository and does not invalidate it #2129
-
JDK16 - axon-messaging own unit test fail on #1826
-
GenericJpaRepository to enable/disable the sequence number generation #1630
Release 4.6
Axon Framework 4.6.0 has undergone a great deal of changes. Some noteworthy additions are the Dead-Letter Queue, integrated Tracing with Open Telemetry and Jakarta support. For an exhaustive list of the features, enhancements, and bug fixes with introduced, see below. For a list that also contains the dependency upgrades we refer to this page.
Features
-
Added Slack release announcement #2348
-
[#2307] Carry the context during reset to the
ReplayToken
#2312 -
Propagate ResetContext in ReplayToken #2307
-
[#2198] Add support for Jakarta #2301
-
Native Tracing for Axon Framework with OpenTelemetry as default #2294
-
[#2021] Dead Letter Queue for Event Processing Groups #2258
-
JPA dead letter queue implementation #2239
-
Construct means to switch between classes using
javax
andjakarta
#2198 -
Create
add-dependabot-pr-to-project.yml
#2183 -
Create add-issues-to-project.yml #2182
-
Multiteant support #2156
-
Spring event for indication that Axon has started #2146
-
Application events when handlers are registered #2144
-
[#1125] Introduce
SagaLifecycle.associationValues()
#2141 -
[#1964] Include
AxonServerHealthIndicator
#2130 -
AggregateTestFixture
improvement - Validate Exception Details #2125 -
AggregateTestFixture
improvement - Validate Exception Details #2110 -
Feature/1466 Additional deadline validation methods #2071
-
Multi-tenant support #2045
-
Dead-Letter Queue for Event Processors #2021
-
Added AxonServerEEContainer and AxonServerSEContainer as an easier way for people to write tests #2020
-
Streaming query #2001
-
[#1967] Fetch available segements only from the TokenStore #1997
-
[#1645] Introduce ObjectNode-to/from-JsonNode
ContentTypeConverter
for theJacksonSerializer
#1995 -
[#1490] Simplify LockFactory configuration for Aggregates #1992
-
[#1986 Introduce
EventProcessingConfigurer#defaultTransactionManager
method #1989 -
Register default Transaction Manager through Event Processing Configurer #1986
-
Add method returning the available segments of a TokenStore #1967
-
Add an actuator health indicator to check the connection between the application and Axon Server #1964
-
Added the MetaDataSequencingPolicy #1930
-
Provide a SequencingPolicy based on a MetaData field #1929
-
Added an option to create a fixture for a state stored aggregate #1772
-
JsonNode-to-ObjectNode ContentTypeConverter #1645
-
Simplify LockFactory configuration per aggregate #1490
-
Additional Deadline Validation methods. #1466
-
Allow TrackingEventProcessor start to be deferred #1184
-
Accessing Saga Association Values #1125
-
Signal when all Handlers have been registered in Spring environment #880
Enhancements
-
Improve deadline span name. #2360
-
Make Given-phase Error Handling configurable for Saga Test Fixtures #2356
-
Improve SpanFactory autoconfiguration mechanism. #2354
-
Introduce LoggingSpanFactory and MultiSpanFactory #2353
-
Check if a certain handler contains certain methods before registering it. #2346
-
Catch exceptions from correlation data providers. #2345
-
Throw exception on ambiguous dependencies #2344
-
Integration Test for Command and Query Priority Calculations #2342
-
Include message identifier in error message if de-serialization fails #2330
-
Add CorrelationDataProvider error handling on rollback #2328
-
Strip test prefix once required in JUnit 3 from test method names #2321
-
Apache Maven Wrapper 3.8.6 #2320
-
Allow ReplayToken creation to be customizable when resetting a projection #2308
-
Ensure all dispatchable messages are serialiable by Jackson and XStream. #2295
-
Testclasses for javax jakarta extension #2280
-
Remove redundant method definition #2270
-
Integration Test for Command and Query Priority Calculations #2266
-
Update the
PrioritizedRunnable
to aPriorityTask
#2265 -
Automatically add Release Notes on milestone closure to Discuss post #2264
-
Create a protected method to fetch tracking events on JpaEventStorageEngine #2262
-
Create a protected method to fetch tracking events on JpaEventStorageEngine. #2259
-
Allow subtype definition on the
Repository
builders for Polymorphic Aggregates #2250 -
Add test for ConsistentHash.equals #2244
-
Use getHost instead of getContainerIpAddress #2222
-
Default snapshotfilter with revision null #2213
-
Default snapshot filter with revision null #2212
-
Creation policy factory for Aggregates #2209
-
Removed deprecated code by updating the default serializer initialization #2206
-
Flux response type rank matching #2197
-
Introduce conditional variants for
ApplyMore
#2174 -
Conditional variant for the ApplyMore methods #2173
-
Take into account the result of the
equals
method before attempting… #2171 -
Improve javadoc of the ReplayStatus enum to reflect changes to the StreamingEventProcessors #2170
-
MultipleInstancesResponseType should match (lower) on single item #2148
-
Add duplicate resolution on query handler registration, defaulting to… #2140
-
Add method on DefaultCommandGateway to be able to customize callbacks #2139
-
Default Revision
SnapshotFilter
in absence of annotation #2136 -
Fine tune the
MessageHandlerLookup
for Spring Native support #2106 -
Redesign of Spring Boot Auto Configuration support #2105
-
Feature/1629 saga test fixture #2101
-
[#2093] Validate if target Command Handling Member can resolve target #2095
-
Allow several Aggregate Member collections of the same type #2093
-
Changed logging about "processor falling behind" #2073
-
Make asDomainEventMessage available to subclasses #2066
-
Make
JpaEventStorageEngine#asDomainEventMessage(EventMessage<?>)
protected #2065 -
Separate Integration Tests and Aggregate coverage reports #2063
-
[#1646] Update "No Handler For" exceptional cases #2062
-
[#1711] Simplify attachment of Lifecycle Operations #2061
-
Change how Sonar is invoked for GHA’s #2033
-
Introduce LifecycleAware interface for managing component lifecycle #2028
-
Remove MonoWrapper usage. #2008
-
Replaced
method.getParametersTypes().length
bymethod.getParameterCount())
#1987 -
Methods for testing deadlines when time passed are consistent in TestExecutor & SagaTestFixture (fixes #1974) #1975
-
Make methods for testing Deadlines consistent for
TestExecutor
andSagaTestFixture
#1974 -
Added jdk17-ea on our build workflow for early feedback #1915
-
Add configurable options for checking failure transiency #1910
-
Prevent stack trace generation for HandlerExecutionException #1905
-
Allow creation of HandlerExecutionExceptions without stacktrace #1901
-
[#1898] Empty associationProperty leads to IndexOutOfBoundsException #1899
-
Empty associationProperty leads to IndexOutOfBoundsException #1898
-
Provide means of configuring a
CommandCallback
#1889 -
Splitted builds into pr and not pr, added ghactions to Dependabot and other minors #1830
-
Fine tune triggered Deadline validation for Test Fixtures #1797
-
Simplified DeadlineManager configuration #1796
-
Expand RetryScheduler to support more granular decision when to retry #1723
-
Simplify attachment of Lifecycle Operations #1711
-
Improved termination heuristic when response is < batchsize/2 and the… #1691
-
Exception in startHandlers is "swallowed" by exception in shutdownHandlers #1669
-
Fine tune "No Handler For…" Exception #1646
-
SagaTestFixture should support expectSuccessfulHandlerExecution() #1629
-
Large number of rolled back transactions on JPA/JDBC TokenStore #1475
-
Reduce Reflection usage #1427
-
Add annotation NonNull/Nullable for better usage in Kotlin (also java) #1280
-
Spurious warnings when a tracking token gap appears then is filled #1193
-
Query handlers of the same name and response type within one class #719
-
MultipleInstancesResponseType should recognize handler with single result #602
Bug fixes
-
Rename SpanFactory.registerTagProvider to registerSpanAttributeProvider #2347
-
[#2341] Adjust type checking in
SimpleQueryUpdateEmitter
to accompany type erasure #2343 -
UpdateEmitter drops MultipleInstancesResponseType updates due to type checking. #2341
-
Parameter resolver ordering is wrong for test fixtures #2340
-
Take all types into account when resolving the deadline handler #2336
-
When moving to a polymorphic Aggregate the stored Deadlines are not handled. #2333
-
[#2331] Fix deserialization bug
GrpcBackedSubscriptionQueryMessage
and filter non-handler-matching updates #2332 -
GrpcBackedSubscriptionQueryMessage
overwrites update type with initial response type #2331 -
[#2317] Using deadlines with DefaultConfigurer leads to NPE #2319
-
Using deadlines with DefaultConfigurer leads to NPE #2317
-
Fix streaming queries not respecting PriorityTask mechanism #2309
-
[#2268] Adjust
ConditionalOnClass
to validate existence of theAxonServerConnectionManager
in absence of theaxon-server-connector
package. #2269 -
Bug when using Spring actuator starter and excluding axon server #2268
-
Support
Cache
andLockFactory
configuration on@Aggregate
stereotype #2254 -
Extracted lambdas to inner static classes #2240
-
Dependency on reactor is needed to be able to start an Axon app using current 4.6.0-SNAPSHOT #2238
-
Fix snapshots not being deployed to nexus #2237
-
fix javadoc: default port is 8124, not 8123 #2223
-
fix typo in local variable name #2218
-
Publisher Response Type #2215
-
EventProcessingModule should lazily initialize processors #2180
-
Fix
StreamingEventProcessor#maxCapacity
for theTrackingEventProcessor
#2124 -
Restore missing commit 6e531a6cf173243adf9519905f42cbec0a334238 #2116
-
Wire eventSerializer into QuartzEventSchedulerFactoryBean #2115
-
Wire the event
Serializer
intoQuartzEventSchedulerFactoryBean
#2088 -
Fix typo in pom.xml #2022
-
Fix typos #2016
-
Exponential Retry for Tracking event processor not happening for transient exceptions when using Postgres JdbcTokenStore #1920
Release 4.5
This release has seen numerous addition towards Axon Framework. The most interesting adjustments can be seen down below. Note that the BOM (as marked in #1200) is not part of the release notes, as this will use its own separate release cycle. For those interested, the BOM repository can be found here.
For an exhaustive list of all adjustments made for release 4.5 you can check out this page.
Enhancements
-
A new type of
EventProcessor
has been introduced in pull request #1712, called thePooledStreamingEventProcessor
. ThisEventProcessor
allows the same set of operations as theTrackingEventProcessor
, but uses a different threading approach for handling events and processing operations. In all, this solution provides a more straightforward processor implementation and configuration, allowing for enhanced event processing in general. For specifics on how to configure it, check out this section. -
Sagas support the use of Deadline Handlers, but an
@DeadlineHandler
annotated method couldn’t automatically close a Saga with the@EndSaga
annotation. This enhancement has been described in #1469 and resolved in pull request #1656. As such, as of Axon 4.5, an@DeadlineHandler
annotated can also be annotated with@EndSaga
, to automatically close the Saga whenever the given deadline is handled. -
Whenever an application uses snapshots, the point arises that old snapshot versions need to be invalidated when loading an Aggregate. To that end the
SnapshotFilter
can be configured. As a simplified solution, the@Revision
annotation can now be placed on the Aggregate class to automatically configure a revision basedSnapshotFilter
. Due to this, old snapshots will be filtered out automatically when an Aggregate is reconstructed from theEventStore
. For those interested, the implementation of this feature can be found here. -
At the basis of Axon’s message handling functionality, is the
MessageHandlingMember
. For the time being, the sole implementation of this is theAnnotatedMessageHandlingMember
, which expect the use of annotations like the@CommandHandler
and@EventHandler
, for example. As a step towards constructing an annotation-less approach, #1621 was introduced into the framework. The first steps taken in this pull request are the deprecation of annotation-specific methods from theMessageHandlingMember
interface. Added to this is a new approach towards defining attributes of a message handling member throughHandlerAttributes
.
Bug fixes
-
The
InMemoryEventStorageEngine
is a good fit for testing purposes. However, it included a discrepancy towards the event storing solution compared to other event storage solutions. This issue was addressed in #1056 and resolved in pull request #1660. -
In issue #1733 a confusion around the
EventUtils#asDomainEventMessage
was described. This reiterated the fact that this method is purely intended for internal use inside Axon Framework, which was not clear to the users. As such, it has now been deprecated, containing a clear statement why this method is not to be used.
Release 4.4
Enhancements
-
Axon Framework can now be used in conjunction with Spring Boot Developer Tools. You can simply achieve this by adding the required dev-tools dependency to your project.
-
As a partial solution to #1106, Axon Server can now be used to schedule events. Building an
AxonServerEventScheduler
as theEventScheduler
implementation as defined through the builder is sufficient to start with scheduling events through Axon Server. -
An
EventTrackerStatusChangeListener
can now be configured for aTrackingEventProcessor
, as was requested in #1338. It can be configured through theTrackingEventProcessorConfiguration
, allowing users to react upon status changes of each thread processing event messages. -
Component specific message handler interceptors can now be defined through a dedicated annotation: the
@MessageHandlerInterceptor
annotation. This annotation allows you to introduce a specific bit of logic to be invoked prior to entering the message handling function or after invocation. It for example allows the additional introduction of a@ExceptionHandler
annotation, allowing you to specifically deal with the exceptions thrown from your message handlers. The original pull request can be found under #1394. For more specifics on using this annotation, check out the @MessageHandlerInterceptor section. -
Configuring a
Snapshotter
andSnapshotFilter
have been simplified in this release. Pull request #1447 shares the load of allowing for distinctSnapshotter
configuration. Issue #1391 describes the intent to the configuration of snapshot filtering to be performed on Aggregate level. The former can be configured through theConfigurer
, whereas the latter is by usage of theAggregateConfigurer
.
Bug fixes
-
The
AggregateTestFixture
was incorrectly noting an old method in one of its exceptions. This has been marked and resolved in #1428. -
The
CommandValidator
andEventValidator
had a minor discrepancy; namely, theCommandValidator
cleared out contained commands upon starting whereas theEventValidator
didn’t. Pull request #1438 resolved the problem at hand.
For a full list of all the feature request and enhancements done for release 4.4, you can check out this page.
Release 4.3
Enhancements
-
Aggregate Polymorphism has been introduced, allowing for an aggregate hierarchy to come naturally from a domain model. To set this up, the
AggregateConfigurer#withSubtypes(Class… aggregates)
method can be used. In a Spring environment, an aggregate class hierarchy will be detected automatically. For more details on this feature, read up on it here. -
An Axon application will now shutdown more gracefully than it did in the previous releases. This is achieved by marking specific methods in Axon’s infrastructure components as a
@StartHandler
or@ShutdownHandler
. A 'phase' is required in those, specifying when the method should be executed. If you want to add your own lifecycle handlers, you can either register a component with the aforementioned annotations or register the methods directly throughConfigurer#onInitialize
,Configuration#onStart
andConfiguration#onShutdown
. -
We have introduced the
@CreationPolicy
annotation which you can add to@CommandHandler
annotated methods in your aggregate. Through this, it is possible to define if such a command handler should 'never', 'always' or 'create' an aggregate 'if-missing'. For further explanation read the Aggregate Command Handler Creation Policy section. -
Both the
XStreamSerializer
andJacksonSerializer
provide a means to toggle on "lenient serialization" through their builders. -
Various test fixture improvements have been made, such as options to register a
HandlerEnhancerDefinition
, aParameterResolverFactory
and aListenerInvocationErrorHandler
. Additional validations have been added too, revolving around asserting scheduled events and deadline message. The Test Fixture page has been updated to define these new operations accordingly. -
The
TrackingEventProcessor#processingStatus
method as of 4.3 exposes more status information. The current token position, token-at-reset, is-merging and merge-completed position have been added to the set. Read the Event Tracker Status section for more specifics on this.
Bug fixes
-
A
ConcurrencyException
was thrown when an aggregate was created at two distinct JVM’s at the same time. AsConcurrencyException`s are typically retryable, the creation command would be issued again if a `RetryScheduler
was in place. Retrying this operation is however useless and hence has been replaced for anAggregateStreamCreationException
in pull request #1333. -
The test fixtures for state-stored aggregates did unintentionally not allow resource injection. This problem has been resolved in pull request #1315.
-
The
MultiStreamableMessageSource
did not deal well with one or several exceptional streams. Hence exception handling has been improved on this matter in #1325.
For a complete list of all the changes made in 4.3 you can check out this page.
Release 4.2
Enhancements
-
Axon Framework applications can now use tags to support a level of 'location awareness' between Axon clients and Axon Server instances. This feature is further described here.
-
Axon Server already supported several contexts, but Axon Framework application could not specify to which context message should be dispatched. The Axon Server Connector has been expanded with a
TargetContextResolver
to allow just this. -
A new implementation of the
StreamablbeMessageSource
has been implemented: theMultiStreamableMessageSource
. This implementation allows pairing several "streamable" message sources into a single source. This can in turn be used to for example read events from several distinct contexts for a single Tracking Event Processor. -
Handler Execution Exception now allow application specific information to be sent back over the wire in case of a distributed set up.
-
The
TrackingToken
interface now provides an estimate of it’s relative position in the event stream through theposition()
method. -
Optional
return types can now be used for Query Handling methods.
Bug fixes
-
An Aggregate’s
Snapshotter
was not auto configured when Spring Boot is being used, as was filed under #932. -
The
CommandResultMessage
was returned asnull
when using theDisruptorCommandBus
. This was solved in pull request #1169. -
The
ScopeDescriptor
used by theDeadlineManager
had serialization issue when a user would migrate from an Axon 3.x application to Axon 4.x. Theaxon-legacy
package has been expanded to contain legacy `ScopeDescriptor`s to resolve this problem.
For a full list of all features, enhancements and bugs, check out the issue tracker.
Release 4.1
Enhancements
-
The
TrackingEventProcessor
now has an API to split and mergeTrackingTokens
during runtime of an application. Axon Server has additions to the UI to split and merge a given Tracking Event Processor’s tokens. -
Next to Dropwizard metrics the framework now also supports Micrometer metrics. The
MessageMonitor
interface is used to allow integration with Micrometer. Lastly, we are incredibly thankful that this has been introduced as a community contribution. -
Primitive types are now supported as
@QueryHandler
return types. -
We have introduced the
EventGateway
in a similar fashion as theCommandGateway
andQueryGateway
. As with the command and query version, theEventGateway
provides a simpler API when it comes to dispatching Events on theEventBus
.
Bug fixes
-
Command and Query message priority was not set correctly for the Axon Server Connector. This issue has been addressed under bug #1004.
-
The
CapacityMonitor
was not registered correctly for Event Processor, which user "Sabartius" resolved under issue #961. -
Some exception were not reported correctly and/or clearly when utilizing the Axon Server Connector (issue marked under number #945).
We refer to this page for a full list of all the changes.
Release 4.0
Enhancements
-
The package structure of Axon Framework has changed drastically with the aim to provide users the option to pick and choose. For example, if only the messaging components of framework are required, one can directly depend on the
axon-messaging
package. -
In part with the package restructure, all components which leverage another framework to provide something extra have been given their own repository. These repositories are called the Axon Framework Extensions.
-
The configuration of Event Processor has been replaced and greatly fine tuned with the addition of the
EventProcessingConfigurer
. -
Some new defaults have been introduced in release 4.0, like a bias towards expecting a connection with Axon Server. Another important chance is the switch from defaulting to Tracking Processors instead of Subscribing Processors.
-
The notion of a
CommandResultMessage
has been introduced as a dedicated message towards the result of command handling. -
To simplify configuration and more easily overcome deprecation, the Builder pattern has been implemented for all infrastructure components.