Kotlin
Kotlin is a programming language which interoperates fully with Java and the JVM. As Axon is written in Java it can be used in conjunction with Kotlin too, offering a different feel when using the framework.
Some of Axon's API's work perfectly well in Java, but have a rather awkward feel when transitioning over to Kotlin. The goal of the Kotlin Extension is to remove that awkwardness, by providing inline and reified methods of Axon's API.
Several solutions are currently given, which can roughly be segregated into the distinct types of messages used by Axon. This thus provides a commands, events and queries section on this page.
Experimental Release
Currently, the Kotlin Extension has been release experimentally (e.g. release 0.1.0). This means that all implementations are subject to change until a full release (e.g. a release 1.0.0) has been made.
Commands
This section describes the additional functionality attached to Axon's command dispatching and handling logic.
CommandGateway
An inlined method has been introduced on the CommandGateway
which allows the introduction of a dedicated function to be invoked upon success or failure of handling the command. As such it provides a short hand instead of using the CommandCallback
directly yourself.
Here is a sample of how this can be utilized within your own project:
Events
This section describes the additional functionality attached to Axon's event publication and handling logic.
Event Upcasters
A simplified implementation of the Single Event Upcaster is given, which allows for a shorter implementation cycle. Making an upcaster to upcast the CardIssuedEvent
from revision 0
to 1
can be written as follows:
Alternatively, since Revisions
is essentially a Pair
of String
, it is also possible to use Kotlin's to
function:
Queries
This section describes the additional functionality attached to Axon's query dispatching and handling logic.
QueryGateway
Several inlined methods have been introduced on the QueryGateway
to use generics instead of explicit Class
objects and ResponseType
parameters.
In some cases, Kotlin's type inference system can deduce types without explicit generic parameters. One example of this would be an explicit return parameter:
There are multiple variants of the query
method provided, for each type of ResponseType
:
query
queryOptional
queryMany
QueryUpdateEmitter
An inline emit
method has been added to QueryUpdateEmitter
to simplify emit method's call by using generics and moving the lambda predicate at the end of parameter list. This way the lambda function can be moved outside of the parentheses.
Last updated