T - a generic specifying the Aggregate type contained in this Repository implementationpublic static class EventSourcingRepository.Builder<T> extends LockingRepository.Builder<T>
EventSourcingRepository. Can also be used to instantiate a
CachingEventSourcingRepository. This Builder will check whether a Cache is provided. If this
holds, the build() function returns a CachingEventSourcingRepository instead of an
EventSourcingRepository.
The LockFactory is defaulted to an PessimisticLockFactory, the
SpanFactory is defaulted to a NoOpSpanFactory and the
SnapshotTriggerDefinition to a NoSnapshotTriggerDefinition implementation. A goal of this Builder
goal is to create an AggregateModel specifying generic T as the aggregate type to be stored. All
aggregates in this repository must be instanceOf this aggregate type. To instantiate this AggregateModel,
either an AggregateModel can be provided directly or an aggregateType of type Class can
be used. The latter will internally resolve to an AggregateModel. Thus, either the AggregateModel or the
aggregateType should be provided. The same criteria holds for the AggregateFactory. Either the
AggregateFactory can be set directly or it will be instantiated internally based on the aggregateType.
Hence, one of both is a hard requirement.
Additionally, the EventStore is a hard requirement and as such should be provided.
| Modifier and Type | Field and Description |
|---|---|
protected Cache |
cache |
protected EventStore |
eventStore |
protected Predicate<? super DomainEventMessage<?>> |
eventStreamFilter |
protected RepositoryProvider |
repositoryProvider |
protected SnapshotTriggerDefinition |
snapshotTriggerDefinition |
aggregateType, subtypes| Modifier | Constructor and Description |
|---|---|
protected |
Builder(Class<T> aggregateType)
Creates a builder for a Repository for given
aggregateType. |
| Modifier and Type | Method and Description |
|---|---|
EventSourcingRepository.Builder<T> |
aggregateFactory(AggregateFactory<T> aggregateFactory)
Sets the
AggregateFactory used to create new Aggregate instances. |
EventSourcingRepository.Builder<T> |
aggregateModel(AggregateModel<T> aggregateModel)
Sets the
AggregateModel of generic type T, describing the structure of the aggregate this
Repository will store. |
<R extends EventSourcingRepository<T>> |
build()
Initializes a
EventSourcingRepository or CachingEventSourcingRepository as specified through
this Builder. |
EventSourcingRepository.Builder<T> |
cache(Cache cache)
Sets the
Cache which services repositories for specific aggregate types. |
EventSourcingRepository.Builder<T> |
eventStore(EventStore eventStore)
Sets the
EventStore that holds the event stream this repository needs to event source an Aggregate. |
EventSourcingRepository.Builder<T> |
eventStreamFilter(Predicate<? super DomainEventMessage<?>> filter)
Sets the
Predicate used to filter events when reading from the EventStore. |
EventSourcingRepository.Builder<T> |
filterByAggregateType()
Configures a filter that rejects events with a different Aggregate type than the one specified by this
Repository's
AggregateModel. |
EventSourcingRepository.Builder<T> |
handlerDefinition(HandlerDefinition handlerDefinition)
Sets the
HandlerDefinition used to create concrete handlers for the given aggregateType. |
EventSourcingRepository.Builder<T> |
lockFactory(LockFactory lockFactory)
Sets the
LockFactory used to lock an aggregate. |
EventSourcingRepository.Builder<T> |
parameterResolverFactory(ParameterResolverFactory parameterResolverFactory)
Sets the
ParameterResolverFactory used to resolve parameters for annotated handlers contained in the
Aggregate. |
EventSourcingRepository.Builder<T> |
repositoryProvider(RepositoryProvider repositoryProvider)
Sets the
RepositoryProvider which services repositories for specific aggregate types. |
EventSourcingRepository.Builder<T> |
snapshotTriggerDefinition(SnapshotTriggerDefinition snapshotTriggerDefinition)
Sets the
SnapshotTriggerDefinition specifying when to trigger a snapshot for an Aggregate contained
in this repository. |
EventSourcingRepository.Builder<T> |
spanFactory(SpanFactory spanFactory)
Sets the
SpanFactory implementation to use for providing tracing capabilities. |
EventSourcingRepository.Builder<T> |
subtype(Class<? extends T> subtype)
Sets a subtype of the
aggregate type represented by this Repository. |
EventSourcingRepository.Builder<T> |
subtypes(Set<Class<? extends T>> subtypes)
Sets the subtypes of the
aggregate type represented by this Repository. |
protected void |
validate()
Validates whether the fields contained in this Builder are set accordingly.
|
buildAggregateModelprotected EventStore eventStore
protected SnapshotTriggerDefinition snapshotTriggerDefinition
protected RepositoryProvider repositoryProvider
protected Cache cache
protected Predicate<? super DomainEventMessage<?>> eventStreamFilter
protected Builder(Class<T> aggregateType)
aggregateType.aggregateType - the aggregateType specifying the type of aggregate this Repository will
storepublic EventSourcingRepository.Builder<T> parameterResolverFactory(@Nonnull ParameterResolverFactory parameterResolverFactory)
AbstractRepository.BuilderParameterResolverFactory used to resolve parameters for annotated handlers contained in the
Aggregate. Only used if the aggregateType approach is selected to create an AggregateModel.parameterResolverFactory in class LockingRepository.Builder<T>parameterResolverFactory - a ParameterResolverFactory used to resolve parameters for annotated
handlers contained in the Aggregatepublic EventSourcingRepository.Builder<T> handlerDefinition(@Nonnull HandlerDefinition handlerDefinition)
AbstractRepository.BuilderHandlerDefinition used to create concrete handlers for the given aggregateType. Only
used if the aggregateType approach is selected to create an AggregateModel.handlerDefinition in class LockingRepository.Builder<T>handlerDefinition - a HandlerDefinition used to create concrete handlers for the given aggregateType.public EventSourcingRepository.Builder<T> aggregateModel(@Nonnull AggregateModel<T> aggregateModel)
AbstractRepository.BuilderAggregateModel of generic type T, describing the structure of the aggregate this
Repository will store.aggregateModel in class LockingRepository.Builder<T>aggregateModel - the AggregateModel of generic type T of the aggregate this Repository will storepublic EventSourcingRepository.Builder<T> lockFactory(LockFactory lockFactory)
LockFactory used to lock an aggregate. Defaults to a pessimistic locking strategy,
implemented in the PessimisticLockFactory.
If this Builder is used to instantiate a CachingEventSourcingRepository, do note that an optimistic
locking strategy is not compatible with a caching approach.lockFactory in class LockingRepository.Builder<T>lockFactory - a LockFactory used to lock an aggregatepublic EventSourcingRepository.Builder<T> subtypes(@Nonnull Set<Class<? extends T>> subtypes)
AbstractRepository.Builderaggregate type represented by this Repository.
Defining subtypes indicates this Repository supports polymorphic aggregate structure.
Only used if the aggregate model is not explicitly set. Defaults to
an empty Set.
subtypes in class LockingRepository.Builder<T>subtypes - The subtypes of the aggregate type represented by this
Repository.public EventSourcingRepository.Builder<T> subtype(@Nonnull Class<? extends T> subtype)
AbstractRepository.Builderaggregate type represented by this Repository.
Defining a subtype indicates this Repository supports a polymorphic aggregate structure.
Only used if the aggregate model is not explicitly set.
subtype in class LockingRepository.Builder<T>subtype - A subtypes of the aggregate type represented by this
Repository.public EventSourcingRepository.Builder<T> spanFactory(SpanFactory spanFactory)
AbstractRepository.BuilderSpanFactory implementation to use for providing tracing capabilities. Defaults to a
NoOpSpanFactory by default, which provides no tracing capabilities.spanFactory in class LockingRepository.Builder<T>spanFactory - The SpanFactory implementationpublic EventSourcingRepository.Builder<T> eventStore(EventStore eventStore)
EventStore that holds the event stream this repository needs to event source an Aggregate.eventStore - an EventStore that holds the event stream this repository needs to event source
an Aggregatepublic EventSourcingRepository.Builder<T> snapshotTriggerDefinition(SnapshotTriggerDefinition snapshotTriggerDefinition)
SnapshotTriggerDefinition specifying when to trigger a snapshot for an Aggregate contained
in this repository.snapshotTriggerDefinition - a SnapshotTriggerDefinition specifying when to trigger a snapshot
for an Aggregate contained in this repositorypublic EventSourcingRepository.Builder<T> aggregateFactory(AggregateFactory<T> aggregateFactory)
AggregateFactory used to create new Aggregate instances.aggregateFactory - the AggregateFactory used to create new Aggregate instancespublic EventSourcingRepository.Builder<T> repositoryProvider(RepositoryProvider repositoryProvider)
RepositoryProvider which services repositories for specific aggregate types.repositoryProvider - a RepositoryProvider servicing repositories for specific aggregate typespublic EventSourcingRepository.Builder<T> cache(Cache cache)
Cache which services repositories for specific aggregate types.cache - a Cache servicing repositories for specific aggregate typespublic EventSourcingRepository.Builder<T> eventStreamFilter(Predicate<? super DomainEventMessage<?>> filter)
Predicate used to filter events when reading from the EventStore. By default, all events
with the Aggregate identifier passed to EventSourcingRepository.readEvents(String) are returned.
Calls to filterByAggregateType() will overwrite this configuration and vice versa.filter - a Predicate that may return false to discard events.public EventSourcingRepository.Builder<T> filterByAggregateType()
AggregateModel. This may be used to enable multiple Aggregate types to share overlapping
Aggregate identifiers. Calls to eventStreamFilter(Predicate) will overwrite this configuration and
vice versa.
If the caller supplies an explicit AggregateModel to this Builder, that must be done before
calling this method.
public <R extends EventSourcingRepository<T>> R build()
EventSourcingRepository or CachingEventSourcingRepository as specified through
this Builder. Will return a CachingEventSourcingRepository if cache(Cache) has been set. Otherwise
builds a regular EventSourcingRepositoryR - a generic extending EventSourcingRepository, so allowing both an EventSourcingRepository
and CachingEventSourcingRepository return typeEventSourcingRepository or CachingEventSourcingRepository (if cache(Cache)
has been set) as specified through this Builderprotected void validate()
AbstractRepository.Buildervalidate in class AbstractRepository.Builder<T>Copyright © 2010–2023. All rights reserved.