Releases: SpineEventEngine/core-java
1.3.0
This release includes several API improvements for the library, as well as some new features.
Notable changes:
- The new high-level client API is introduced (#1186).
- Rejection classes can now be properly subscribed to (#1193).
- Several multi-threading tweaks are applied to improve the delivery process (#1200).
- The
AggregateHistoryCorrupted
event is added. It signals to the user that the aggregate state has become invalid and the aggregate cannot handle any more incoming signals (#1199). - It's now allowed to subscribe to the same rejection type multiple times with the different causes (#1205).
- The subscription topic is now additionally validated on the client to fail fast on invalid topic creation (#1197).
- The
spine.core.Version
can now be specified in the ordering filters for queries and subscriptions (#1198). - The
BlackBoxBoundedContext
-based tests now have aDiagnosticLog
which logs all received diagnostic events with a meaningful message (#1209). - The
CannotDispatchDuplicateEvent
andCannotDispatchDuplicateCommand
now provide the type of the duplicate signal (#1209). - A lot of third-party dependencies are updated to the newer version (#1195).
1.2.0
This release includes several new features and some API improvements for the library.
Notable changes:
- The client based on Dart programming language is now available.
- The rules applied to handler methods are now strictly enforced. See #1175.
- A new
(column)
option is introduced in place of an old column API (#1184). - Several API extensions for the Delivery process (#1182).
- The entity state is now properly rolled back on rejections (#1181).
- An ability to create system request factories is added (#1177).
- Performance improvements for the
external
events dispatching (#1180). - An
EmptyContext
placeholder is introduced to easier API for messages that do not require a context (#1185).
1.1.2
1.1.0
This release brings several API enhancements as well as performance and stability improvements.
API changes
- New API for importing events from third-party systems (#1152). For that, users may represent a third-party system as a Bounded Context. A
ThirdPartyContext
publishes events submitted by the user as external events so that Spine-based Contexts may subscribe/react on them. Example:
ThirdPartyContext context = ThirdPartyContext.multitenant("GitHub Issues");
ActorContext actor = // ...
EventMessage event = IssueClosed
.newBuilder()
// ...
.vBuild();
context.emittedEvent(event, actor);
- Deprecation of
@ByField
filtering in event subscribers. Now, the subscriber parameter itself should be annotated with@Where
(#1159). - New extension points in the
Delivery
mechanism allow for fine-tuning (#1153). IntegrationBus
seized to exist. Instead, we introduce new internal components which perform the same job. Public API for SPI users was NOT changed (#1156).- Test utilities now use the latest release version of Google Truth. Minor backward compatibility issues may be expected at the users' end (#1146).
Other changes
This release brings a number of performance improvements, most notably in the System Context (#1140) and in the handler method scan process (#1147, #1148).
1.0.1
This is a performance and maintenance release of Spine core
libraries.
Changes:
1.0.0
This is the first public release of Spine core
modules.
Most notable changes:
ServerEnvironment
is now responsible for the configuration of the server-wide routines, such asStorageFactory
,TransportFactory
andDelivery
.- System Bounded Context is now configurable — #1115. It was simplified and made less intrusive — #1084.
- Entities now receive messages via
Inbox
, which supports message sharding and de-duplication in a multi-node environment — #1096. - Trace API was introduced — #1090.
- Errors during the message dispatching no longer throw exceptions. A series of system events was introduced instead — #1104.
ConstraintViolated
system event was introduced — #1081.BoundedContext
configuration was simplified. Also,BoundedContextBuilder
is now the only API to set up the context; all the duplicating API calls were removed from theBoundedContext
itself — #1108.- It is now possible to
@Command
upon external events — #1116. @Command
methods which accept events, may now ignore them— #1114.BlackBoxBoundedContext
API was extended with an ability to assertQuery
andSubscription
behavior by using the corresponding test subjects — #1124, #1126.BlackBoxBoundedContext
API is now the only way to test the applications built with Spine. The previous unit-testing framework was removed — #1110.- Entity
@Column
API marked as@Experimental
, as we can still see a room for API improvement and further changes — #1134. IntegrationBus
behavior on handling newBoundedContext
s was fixed — #1120.- Previously deprecated API was removed — #1122.
Also, we created a chat on Gitter for answering the questions on the framework use. Please feel free to join and say hi!
1.0.0-pre7
API Changes in Core Modules
@Subscribe
methods now should be package-private, notpublic
;@Apply
methods now should beprivate
, not package-private;@Assign
methods cannot returnNothing
anymore. This feature was kept in Process Managers for backward compatibility. Now, we recommend that clients create domain-specific events even if they are not to be handled;- many getter methods are renamed in order to remove the
get
andis
prefixes. This code style will be propagated to the components which are not yet affected in the nearest future; DefaultRepository
is introduced in order to avoid creating empty repository classes;- Javadoc is revised and fixed.
API Changes in Non-Core Modules
- the new
ValidatingOptionFactory
SPI allows users to configure custom Protobuf validating options; (when)
option is moved tospine/time/time_options.proto
. It is now applicable to alltime
opions which capture time, not onlygoogle.protobuf.Timestamp
;MethodFactory
allows to generate methods into specific Protobuf definitions. Generated methods are configured via themodelCompiler.methods
Gradle config;modelCompiler.interfaces
config allows to mark certain Protobuf definitions with a certain Java interface.
This version updates nearly all the dependency versions. See config/gradle/dependencies.gradle
for the details.
1.0.0-pre4
Moving closer to the public release, this pre-release brings a few improvements to the library users.
SubscriptionService
now allows to subscribe to domain events in addition to entity state updates. See #961.(enrichment)
option is removed in favor of(enrichment_for)
and(by)
options. Seebase#308
.
The Gradle version was updated to 5.2.
1.0.0-pre3
This pre-release brings many internal changes, simplifications, and development infrastructure refactoring.
Framework API Changes
- the
Sharding
and all the connected concepts are deleted [#929]; - the Model Verifier plugin now runs the command handler signature checks and fails/logs warnings on signature mismatches [#930];
BoundedContextBuilder
now facades the context components building (such asIntegrationBus
) [#929].PmSubject
class is added in order to allow testing process managers using Truth [#939];Entity
hierarchy is flattened and cleaned up [#940];- the version of Gradle is updated to
5.1.1
which affects the users of Spine Gradle plugins [#932];
Various Fixes
1.0.0-pre2
This version brings test API updates, bug fixes and performance optimizations.
Improvements in the test framework
TestClient
utility (#884).- Several features in
BlackBoxBoundedContext
(#897, #903, #904) - New factory methods in
GivenUserId
(#891).
Optimizations
- Read less data upon each Aggregate load (#892).
- Add forceful
GrpcContainer. shutdownNowAndWait ()
to reduce waiting time (#883).
Resolved issues
- Make
ProcessManager
versioned properly (#893). - Ignore
Empty
andNothing
returning values from@Command
-er handlers (#895). - Do not detect entity columns if no
@Column
annotation was explicitly set (#917). - When creating actor requests, do not require both zone offset and zone ID from clients; calculate zone offset automatically (#915).