|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.axonframework.repository.AbstractRepository<T> org.axonframework.repository.LockingRepository<T> org.axonframework.eventsourcing.EventSourcingRepository<T>
T
- The type of aggregate this repository storespublic class EventSourcingRepository<T extends EventSourcedAggregateRoot>
Abstract repository implementation that allows easy implementation of an Event Sourcing mechanism. It will
automatically publish new events to the given EventBus
and delegate event
storage to the provided EventStore
.
EventSourcedAggregateRoot
,
AbstractEventSourcedAggregateRoot
,
AbstractAnnotatedAggregateRoot
,
EventStore
Constructor Summary | |
---|---|
EventSourcingRepository(AggregateFactory<T> aggregateFactory,
EventStore eventStore)
Initializes a repository with the default locking strategy, using the given aggregateFactory to
create new aggregate instances. |
|
EventSourcingRepository(AggregateFactory<T> aggregateFactory,
EventStore eventStore,
LockManager lockManager)
Initialize a repository with the given locking strategy. |
|
EventSourcingRepository(Class<T> aggregateType,
EventStore eventStore)
Initializes a repository with the default locking strategy, using a GenericAggregateFactory to create new aggregate instances of given aggregateType . |
|
EventSourcingRepository(Class<T> aggregateType,
EventStore eventStore,
LockManager lockManager)
Initialize a repository with the given locking strategy, using a GenericAggregateFactory to create new aggregate instances. |
Method Summary | |
---|---|
protected void |
doDeleteWithLock(T aggregate)
Delegates to doSaveWithLock(EventSourcedAggregateRoot) , as Event Sourcing generally doesn't delete
aggregates (not their events). |
protected T |
doLoad(Object aggregateIdentifier,
Long expectedVersion)
Perform the actual loading of an aggregate. |
protected void |
doSaveWithLock(T aggregate)
Perform the actual saving of the aggregate. |
AggregateFactory<T> |
getAggregateFactory()
Returns the factory used by this repository. |
String |
getTypeIdentifier()
Return the type identifier belonging to the AggregateFactory of this repository. |
protected void |
resolveConflicts(T aggregate,
DomainEventStream unseenEvents)
Resolve (potential) conflicts for the given aggregate , where given unseenEvents may
have been concurrently applied. |
void |
setConflictResolver(ConflictResolver conflictResolver)
Sets the conflict resolver to use for this repository. |
void |
setEventStreamDecorators(List<? extends EventStreamDecorator> eventProcessors)
Sets the Event Stream Decorators that will process the event in the DomainEventStream when read, or written to the event store. |
void |
setSnapshotterTrigger(SnapshotterTrigger snapshotterTrigger)
Sets the snapshotter trigger for this repository. |
protected void |
validateOnLoad(T aggregate,
Long expectedVersion)
Checks the aggregate for concurrent changes. |
Methods inherited from class org.axonframework.repository.LockingRepository |
---|
add, doDelete, doSave, load |
Methods inherited from class org.axonframework.repository.AbstractRepository |
---|
getAggregateType, load, postDelete, postSave, setEventBus |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public EventSourcingRepository(Class<T> aggregateType, EventStore eventStore)
aggregateType
.
aggregateType
- The type of aggregate stored in this repositoryeventStore
- The event store that holds the event streams for this repositoryLockingRepository.LockingRepository(Class)
public EventSourcingRepository(AggregateFactory<T> aggregateFactory, EventStore eventStore)
aggregateFactory
to
create new aggregate instances.
aggregateFactory
- The factory for new aggregate instanceseventStore
- The event store that holds the event streams for this repositoryLockingRepository.LockingRepository(Class)
public EventSourcingRepository(AggregateFactory<T> aggregateFactory, EventStore eventStore, LockManager lockManager)
aggregateFactory
- The factory for new aggregate instanceseventStore
- The event store that holds the event streams for this repositorylockManager
- the locking strategy to apply to this repositorypublic EventSourcingRepository(Class<T> aggregateType, EventStore eventStore, LockManager lockManager)
aggregateType
- The type of aggregate to store in this repositoryeventStore
- The event store that holds the event streams for this repositorylockManager
- the locking strategy to apply to thisMethod Detail |
---|
protected void doSaveWithLock(T aggregate)
doSaveWithLock
in class LockingRepository<T extends EventSourcedAggregateRoot>
aggregate
- the aggregate to storeprotected void doDeleteWithLock(T aggregate)
doSaveWithLock(EventSourcedAggregateRoot)
, as Event Sourcing generally doesn't delete
aggregates (not their events).
This method may be safely overridden for special cases that do require deleting an Aggregate's Events.
doDeleteWithLock
in class LockingRepository<T extends EventSourcedAggregateRoot>
aggregate
- the aggregate to deleteprotected T doLoad(Object aggregateIdentifier, Long expectedVersion)
doLoad
in class LockingRepository<T extends EventSourcedAggregateRoot>
aggregateIdentifier
- the identifier of the aggregate to loadexpectedVersion
- The expected version of the loaded aggregate
AggregateDeletedException
- in case an aggregate existed in the past, but has been deleted
AggregateNotFoundException
- when an aggregate with the given identifier does not existpublic AggregateFactory<T> getAggregateFactory()
protected void resolveConflicts(T aggregate, DomainEventStream unseenEvents)
aggregate
, where given unseenEvents
may
have been concurrently applied.
aggregate
- The aggregate containing the potential conflictsunseenEvents
- The events that have been concurrently appliedpublic String getTypeIdentifier()
protected void validateOnLoad(T aggregate, Long expectedVersion)
ConflictingModificationException
when conflicting changes have been
detected.
This implementation throws a ConflictingAggregateVersionException
if the expected version is not null
and the version number of the aggregate does not match the expected version
This implementation will do nothing if a conflict resolver (See setConflictResolver(ConflictResolver)
is
set. Otherwise, it will call super.validateOnLoad(...)
.
validateOnLoad
in class AbstractRepository<T extends EventSourcedAggregateRoot>
aggregate
- The loaded aggregateexpectedVersion
- The expected version of the aggregatepublic void setEventStreamDecorators(List<? extends EventStreamDecorator> eventProcessors)
eventProcessors
- The processors to that will process events in the DomainEventStreampublic void setSnapshotterTrigger(SnapshotterTrigger snapshotterTrigger)
snapshotterTrigger
- the snapshotter trigger for this repository.public void setConflictResolver(ConflictResolver conflictResolver)
null
), the repository will
throw an exception if any unexpected changes appear in loaded aggregates.
conflictResolver
- The conflict resolver to use for this repository
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |