- [chg] Java 21 support.
- [chg] Update Seed version to 3.15.0.
- [new] Support qualifiers for repositories and factories in FluentAssembler DSL.
- [new] Support
@identity
generators in composite embedded identifiers.
- [new] Shortcut to combine two specifications in the specification builder DSL.
- [fix] Accept Guice-specific
@Named
annotation as qualifier, in addition to all JSR-330 qualifiers.
- [new] FluentAssembler now has a String based argument on the DSL chain to simplify the use of
Named
Assemblers - [new] DomainEventHandler has a priority field to allow fine-grained control over execution order
- [new] Events can now be annotated with
@PriorizedEvent
, that allows an instance ofDomainEventInterceptor
to take control of event handlers that are launched (By default,PriorityEventHandlerInterceptor
is being used if not stated explicitly) - [chg]
BaseAssembler
andBaseTupleAssembler
now has a default implementation that simplifies the creation of one way assemblers - [chg] Built and tested with OpenJDK 11 (target is still 1.8).
- [chg] Updated Seed version to 3.9.1
- [fix] Fix potential resource leak in
DataManagerImpl
.
- [new] Java 9 compatibility.
- [new] Add sorting support to
BaseInMemoryRepository
. - [chg] Make
SizePicker
(specialization for page-based pagination) extendLimitPicker
. - [fix]
ComparableSpecification
and its descendant were not properly evaluating the comparison result.
- [new] Paginator can now paginate streams and iterables of arbitrary objects (not only aggregates through repositories).
- [chg] The class configuration
defaultRepository
anddefaultAssembler
are now real defaults and don't clash with code-based bindings anymore.
- [new] Add
business-migrate
module to help migration from 3.x based projects.
- [new] A default implementation of
getId()
has been added inBaseEntity
which searches for a field named "id" or annotated with@Identity
. - [new] DDD specifications have been added.
- [new] A specification builder allows to create DDD specifications with a fluent DSL.
- [new] Add SPI and base infrastructure for specification translation.
- [new] New methods in the
Repository
interface allow to work on multiple aggregates with specifications. - [new] Business framework now takes advantage of Java 8 features (notably streams and optional).
- [new]
FluentAssembler
can now assemble and merge streams of objects among other useful types (arrays, lists, sets, slices, pages and arbitrary collections). - [new] A pagination DSL injectable through the
Paginator
interface has been added. - [new] Add an in-memory default implementation of repository (useful for testing or other specific use-cases).
- [new] Annotating an implementation with
@Overriding
will allow it to override an existing similar implementation. - [new] It is now possible to specify the qualifier of the identity generator directly on the identity field.
- [chg] Extracted ModelMapper automatic assemblers to a separate add-on.
- [brk] The
@MatchingFactoryParameter
annotation has been renamed to@FactoryArgument
. - [brk] The
@MatchingEntityId
annotation has been renamed to@AggregateId
. - [brk] The
typeIndex()
method of@FactoryArgument
and@AggregateId
annotations has been renamed toaggregateIndex()
. - [brk] The
Assembler
methodsassembleDtoFromAggregate()
,assembleDtoFromAggregate()
andmergeAggregateWithDto()
have been renamed tocreateDtoFromAggregate()
,mergeAggregateIntoDto()
andmergeDtoIntoAggregate()
respectively. - [brk] The
BaseAssembler
andBaseTupleAssembler
now follow theAssembler
interface (no moredo*()
methods). - [brk] The
getEntityId()
method ofEntity
has been renamed togetId()
. - [brk] The
Repository
interface has been refactored as a collection-like interface. - [brk] The
Factory
andGenericFactory
interfaces are merged into a uniqueFactory
interface. - [brk] The
DomainObject
interface has been removed. - [brk] The old pagination API has been removed.
- [brk] Intermediate interfaces of
FluentAssembler
DSL have been renamed. - [brk] Generic events have been replaced by domain-only events.
- [brk] The interface
IdentityHandler
has been renamed toIdentityGenerator
to better reflect its responsibility. - [brk] The
source
parameter from@Identity
annotation has been removed. This is better done in class configuration. - [brk] The
handler
parameter of the@Identity
annotation has been renamedgenerator
.
- [new] It is now possible to assemble a list of DTOs to aggregates coming both from repository and factory.
- [chg] When assembling a DTO list, aggregates coming both from repository and factory are allowed by default.
- [fix] Fix transitive dependency to poms SNAPSHOT.
- [brk]
DomainEvent
class is renamedBaseDomainEvent
and implements a new interface namedDomainEvent
.
- [brk] Update to SeedStack 16.11 new configuration system.
- [brk] The class configuration property
identity.handler-qualifier
becomesidentityHandler
. - [brk] The class configuration property
default-repository
becomesdefaultRepository
. - [brk] The qualifier for
SimpleUUIDHandler
identity handler is renamed fromsimple-UUID
tosimpleUUID
. - [brk] The qualifier for
InMemorySequenceHandler
identity handler is renamed frominmemory-sequence
toinMemorySequence
. - [chg] Base classes containing implementation have been moved from the
specs
module to thecore
module.
- [fix] Delay call of
configure*()
methods inModelMapperAssembler
to allow field and method injection to occur before.
- [fix] Also bind event handler classes which ancestors implement the
EventHandler
interface
- [fix] Prevent binding of abstract classes and interfaces extending/implementing
EventHandler
- [chg] Updated the signature of the
handle()
method ofIdentityHandler
. - [fix] Avoid sending domain events multiple times when multiple handlers are registered.
- [new] Add methods
exists()
,count()
andclear()
onRepository
- [brk] The
Comparable
interface have been removed fromBaseValueObject
- [brk] Methods
do*()
onBaseRepository
have been removed. Directly implement their matching method onRepository
. - [chg] Remove
final
qualifier onequals()
andhashCode()
methods ofBaseValueObject
andBaseEntity
. - [chg] Changed the default
toString()
ofBaseValueObject
andBaseEntity
with more concise output. - [chg] The
business-web
module has been merged intobusiness-core
module (the dependency can be safely removed from your poms). - [chg]
serialVersionUID
of event classes (org.seedstack.business.domain.events
package) has been changed to 1L. - [chg] Default repositories are now also created for parent classes of aggregate roots
- [new]
BaseRangeFinder
is a persistence-agnostic base class for paginated finders. It notably replacesBaseJpaRangeFinder
from the JPA add-on.
- [brk] Remove
org.seedstack.business.api.BaseClassSpecifications
. Useorg.seedstack.seed.core.utils.BaseClassSpecifications
instead. - [brk]
business-test
module is merged intobusiness-core
module. - [brk]
business-jpa
module is merged intojpa
addon.
- [nfo] Initial Open-Source version.