Posted on March 03, 2017
Spine 0.9.0
Core Java
This version is a finalization of the framework API and most of the core features, that are scheduled for 1.0 release.
It also includes a lot of API polishing. Some of the changes are breaking, some are not.
The inner code structure (packaging, visibility of classes etc) has been modified significantly in order to follow the Onion architecture and become easier for understanding.
Below is a list of the most valuable changes and the references to the corresponding pull requests. More feature details are available upon the PR link.
- Multitenancy support. Please see
org.spine3.server.tenant
package for the details.
Client-side features:
ActorRequestFactory
is introduced as a single client-side utility to produce Commands, Queries and Topics: #431.- IDs now belong to
Command
,Event
andFailure
, not to their contexts: #450, #452. - An ability to define the custom
Command
attributes is introduced to the public API (#448). Also,Command
now has the system-only properties hidden from the public access (#455). ActorContext
is now a unified context, reflecting the properties of an environment, where aCommand
,Query
orTopic
instance is created.- Fail-fast
Command
creation is available viaValidatingBuilder
s. They are automatically generated for eachCommand
and serve to validate the field values while buildingCommand
messages. Stand
input parameters are now validated according to the Protobuf annotations set for the requests: #437.
Server-side changes:
- It is now possible to
@Subscribe
to Failures: #362, #299. FailureThrowable
API simplification: #454.- Entity lifecycle:
- Improvements to entity versioning: #346.
AggregatePart
andAggregateRoot
API improvements: #347.- Changes to
Command
dispatchers and handlers: #354, #358. - Simpler routing of commands for Process Managers: #313.
-
StorageFactory
is made more configurable for different environments. In particular, it is now easier to provide different Storage implementations for testing and production deployment cases: #289, #290.It is now possible to store some of Entity fields separately to allow the further efficient querying: #398.
CommandStore
andEventStorage
are now Repositories, based uponRecordStorage
: #394, #395.
Utilities:
StringifierRegistry
is introduced to organize and simplify string-to-object and object-to-string conversion for Entity state objects and other user-defined types: #389, #382, #383, #378, #423, #436.- Improvements to Date/Time API: #387.
Lots of less valuable changes were made as well, including performance improvements, extended configurability of the framework building blocks, more helper utilities and object factories for testing.
Version updates:
- gRPC 1.1.2 (#341).
- Gradle 3.5.
New test dependencies:
- Guava-testlib.