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.tenantpackage for the details.
Client-side features:
ActorRequestFactoryis introduced as a single client-side utility to produce Commands, Queries and Topics: #431.- IDs now belong to
Command,EventandFailure, not to their contexts: #450, #452. - An ability to define the custom
Commandattributes is introduced to the public API (#448). Also,Commandnow has the system-only properties hidden from the public access (#455). ActorContextis now a unified context, reflecting the properties of an environment, where aCommand,QueryorTopicinstance is created.- Fail-fast
Commandcreation is available viaValidatingBuilders. They are automatically generated for eachCommandand serve to validate the field values while buildingCommandmessages. Standinput parameters are now validated according to the Protobuf annotations set for the requests: #437.
Server-side changes:
- It is now possible to
@Subscribeto Failures: #362, #299. FailureThrowableAPI simplification: #454.- Entity lifecycle:
- Improvements to entity versioning: #346.
AggregatePartandAggregateRootAPI improvements: #347.- Changes to
Commanddispatchers and handlers: #354, #358. - Simpler routing of commands for Process Managers: #313.
-
StorageFactoryis 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.
CommandStoreandEventStorageare now Repositories, based uponRecordStorage: #394, #395.
Utilities:
StringifierRegistryis 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.