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 4.10

Release 4.10.2

Features

  • [#3149] Allow queries with a local handler to shortcut to the local segment #3161

  • Allow queries with a local handler to shortcut to the local segment #3149

Enhancements

  • fix: log statement issue with Logback classic #3164

  • Wrap SinksManyWrapper#performWithBusyWaitSpin in ReentrantLock to improve performance of Subscription Query Updates #3163

  • Deadletter Logging with Logback Classic #3160

  • [#3157] Skip Axon Server Docker tests on ARM64 for older Axon Server versions #3158

  • Legacy Axon Server 4.x tests fail on Mac/ARM #3157

  • Fixed messageSerialization test in GenericMessageTest #3156

Bug fixes

  • Gracefully await queries in progress in the AxonServerQueryBus #3176

  • [#3171] Set CreationPolicyAggregateFactory for every type in the AggregateModel #3173

  • Polymorphic aggregate cannot be instantiated using @CreationPolicy #3171

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.10.1

Enhancements

  • [#3123] Introduce SubscriptionQueryResult#handle default implementation that expects a Consumer<Throwable> #3124

  • Exceptions in QueryHandler methods are swallowed for subscription queries #3123

  • Reduce the number of property lookups for matching entities #3119

  • Adjust the AbstractMethodPropertyAccessStrategy to filter better on none-matching methods #3117

  • Introduce PersistentStreamScheduledExecutorBuilder #3078

  • Account for contexts call on un-initialized containers #3054

Bug fixes

  • Fix rescheduling of failed Persistent Streams #3130

  • Allow DLQ to handle deserialization errors #3126

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.9

Release 4.9.3

Enhancements

  • Skip jacoco if sonar-enabled is false. #2976

Bug fixes

  • Add additional check for NoToken so we never try to open a stream with it. #2986

  • Use TransactionManager in the EventProcessorControlService to invoke TokenStore#retrieveStorageIdentifier #2985

  • Resolve issue with eager gap cleanup #2977

  • Fix SagaTestFixture use DomainEventMessage #2974

  • Weird state causing tracking processors to never advance #2958

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.9.2

Bug fixes

  • Added explicit AutoConfigureBefore and AutoConfigureAfter in JpaAutoConfiguration #2964

  • Resolved MySQL startup problems in integration tests #2963

  • Fix Exception on using OpenTelemetry and ScatterGather queries #2960

  • [#2955] Fix ability to replay when at least one Event Handling Component supports a reset #2957

  • @DisallowReplay on a single Event Handling Components blocks replay of the entire StreamingEventProcessor #2955

  • fix: reverse eventBlockListingEnabled value for EventBuffer#disableIg… #2947

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.9.1

Enhancements

  • Added support for TrackingToken parameter in SagaTestFixture #2917

  • [#2900] Removed requirement for property to disable AxonServer EventStore and enable another one #2909

  • Align the TrackingToken assert for JPA, JDBC, and AxonServer #2903

Bug fixes

  • Resolved apparent memory leak in GapAwareTrackingToken #2936

  • Axon Spring Boot Starter fails to connect to Axon Server on Spring Boot version 3.1.6+ #2914

  • Integration test should use current Axon version #2908

  • Behavioral change in 4.9 JpaEventStoreAutoConfiguration #2900

  • Make the viable name match with the override, the current name can be… #2888

Dependency upgrade

  • Upgrade Axon Server Connector Java to 2023.2.0 #2913

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.8

Release 4.8.3

Enhancements

  • [#2855] Support Hierarchical Spring Contexts within SpringConfigurer.ComponentLocator #2870

  • Enhance segment logging for PooledStreamingEventProcessor #2869

  • ComponentLocator does not resolve beans from Spring Parent Context #2855

  • [#2844] Improve shutdown behavior for DbSchedulerDeadlineManager #2852

  • Shutdown-Mechanism of DbSchedulerDeadlineManager #2844

Bug fixes

  • Disable JPA and JDBC EventStorageEngine creation when Axon Server is enabled #2871

  • [#2845] Ensure ConfigurerModule order is respected in Spring Autoconfiguration #2846

  • InfraConfiguration.springAxonConfigurer ignores ConfigurerModule.order() #2845

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.8.2

Enhancements

  • Removed spring-devtools.properties #2820

  • Add default constructor for the AxonServerContainer #2809

Bug fixes

  • axon-tracing-opentelemetry with Spring Devtools crashes on start #2828

  • Ensure insert order is maintained for SequencedDeadLetterQueue#deadLetterSequence(String) invocations #2827

  • Fix inconsistencies around the AxonServerConfiguration #2814

  • Enable Annotated Message Interceptor support for Command Handling Components #2804

  • Fix property-based Load Balancing Strategy configuration bug #2802

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.8.1

Enhancements

  • Log when HandlerExecutionException#details are missing and on AbstractRepository failures #2796

  • Allow Coordinator to extend Token claims as an optimization #2785

  • Introduce Maven profile to update versions for non-parent POM related module #2638

Bug fixes

  • Enable provisioning a Message with custom MetaData for QueryGateway#streamingQuery #2795

  • Ensure Aggregate Member Command Handlers are retrievable in complex Aggregate Hierarchy #2794

  • Aggregate fixture hierarchy behaviour #2792

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.7

Release 4.7.6

Enhancements

  • [#2752] Truncate Cause message to fit default column width #2759

  • DLQ - PSQLException: ERROR: value too long for type character varying(255) #2752

Bug fixes

  • Synchronize during Event Processor initialization #2756

  • Duplicate initialization of TrackingEventProcessor worker threads #2751

  • Fix Initialization of PSEP when using Saga #2736

  • When registering the same Saga multiple times, only the last one is kept. #2726

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.7.5

Bug fixes

  • Fix autoconfiguration not picking up SpanFactory for AxonServerQueryBus 4.7 #2695

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.7.4

Enhancements

  • Polymorphic Aggregate auto-configuration test enhancements #2690

  • AbstractRepository logs warning when aggregate is loaded to process deadline message #2669

  • Don’t log warn when the aggregate is handling a deadline message. #2644

Bug fixes

  • Use cause from decision #2688

  • Also include custom aggregate names to resolve deadline handlers #2686

  • Deadline Handlers are not executed when created and handled within Aggregates with custom type name #2678

  • Spring AOT fix #2675

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.7.3

Enhancements

  • Include dependency upgrades with migration #2631

Bug fixes

  • Replace SpringPrototypeAggregateFactory BeanDefinition introspection for direct method invocation #2637

  • Deprecated fallback warning with Spring 6.0.5 #2630

  • Fix OpenTelemetry warning #2635

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.7.2

Features

  • Add Migration module with OpenRewrite recipes for AxonFramework 4.7 #2597

  • Automatic migration recipes to 4.7+ #2596

Enhancements

  • [#2611] Clarify active UnitOfWork expectation in the Repository #2625

  • ClassCastException on @ExceptionHandler annotated Aggregate when loading Aggregate manually in an @EventHandler annotated method #2611

Bug fixes

  • Add missing copyright notices and remove duplicate notices #2626

  • [#2620] Test correlation data population for DeadlineManager implementations #2624

  • SimpleDeadlineManager does not use CorrelationDataProviders #2620

  • Fix OpenTelemetry support - 4.7 Edition #2617

  • refactor: Add ASLv2 license header #2613

  • [#2604] Ensure given(Object…​) can be followed up by andGivenCurrentTime #2607

  • AggregateTestFixture.andGivenCurrentTime() should not clear fixture given state #2604

  • [#2555] Switch to ConcurrentHashMap in Saga related classes #2592

  • Make the AssociationResolver and SagaMethodMessageHandlerDefinition thread safe. #2591

  • Make SnapshotFilter a hard requirement #2586

  • SagaFixtureTests in parallel concurrent mode #2555

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.7.1

Bug fixes

  • Fix not calling shutdown on EmbeddedEventStore in combination with javax #2585

  • Axon Spring AutoConfiguration binds wrong EventStore (Jakarta/Javax) #2584

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.6

Release 4.6.8

Enhancements

  • Move the check for whether the event processor is caught up before do… #2714

Bug fixes

  • Make registerHandlerInterceptor lazy #2716

  • Adjust the JavaDoc of the EventProcessorLatencyMonitor #2704

  • Wait till processing is done until setting the caughtUp flag for the PooledStreamingEventProcessor. #2698

  • Fix autoconfiguration not picking up SpanFactory for AxonServerQueryBus 4.6 #2696

  • Pooled Streaming Event Processor incorrectly sets the caughtUp flag #2694

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.6.7

Bug fixes

  • Fix OpenTelemetry warning #2635

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.6.6

Bug fixes

  • Fix OpenTelemetry support on queries #2621

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.6.5

Bug fixes

  • Fix OpenTelemetry support #2612

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.6.4

Bug fixes

  • Ensure retrieved Saga Identifiers collection is thread-safe #2595

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.6.3

Enhancements

  • Proposed changes to caching saga fix #2532

  • Allow usage of specific serializers for the JpaDLQ #2486

Bug fixes

  • Ensure default TrackingEventProcessorConfiguration is taken into account for Sagas #2533

  • Saga Caching Enhancements #2531

  • Cancel of direct query #2528

  • [#2514] Fix naming of registered Repository and AggregateFactory beans #2525

  • Fix caching mechanism for Sagas #2517

  • Wrong Spring repository bean name when using aggregate polymorphism #2514

  • SpringAxonAutoConfigurer warns about multiple beans defined for polymorphic aggregates. #2512

  • Roll back slf4j to major version 1 #2497

  • DeadLetterQueue uses wrong Serializer to (de)serialize Tokens #2485

  • Adhere to expected Exception Handler invocation order #2483

  • [#2481] Check MessageHandlerRegistrar registration to be non-null #2482

  • NullPointerException on Shutdown without Start #2481

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.6.2

Features

  • [#2444] Exact class type matcher #2446

  • Add matcher for exact class type #2444

Enhancements

  • Update the README.md to guide users better #2470

  • [#2456] Replace use of unregister for deregister #2466

  • Prefer 'deregister' to 'unregister' #2456

Bug fixes

  • [#2473] Ensure lifecycle handlers for components declared as Spring beans are invoked #2474

  • Axon Server event scheduler is never started #2473

  • Fixes recovering quartz jobs in case of sudden shutdown #2472

  • [#2464] Set subtypes on SpringPrototypeAggregateFactory #2469

  • [#2449] Adhere to Spring’s @Order annotation for Message Handling Component registration #2468

  • Replace IdentifierMissingException in AnnotationCommandTargetResolver for IllegalArgumentException #2465

  • Commands routed to the parent of polymorphic aggregates cause IncompatibleAggregateException #2464

  • Fixes the saga list injection bug, issue 2462. #2463

  • Injecting Lists in Saga no longer works #2462

  • [#2445] Revert default EventUpcasterChain construction in DefaultConfigurer #2459

  • CachingSagaStore corrupts Cache entries when using computeIfPresent #2458

  • [#2454] Reintroduce changes from PR #1905 #2455

  • Pull request 1905 is missing from master #2454

  • QuartzDeadlineManager does not recover from failures #2451

  • Spring @Order seems to be ignored for different event handler components belonging to the same event processor #2449

  • Fix Cache#computeIfPresent return value in CachingSagaStore #2448

  • Axon Spring Boot application fails to start when multiple EventUpcasterChain spring beans are defined #2445

  • Added Spring Resource Injector to Application Context #2441

  • Add test scope to mysql-connector-java dependency #2436

  • [#2431] Use XStreamSerializer#defaultSerializer to mitigate XStream exclusion issues #2434

  • Fix regression for GenericJpaRepository autoconfig #2433

  • JpaSagaStore cannot be used without XStream #2431

Contributors

We’d like to thank all the contributors who worked on this release!

Release 4.6.1

Enhancements

  • Added ConditionalOnMissingBean to AutoConfiguration #2414

  • Add ConditionalOnMissingBean to AxonServerActuatorAutoConfigurationis #2411

Bug fixes

  • Only return unique sequence identifiers in deadLetters call of JPA DLQ #2428

  • autowiring command model Repository results in NoSuchBeanDefinitionException in 4.6.0 #2426

  • Deadlines bug #2424

  • [#1211] Add Cache#computeIfPresent and use in CachingSagaStore for Association Values #2423

  • Renamed size column name in JdbcTokenStore #2413

  • [#2393] Move retrieval of Command Handler to the end of the InterceptorChain #2412

  • JdbcTokenStore uses query that contains reserved word in oracle #2409

  • [#2389] Make constructors accessible in NoArgumentConstructorCreationPolicyAggregateFactory #2407

  • Rename index column to sequenceIndex #2401

  • [#2396] Deadletter logging changes #2398

  • Dead Letter Queue implementations can leak personal data to log #2396

  • CommandHandlerInterceptor annotated method in aggregate root doesn’t work when command handling entity not created #2393

  • [#2382] Disable batch optimization for token-based event reading #2390

  • Aggregates no longer allow private/protected no-arg constructors #2389

  • Events are not processed when optimize-event-consumption is disabled #2382

  • [#2367] Fix Repository beans not being registered to the Spring application context #2370

  • [#2364] Fix framework failing to start due to a ClassNotFoundException #2369

  • Fix GA for Slack release announcement #2368

  • Aggregate org.axonframework.modelling.command.Repository bean not available in Spring context #2367

  • Event storage engines cannot be used without XStream #2364

  • Concurrency conflicts in CachingSagaStore #1211

Release 4.5

Release 4.5.15

Enhancements

  • [#2290] TrackingEventProcessor does not wait for his worker threads to shut down #2292

  • TrackingEventProcessor does not wait for his worker threads to shut down #2290

Bug fixes

  • Improve the concurrent behaviour of the tracking event processor. #2311

  • Fix a problem where when a shutdown takes places while the worklaunch… #2305

  • Remove update handler registration on UpdateHandlerRegistration#complete #2300

  • Canceled subscription query remains active if updates Flux is not subscribed, causing error on emit #2299

  • Fix duplicate command handler detection. #2298

  • TrackingEventProcessor cannot be reset immediately after shutdown in rare cases #2293

  • [#2289] Incorrect warning message in case of shutdown timeout #2291

  • Incorrect warning message in case of shutdown timeout #2289

  • Duplicate command handler resolver is triggered in polymorphic aggregates #2243

Release 4.5.14

Bug fixes

  • TrackingEventProcessors shutdown is not working correctly in 4.5.13 #2287

  • Snapshots are not read with snapshot filter and same serializer for events and snapshots #2286

  • Snapshots are not considered during loading of an Aggregate using Axon-Server-Connector #2285

Release 4.5.13

Features

  • Make the shutdown timeout configurable #1981

Enhancements

  • Pooled Streaming Event Processor configuration enhancement #2276

  • Introduce mechanism to interrupt TrackingEventProcessor worker threads #2041

  • Allow lifecycle phase timeout configuration #2037

Bug fixes

  • Retry to initialize the token store correctly on exception for PSEP. #2277

  • Process events with identical TrackingToken together in the PooledStreamingEventProcessor #2275

  • PooledStreamingEventProcessor does not Retry if initialization fails #2274

Release 4.5.12

Bug fixes

  • Ensure commands and queries are processed in FIFO order #2263

  • Commands with same priority are not handled in the correct order #2257

Release 4.5.11

Enhancements

  • Release announcement on discuss #2256

Bug fixes

  • [#2242] Correctly support null-identifier and no-event scenarios from Command Handling constructors, Always, and Create-If-Missing creation policies #2248

  • Check attribute filter deep equals #2246

  • Fix Duplicate command handler resolver is triggered in polymorphic ag… #2245

  • Duplicate command handler resolver is triggered in polymorphic aggregates #2243

  • AggregateTestFixture throws AggregateNotFoundException when a command handler with a creation policy applies no events #2242

Release 4.5.10

  • Axon’s test fixtures perform a "deep equals" operation, using reflection as they go. JDK17, rightfully so, does not allow that for all classes. To solve scenarios where users utilize objects from, for example, java.lang, we have introduced a distinct DeepEqualsMatcher in pull request #2210. This matcher implementation considers the situation that an InaccessibleObjectException might be thrown from Axon’s test fixtures, correctly dealing with the scenario by assuming the assertion failed.

  • Contributor fabio-couto noticed a predicament within the PooledStreamingEventProcessor (PSEP for short) when they were facing connectivity issues with their RDBMS. In the face of these issues, the PSEP coordinator is incapable of fetching events, resulting in canceled work packages. As part of canceling, the PSEP actively tries to release token claims, which is yet another database operation. This loop of several connectivity issues causes the PSEP to enter a state it could not recover from. Pull request #2225, provided by fabio-couto, solves this predicament.

  • A fix was introduced to the EventTypeUpcaster to solve issues further down the upcasting chain. Contributor dakr0013 noted that upcaster invoked after an EventTypeUpcaster failed because the expected intermediate event type was adjusted to Object. dakr0013 provided a pull request, which we made some adjustments in PR #2177 to accommodate additional scenarios.

You can check out the release notes when you’re looking for an exhaustive list of all the changes.

Release 4.5.9

This release brings three adjustments worth mentioning to the framework, namely:

  1. Contributor oysteing opened issue #2154, describing that the ReplayStatus enumeration never entered the REPLAY status for a PooledStreamingEventProcessor. We resolved this finding in pull request #2168 by ensuring the TrackingToken carries the replay status as intended.

  2. The AggregateTestFixture incorrectly assumed a test succeeded in the absence of an exception when you would use the expectExceptionMessage validation step. We resolved this predicament in pull request #2127.

  3. Lastly, we further upgraded the XStream dependency for a CVE in this pull request. This time, for CVE-2021-43859.

For an exhaustive list of the changes in 4.5.9, we refer to the release notes.

Release 4.5.8

This release brings two adjustments worth mentioning to the framework. Namely:

  1. We spotted a bug within the PooledStreamingEventProcessor (PSEP). More specifically, whenever a subset of the tokens for the PSEP existed, calculating the lower bound of a token would cause failures. We addressed this predicament in pull request #2082.

  2. We introduce an enhancement in the API of the CommandGateway. You can now directly insert MetaData whenever using the CommandGateway#send or CommandGateway#sendAndWait operations. You can verify the changes #here.

Release 4.5.7

This release contains a single fix. Namely, pull request #2067. This pull request solves a bug that had the PooledStreamingEventProcessor not handle new events resulting from an EventMultiUpcaster. The kudos for spotting the bug go to Magnus Heino, which started a discussion on our forum after he noticed the issue.

Release 4.5.6

  • Although Axon Framework doesn’t use the log4j-core dependency directly, we updated it to the most recent version for ease of mind. You can follow these increments in issues #2038, #2040 and #2052.

  • Contributor jasperfect spotted a predicament with duplicate aggregate creation combined with using caches. Axon didn’t invalidate the cache as it should have, causing unexpected behavior. You can find the issue description here. Additionally, you can find the pull request solving the problem here.

  • Contributor shubhojitr stated in issue #2051 that the axonserver-connector-java project pulled in a non-secure version of grpc-netty. As this isn’t an issue on Axon Framework itself, we solved the problem under the connector project. As a follow-up, we incremented the framework’s version for the axonserver-connector-java project to 4.5.4, which contains the most recent version of the grpc-bom.

For an exhaustive list of all the changes, check out the 4.5.6 release notes.

Release 4.5.5

  • The auto-configuration we introduced for XStream used a suboptimal approach. We assumed searching for the @ComponentScan would suffice but didn’t consider that Spring enabled SpEL operations in the annotation’s properties. This approach thus caused some applications to break on start-up. As such, this approach is replaced entirely by using the outcome of the AutoConfigurationPackages#get(BeanFactory) method. For those interested in the details of the solution, check out this pull request. Kudos to contributor maverick1601 for drafting issue #1963 explaining the predicament.

  • We introduced an optimization towards updating the TrackingToken. In (distributed) environments where the configuration states several segments per Streaming Processor, there are always threads receiving events that they’re not in charge of due to the configured SequencingPolicy. The old implementation eagerly updated the token in such scenarios, but this didn’t benefit the end-user immediately. Pull request #1999 introduce a wait period for 'event-less-batches', for both the TrackingEventProcessor and PooledStreamingEventProcessor. This adjustment minimizes the number of token updates performed by both processor implementations.

  • The introduction of Spring Boot version 2.6.0 brought an issue to light within Axon’s Spring usage. The AbstractAnnotationHandlerBeanPostProcessor took FactoryBean instances into account when searching for message handling methods. This approach, however, is not recommended by Spring, which they enforced in their latest release. The result was circular dependency exceptions on start-up whenever somebody used Spring Boot 2.6.0. The fix was simple, though, as we should simply ignore FactoryBean instances. After spotting the issue, we resolved it in this pull request.

For an exhaustive list of all the changes, check out the 4.5.5 release notes.

Release 4.5.4

  • Firstly, we updated the XStream version to 1.4.18. This upgrade was a requirement since several CVE’s were noted for XStream version 1.4.17. As a consequence of XStream’s solution imposed through the CVE’s, everybody is required to specify the security context of an XStream instance. This change also has an impact on Axon Framework since the XStreamSerializer is the default serializer. So as of this release, any usages of the default XStreamSerializer will come with warnings, stating it is highly recommended to use an XStream instance for which the security context is set through types or wildcards. When your application uses Spring Boot, Axon will default to selecting the secured types based on your @ComponentScan annotated beans (for example, like the @SpringBootApplication annotation). For those interested in the details of the solution, check out this pull request.

  • User 'nils-christian' noted in issue #1892 that Axon executed Upcaster beans in a Spring environment in the incorrect order. This ordering issue was due to a misconception in deducing the @Order annotation on upcaster beans. We resolved the problem in pull request #1895.

  • We noticed a TokenStore operation that Axon did not invoke within a transaction. In most scenarios, this worked out, but when using Micronaut, for example, this (correctly) caused an exception. After spotting the issue, we resolved it in this pull request.

For an exhaustive list of all the changes, check out the 4.5.4 release notes.

Release 4.5.3

  • One new feature has been introduced in 4.5.3: the PropertySequencingPolicy by contributor nils-christian. This sequencing policy can be configured to look for a common property in the events.

  • The version of the axonserver-connector-java has been updated to 4.5.2. This update resolves a troublesome issue around permit updates for subscription queries, which exhausted the number of queries an application could have running. For those curious about the solution, pull request 85 addresses this issue.

  • The WorkerLauncher runnable, used by the TrackingEventProcessor to start its threads, was not considered when you shut down a tracking processor. As a consequence, it could start new segment operations while shutdown already completed "successfully." Pull request 1866 resolves this problem, ensuring a tracking processor shuts down as intended.

  • Issue 1853 describes an issue where the creation policy always. Exceptions thrown from within a command handler annotated with @CreationPolicy(ALWAYS) weren’t correctly propagated. Pull request 1854 solves this issue.

For an exhaustive list of all the changes, check out the 4.5.3 release notes.

Release 4.5.2

  • Added a missing isReplaying flag on the StreamingEventProcessor. Pull request #1821 reintroduces this functionality in this release.

  • Some enhancements in regards to logging Exceptions and stacktraces when initialization fails. This commit reintroduces this functionality in this release.

  • Improved Axon Framework (AxonServerEventStore) which will now rethrown Exceptions that has a valid Status.Code. Pull request #1842 reintroduces this functionality in this release.

  • General improvements on the PooledStreamingEventProcessor made across several Pull Requests.

For a detailed perspective on the release notes, please check this page.

Release 4.5.1

  • Some internals have changed concerning command handling exceptions. Within a single JVM, Axon Framework knows whether the exception is transient or not. This piece of information allows the RetryScheduler to retry a non-transient exception since those are retryable. With the move towards distributed environments, the information whether an exception is transient was lost when we moved to the dedicated CommandHandlingException containing a details object. Pull request #1742 reintroduces this functionality in this release.

  • The new RevisionSnapshotFilter introduced in release 4.5 sneaked in a bug by not validating the aggregate type upon filtering. Pull request #1771 describes and solves the problem by introducing the aggregate type to the RevisionSnapshotFilter.

  • By enabling the CreationPolicy for the DisruptorCommandBus, a timing issue was introduced with handling events. Contributor "junkdog" marked the problem in issue #1778, after which pull request #1792 solved it.

  • Contributor "michaelbub" noted in issue #1786 that resetting a StreamingEventProcessor to a point in the future reacted differently when no token was stored yet. This followed from the implementation of the ReplayToken, which wrongfully assumed that if the given 'token at reset' was null, the start position should be null too. However, the start position might be the future, and hence it should be used in favor of null. This issue is addressed under this pull request.

For a detailed perspective on the release notes, please check this page.

Release 4.4

Release 4.4.9

Release 4.4.9 of Axon Framework has incremented all used dependencies towards their latest bug release. This has done to resolve potentially security issues, as was reported with XStream 1.4.14 (that was resolved in 1.4.16).

For those looking for the set of adjustments please take a look at tag 4.4.9

Release 4.4.8

  • A bug was noted whenever a query handler returned a Future/CompletableFuture in combination with a subscription query, with Axon Server as the infrastructure. In this format, Axon would incorrectly use the scatter-gather query for the initial result of the subscription query. Whenever the returned result was completed, this didn’t cause any issues. However, for a Future/CompletableFuture a TimeoutException would be thrown. The issue was luckily easily mitigated by changing the "number of expected results" from within the QueryRequest to default to 1 instead of zero. As an effect, the point-to-point would be invoked instead of scatter-gather. For reference, the issue can be found here.

  • Whenever an interface is used as the type of an @AggregateMember annotated field, Axon would throw a NullPointerException. This is far from friendly, and has been changed towards an AxonConfigurationException in pull request #1742.

Note that the named issues comprise the complete changelist for Axon Framework 4.4.8.

Release 4.4.7

  • The Axon Server Connector Java version 4.4.7 has been included in this release as well. As such, it’s fixes (found here) are thus also part of this release.

  • Contributor "krosenvold" noticed that the SQL to retrieve a stream of events was performed twice in quick concession. The provided solution (in pull request #1689) would resolve this, but the problem was spotted to originate elsewhere. Commit 16b7152 saw an end to this occurrence by making a minor tweak in the EmbeddedEventStore.

  • As rightfully noticed by user "pepperbob", there was a type discrepancy when reading events through a tracking token. An event would always become a DomainEventMessage when read through the EventStorageEngine, whereas it might originally have been a regular EventMessage. The problem has been fixed in commit c61a95b. Furthermore, the entire description of the issue can be found here.

  • Through the use of the AxonServerQueryBus, a cancelled subscription query was wrongfully completed normally where it should complete exceptionally. This problem is marked and resolved under pull request #1695.

For a detailed perspective on the release notes, please check this page.

Release 4.4.6

  • Contributor "Rafaesp" noted that a registered CommandHandlerInterceptor in the AggregateTestFixture could be invoked more often than desired. This only occurred if the fixture’s givenCommands(…​) method was invoked, but nonetheless this behaviour was incorrect. The issue is marked under #1665 and resolved in pull request #1666.

  • In 4.4.4, a fix was introduced which ensured a ChildEntity (read, the Aggregate Members) was no longer duplicated in an aggregate hierarchy. This fix had the troublesome side effect that aggregate member command handlers weren’t registered on every level of the aggregate hierarchy anymore. The resolution to this problem can be found in pull request #1674.

  • Using the subscription query in a distributed environment had a possible troublesome side effect. If a consumer of updates was closed for whatever reason, it could also close the producing side. This is obviously undesired, as no single consumer should influence if the producer should still dispatch updates to other consumers. The problem was marked under issue #1680 and resolved in this commit.

  • Right before we aimed to release 4.4.6, contributor "haraldk" provided a thorough issue description when using the SequenceEventStorageEngine. He noted that if snapshots were used for an aggregate, there was a window of opportunity that the 'active' EventStorageEngine in the sequencing engine did not return any events. This followed from the sequence number logic, which wrongfully defaulted to position "0", even though the starting sequence number is per definition higher if a snapshot has been found. The clarifying issue can be found here, with its resolution present in pull request #1683.

For a complete overview of all the changes you can check the release notes here.

Release 4.4.5

  • When creating a TrackingToken at a certain position through StreamableMessageSource#createTokenAt(Instant), a tail token was wrongfully returned if the provided timestamp exceeded the timestamp of the last event. Instead, the token closests to the provided timestamp should be returned, was equals the head token. This discrepancy between documentation and implementation was marked by mbreevoort and resolved in pull request #1607.

  • A certain path within the AxonServerEventStore allowed for event retrieval without correctly deserializing the MetaData of the events. If someone tried to access the MetaData, a CannotConvertBetweenTypesException was being thrown. This problem, among others, was remedied in pull request #1612, by ensuring the correct Serializer taking gRPC message types into account is consistently used.

For a complete set of the release notes, please check here.

Release 4.4.4

  • There was a bug which made it so that an @ResetHandler annotated method without any parameters was included for validation if a component could handle a specific type of event. This exact validation is used to filter out events from the event stream to optimize the entire stream. The optimization was thus mitigated by the simple fact of introducing a default @ResetHandler. The problem was marked by @kad-hesseg (for which thanks) and resolved in pull request #1597.

  • A new SnapshotTriggerDefinition called AggregateLoadTimeSnapShotTriggerDefinition has been introduced, which uses the load time of an aggregate to trigger a snapshot creation.

  • When using an aggregate class hierarchy, @AggregateMember annotated fields present on the root would be duplicated for every class in the hierarchy which included message handling functions. This problem was traced back to the AnnotatedAggregateMetaModelFactory.AnnotatedAggregateModel which looped over an inconsistent set of classes to find these members. The issue was marked by @kad-malota and resolved in pull request #1595.

For a complete set of the release notes, please check here.

Release 4.4.3

  • An optimization in the snapshotting process was introduced in pull request #1510. This PR ensures no unnecessary snapshots are staged in the AbstractSnapshotter by validating none have been scheduled yet. This fix will resolve potential high I.O. when snapshots are being recreated for aggregates which have a high number of events.

  • The assignment rules used by the EventProcessingConfigurer weren’t always taken into account as desired. This inconsistency compared to regular assignment through the @ProcessingGroup annotation has been resolved in this pull request.

  • Heartbeat messages between Axon Server and an Axon Framework application were already configurable, but only from the server’s side. Properties have been introduced to also enables this from the clients end, as specified further in this pull request. Enabling heartbeat messages will ensure the connection is preemptively closed if no response has been received in the configured time frame.

To check out all fixes introduced in 4.4.3, you can check them out on this page.

Release 4.4.2

  • A persistent loop of 500 ms was spotted during event consumption from Axon Server. Credits go to Damir Murat who has spotted the issue. With his help the issue was found quickly and eventually resolved in pull request #1484.

  • A serialization issue was found when working with the ConfigToken and de-/serialize it through the JacksonSerializer. This problem was uncovered in issue #1482 and resolved in pull request #1485.

  • The introduction of the AxonServer Connector for Java to simplify the framework’s integration with Axon Server introduced some configuration issues. For example, the AxonServerConfiguration#isForceReadFromLeader wasn’t used when opening an event stream (resolved in PR #1488).

  • Furthermore, properties like the max-message-size, gRPC keep alive settings and processorNotificationRate weren’t used when forming a connection with Axon Server. This issue was covered by pull request #1487.

This page shares a complete list of all resolved issues for this release.

Release 4.4.1

A single fix was performed as soon as possible to release 4.4, in conjunction with the new Axon Server Connector used by this release. There was an off by one scenario when an Event Processor started reading events from the beginning of time. This meant that the first event in the event store was systematically skipped. The bug was resolved in this commit.

Release 4.3

Release 4.3.5

  • The TrackingEventProcessor#mergeSegment(int) method was invoked with the high segment number of the pair to merge,

an error would occur in the process as it expected to receive the lower number on all scenarios.

This was resolved in pull request #1450.

  • A small connectivity adjustment which was performed in the AxonServerConnectionManager for bug release 4.3.4 has been reverted.

Although it worked successfully for some scenarios, it did not correctly cover all possibilities.

The commit can be found here for reference.

The full scenario will be covered through the adjusted connector which is underway for beta release in 4.4.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.3.4

  • Whilst adjusting the JdbcEventStorageEngine in #1187 to allow more flexibility to configure the used statements, we accidentally dropped support for adjusting how the store wrote timestamps.

This issue was rectified by user ovstetun in pull request #1454.

  • Snapshots were incorrectly created in the same phase as the publication of events.

This has been moved to the after commit phase of the UnitOfWork in issue #1457.

  • When using the SequenceEventStorageEngine to merge an active and historic event stream there was a discrepancy when the active stream didn’t contain any events and the historic stream did.

This has been resolved in pull request #1459.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.3.3

This bug release contained a single fix, under pull request #1425. A situation was reported where a Tracking Event Processor did not catch up with the last event, until a new event was available after that event. Effectively causing it to read up to N-1. This only accounted for usages of the MultiStreamableMessageSource, thus when two (or more) event streams were combined into a single source for a TrackingEventProcessor.

To remain complete, here is the issue tracker page contained the closed issues for release 4.3.3.

Release 4.3.2

  • When using the QueryGateway, it was not possible to provide a QueryMessage as the query field since the queryName would be derived from the class name of the provided query.

Hence, QueryMessage would be the queryName, instead of the actual queryName.

This issue has been resolved in #1410.

  • There was a window of opportunity where the Snapshotter would publish the last event in its stream twice.

This could cause faulty snapshots in some scenarios.

This issue was marked under #1408 and resolved in pull request #1416.

  • The bi-directional stream created by the Axon Server Connector wasn’t always closed correctly; specifically in error cases.

This problem has been resolved in pull request 1397.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.3.1

feature a bug was introduced which didn’t allow non-String aggregate identifiers.

This problem was quickly resolved in #1363,

allowing the usage of "complex" aggregate identifiers once more.

  • The graceful shutdown process introduced in 4.3 had a couple of minor problems.

One of which was the shutdown order within the AxonServerCommandBus and AxonServerQueryBus,

which basically made it so that the approach prior to 4.3 was maintained.

We also noticed that the AxonServerConnectionManager never shutdown nicely.

All of these, plus some other minor fixes, have been performed in #1372.

  • The AggregateCreationPolicy#ALWAYS did not behave as expected, resulting in faulty behaviour when used.

Pull request #1371 saw an end to this problem,

ensuring the desired usage of all newly introduced creation policies.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.2

Release 4.2.2

  • In a distributed setup, the DisruptorCommandBus was not always correctly identified as being the local segment.

Due to this, aggregate repositories weren’t created by the DisruptorCommandBus as is required in such a configuration.

This was marked in #874 and resolved through #1287.

a query handler with return type Future was not being returned at all but threw an exception.

Pull request #1323 solved that in 4.2.2.

  • An issue was solved where the JdbcAutoConfiguration unintentionally depended on a JPA specific class.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.2.1

  • A one-to-many Upcaster instance tied to Axon Server would only use the first event result and ignore the rest.

This issue has been resolved in pull request #1264.

  • The axon-legacy module’s GapAwareTrackingToken did not implement the TrackingToken interface.

This was marked in issue #1230 and resolved in #1231.

  • The builders of the ExponentialBackOffIntervalRetryScheduler and IntervalRetryScheduler previously

did not implement the validate() method correctly.

Through this a NullPointerException could occur on start-up,

as marked in #1293.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.1

Release 4.1.2

  • A dependency on XStream was enforced undesirably through the Builder pattern introduced in 4.0.

This has been resolved by using a Supplier of a Serializer in the Builders instead, as described under this issue.

  • Due to a hierarchy issue in the Spring Boot auto configuration, the JdbcTokenStore was not always used as expected.

The ordering has been fixed under issue #1077.

  • The ordering of message handling functions was incorrect according to the documentation.

Classes take precedence over interface, and the depth of interface hierarchy is calculated based on the inheritance level (as described here).

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.1.1

  • Query Dispatch Interceptors were not called correctly when a subscription query was performed when Axon Server was used as the QueryBus.

This issue was marked here and resolved in pull request #1042.

  • When Axon Server was (auto) configured without being able to connect to an actual instance, processing instructions were incorrectly dispatched regardless.

Pull request #1040 resolves this by making sure an active connection is present.

  • The Spring Boot auto configuration did not allow the exclusion of the axon-server-connector dependency due to a direct dependency on classes.

This has been resolved by expecting fully qualified class names as Strings instead (resolved under this pull request).

  • The JpaEventStorageEngine was not wrapping the appendEvents operation in a transaction.

Problem has been resolved under issue #1035.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.0

Release 4.0.4

  • Deserialization failures were accidentally swallowed by the command and query gateway (marked under #967).

  • Resolved an issue where custom exception in a Command Handling constructor caused NullPointerExceptions.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.0.3

  • The SimpleQueryBus reported exceptions on the initial result incorrectly upon performing a subscription query.

Issue has been described and resolved under #913.

  • Resolved issue where the the "download Axon Server" message was shown upon a reconnect of an application to a Axon Server node.

  • Large global index gaps between events caused issues when querying the event stream (described here).

  • Fixed inconsistency in the GlobalSequenceTrackingToken#covers(TrackingToken) method.

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.0.2

  • A timeout was thrown instead of a exception by Axon Server when a duplicate aggregate id was created, which is resolved in #903.

  • Command or Query handling exceptions were not properly serialized through Axon Server (resolved in #904).

For a complete list of all resolved bugs we refer to the issue tracker.

Release 4.0.1

  • Resolved QueryUpdateEmitter configuration for the Axon Server connector set up (see issue here).

  • For migration purposes legacy TrackingTokens should have been added, which is resolved here.

  • Event Processing was stopped after a reconnection with Axon Server. Resolve the problem in issue #883.

For a complete list of all resolved bugs we refer to the issue tracker.