Axon Framework - Release 4.5

I would like to announce that Axon Framework release 4.5. has been released on the 31th of March 2021. 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 released yet, but will be soon! 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.

Without further ado, let me give you the most interesting additions to framework:

  • A new type of EventProcessor has been introduced in pull request #1712, called the PooledStreamingEventProcessor. This EventProcessor allows the same set of operations as the TrackingEventProcessor, 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 based SnapshotFilter. Due to this, old snapshots will be filtered out automatically when an Aggregate is reconstructed from the EventStore. 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 the AnnotatedMessageHandlingMember, 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 the MessageHandlingMember interface. Added to this is a new approach towards defining attributes of a message handling member through HandlerAttributes.

2 Likes