Skip to content

Releases: SpineEventEngine/core-java

1.3.0

17 Dec 21:13
3759f2a
Compare
Choose a tag to compare

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 a DiagnosticLog which logs all received diagnostic events with a meaningful message (#1209).
  • The CannotDispatchDuplicateEvent and CannotDispatchDuplicateCommand 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

08 Nov 13:39
0d691e2
Compare
Choose a tag to compare

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

26 Sep 13:38
ea2b41a
Compare
Choose a tag to compare

This release of Spine core libraries includes:

  • Several API improvements for entity repositories - #1172.
  • The documentation improvements for the @React annotation - #1171.

1.1.0

10 Sep 15:02
06a53df
Compare
Choose a tag to compare

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

08 Aug 19:02
49e7ea1
Compare
Choose a tag to compare

This is a performance and maintenance release of Spine core libraries.

Changes:

  • The performance of AggregateRepository.index() was improved by delegating to an Aggregate mirror — #1138.
  • The subscription registry synchronization was improved. Now the creation of the repetitive subscriptions to the same Target behaves as expected — #1139.

1.0.0

05 Aug 15:33
e6c0ba0
Compare
Choose a tag to compare

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 as StorageFactory, TransportFactory and Delivery.
  • 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 the BoundedContext 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 assert Query and Subscription 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 new BoundedContexts 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

03 May 09:13
f815bb9
Compare
Choose a tag to compare
1.0.0-pre7 Pre-release
Pre-release

API Changes in Core Modules

  • @Subscribe methods now should be package-private, not public;
  • @Apply methods now should be private, not package-private;
  • @Assign methods cannot return Nothing 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 and is 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 to spine/time/time_options.proto. It is now applicable to all time opions which capture time, not only google.protobuf.Timestamp;
  • MethodFactory allows to generate methods into specific Protobuf definitions. Generated methods are configured via the modelCompiler.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

08 Feb 15:38
7a0dd99
Compare
Choose a tag to compare
1.0.0-pre4 Pre-release
Pre-release

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. See base#308.

The Gradle version was updated to 5.2.

1.0.0-pre3

16 Jan 12:33
a6f46e5
Compare
Choose a tag to compare
1.0.0-pre3 Pre-release
Pre-release

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 as IntegrationBus) [#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

  • @VisibleForTesting annotation on ProcessManager.getBuilder() method is properly documented [#913];
  • internal API clean up [#933];
  • make the RecordBasedRepository able to find archived or/and deleted entities [#939].

1.0.0-pre2

20 Dec 14:17
6bc53d7
Compare
Choose a tag to compare
1.0.0-pre2 Pre-release
Pre-release

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 and Nothing 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).