Class PostgresqlAggregateSnapshotRepository
- java.lang.Object
-
- dk.cloudcreate.essentials.components.eventsourced.aggregates.snapshot.PostgresqlAggregateSnapshotRepository
-
- All Implemented Interfaces:
AggregateSnapshotRepository
public class PostgresqlAggregateSnapshotRepository extends Object implements AggregateSnapshotRepository
-
-
Field Summary
Fields Modifier and Type Field Description static StringDEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAME
-
Constructor Summary
Constructors Constructor Description PostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepositorythat will persistAggregateSnapshot's into theDEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAMEtable
Adding newAggregateSnapshot's when it's behind by 10 events AND Deleting All HistoricAggregateSnapshot'sPostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer, AddNewAggregateSnapshotStrategy addNewSnapshotStrategy, AggregateSnapshotDeletionStrategy snapshotDeletionStrategy)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepositorythat will persistAggregateSnapshot's into theDEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAMEtablePostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, String snapshotTableName, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepository
Adding newAggregateSnapshot's when it's behind by 10 events AND Deleting All HistoricAggregateSnapshot'sPostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, String snapshotTableName, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer, AddNewAggregateSnapshotStrategy addNewSnapshotStrategy, AggregateSnapshotDeletionStrategy snapshotDeletionStrategy)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepositoryPostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, Optional<String> snapshotTableName, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer, AddNewAggregateSnapshotStrategy addNewSnapshotStrategy, AggregateSnapshotDeletionStrategy snapshotDeletionStrategy)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepository
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <ID,AGGREGATE_IMPL_TYPE>
voidaggregateUpdated(AGGREGATE_IMPL_TYPE aggregate, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateEventStream<ID> persistedEvents)Callback from an Aggregate Repository to notify that the aggregate has been updated<AGGREGATE_IMPL_TYPE>
voiddeleteAllSnapshots(Class<AGGREGATE_IMPL_TYPE> ofAggregateImplementationType)Delete all snapshots for the given aggregate implementation type<ID,AGGREGATE_IMPL_TYPE>
voiddeleteSnapshots(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> withAggregateImplementationType)Delete all snapshots for the given aggregate instance with the given aggregate implementation type<ID,AGGREGATE_IMPL_TYPE>
voiddeleteSnapshots(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> withAggregateImplementationType, List<dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.types.EventOrder> snapshotEventOrdersToDelete)Delete all snapshots with a givenAggregateSnapshot.eventOrderOfLastIncludedEventfor the given aggregate instance, with the given aggregate implementation typeprotected Optional<dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.types.EventOrder>findMostRecentLastIncludedEventOrderFor(String serializedAggregateId, String aggregateImplType, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork uow)<ID,AGGREGATE_IMPL_TYPE>
List<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>>loadAllSnapshots(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> aggregateImplType, boolean includeSnapshotPayload)Load allAggregateSnapshot's related to the given aggregate instanceprotected <ID,AGGREGATE_IMPL_TYPE>
List<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>>loadAllSnapshots(String serializedAggregateId, String aggregateImplType, boolean includeSnapshotPayload, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork uow)<ID,AGGREGATE_IMPL_TYPE>
Optional<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>>loadSnapshot(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateType aggregateType, ID aggregateId, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.types.EventOrder withLastIncludedEventOrderLessThanOrEqualTo, Class<AGGREGATE_IMPL_TYPE> aggregateImplType)-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface dk.cloudcreate.essentials.components.eventsourced.aggregates.snapshot.AggregateSnapshotRepository
loadSnapshot
-
-
-
-
Field Detail
-
DEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAME
public static final String DEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAME
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
PostgresqlAggregateSnapshotRepository
public PostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepositorythat will persistAggregateSnapshot's into theDEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAMEtable
Adding newAggregateSnapshot's when it's behind by 10 events AND Deleting All HistoricAggregateSnapshot's- Parameters:
eventStore- the event store responsible for persisting aggregate event streamunitOfWorkFactory- unit of work factory for controlling transactionsjsonSerializer- JSON serializer that will be used to serialize Aggregate instances
-
PostgresqlAggregateSnapshotRepository
public PostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, String snapshotTableName, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepository
Adding newAggregateSnapshot's when it's behind by 10 events AND Deleting All HistoricAggregateSnapshot's- Parameters:
eventStore- the event store responsible for persisting aggregate event streamunitOfWorkFactory- unit of work factory for controlling transactionssnapshotTableName- the name of the table whereAggregateSnapshot's will be storedjsonSerializer- JSON serializer that will be used to serialize Aggregate instances
-
PostgresqlAggregateSnapshotRepository
public PostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, String snapshotTableName, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer, AddNewAggregateSnapshotStrategy addNewSnapshotStrategy, AggregateSnapshotDeletionStrategy snapshotDeletionStrategy)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepository- Parameters:
eventStore- the event store responsible for persisting aggregate event streamunitOfWorkFactory- unit of work factory for controlling transactionssnapshotTableName- the name of the table whereAggregateSnapshot's will be storedjsonSerializer- JSON serializer that will be used to serialize Aggregate instancesaddNewSnapshotStrategy- the strategy determining when a newAggregateSnapshotwill be storedsnapshotDeletionStrategy- the strategy determining when an existingAggregateSnapshotwill be deleted
-
PostgresqlAggregateSnapshotRepository
public PostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer, AddNewAggregateSnapshotStrategy addNewSnapshotStrategy, AggregateSnapshotDeletionStrategy snapshotDeletionStrategy)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepositorythat will persistAggregateSnapshot's into theDEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAMEtable- Parameters:
eventStore- the event store responsible for persisting aggregate event streamunitOfWorkFactory- unit of work factory for controlling transactionsjsonSerializer- JSON serializer that will be used to serialize Aggregate instancesaddNewSnapshotStrategy- the strategy determining when a newAggregateSnapshotwill be storedsnapshotDeletionStrategy- the strategy determining when an existingAggregateSnapshotwill be deleted
-
PostgresqlAggregateSnapshotRepository
public PostgresqlAggregateSnapshotRepository(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.ConfigurableEventStore<? extends dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.persistence.AggregateEventStreamConfiguration> eventStore, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWorkFactory<? extends dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork> unitOfWorkFactory, Optional<String> snapshotTableName, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.serializer.json.JSONEventSerializer jsonSerializer, AddNewAggregateSnapshotStrategy addNewSnapshotStrategy, AggregateSnapshotDeletionStrategy snapshotDeletionStrategy)Create a new durable Postgresql version of thePostgresqlAggregateSnapshotRepository- Parameters:
eventStore- the event store responsible for persisting aggregate event streamunitOfWorkFactory- unit of work factory for controlling transactionssnapshotTableName- Optional name of the table whereAggregateSnapshot's will be stored - ifOptional.empty()thenAggregateSnapshot's will persisted into theDEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAMEtablejsonSerializer- JSON serializer that will be used to serialize Aggregate instancesaddNewSnapshotStrategy- the strategy determining when a newAggregateSnapshotwill be storedsnapshotDeletionStrategy- the strategy determining when an existingAggregateSnapshotwill be deleted
-
-
Method Detail
-
loadSnapshot
public <ID,AGGREGATE_IMPL_TYPE> Optional<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>> loadSnapshot(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateType aggregateType, ID aggregateId, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.types.EventOrder withLastIncludedEventOrderLessThanOrEqualTo, Class<AGGREGATE_IMPL_TYPE> aggregateImplType)
- Specified by:
loadSnapshotin interfaceAggregateSnapshotRepository- Type Parameters:
ID- the aggregate ID typeAGGREGATE_IMPL_TYPE- the concrete aggregate implementation type- Parameters:
aggregateType- the aggregate type (determining the aggregate's event stream name)aggregateId- the identifier for the aggregate instancewithLastIncludedEventOrderLessThanOrEqualTo- the snapshot returned must haveAggregateSnapshot.eventOrderOfLastIncludedEventthat is less than or equal to this valueaggregateImplType- the concrete aggregate implementation type- Returns:
- the aggregate snapshot wrapped in an
Optionalif a snapshot was found, otherwiseOptional.empty()
-
aggregateUpdated
public <ID,AGGREGATE_IMPL_TYPE> void aggregateUpdated(AGGREGATE_IMPL_TYPE aggregate, dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateEventStream<ID> persistedEvents)Description copied from interface:AggregateSnapshotRepositoryCallback from an Aggregate Repository to notify that the aggregate has been updated- Specified by:
aggregateUpdatedin interfaceAggregateSnapshotRepository- Type Parameters:
ID- the aggregate ID typeAGGREGATE_IMPL_TYPE- the concrete aggregate implementation type- Parameters:
aggregate- the aggregate instance after the changes (in the form of events) has been marked as committed within the aggregatepersistedEvents- the aggregate changes (in the form of events) after they've been persisted
-
findMostRecentLastIncludedEventOrderFor
protected Optional<dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.types.EventOrder> findMostRecentLastIncludedEventOrderFor(String serializedAggregateId, String aggregateImplType, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork uow)
-
loadAllSnapshots
public <ID,AGGREGATE_IMPL_TYPE> List<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>> loadAllSnapshots(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> aggregateImplType, boolean includeSnapshotPayload)
Description copied from interface:AggregateSnapshotRepositoryLoad allAggregateSnapshot's related to the given aggregate instance- Specified by:
loadAllSnapshotsin interfaceAggregateSnapshotRepository- Type Parameters:
ID- the aggregate ID typeAGGREGATE_IMPL_TYPE- the concrete aggregate implementation type- Parameters:
aggregateType- the aggregate type (determining the aggregate's event stream name)aggregateId- the identifier for the aggregate instanceaggregateImplType- the concrete aggregate implementation typeincludeSnapshotPayload- should theAggregateSnapshot.aggregateSnapshotbe loaded?- Returns:
- list of all
AggregateSnapshot's in ascendingAggregateSnapshot.eventOrderOfLastIncludedEventorder (the oldest snapshot first) related to the given aggregate instance
-
loadAllSnapshots
protected <ID,AGGREGATE_IMPL_TYPE> List<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>> loadAllSnapshots(String serializedAggregateId, String aggregateImplType, boolean includeSnapshotPayload, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork uow)
-
deleteAllSnapshots
public <AGGREGATE_IMPL_TYPE> void deleteAllSnapshots(Class<AGGREGATE_IMPL_TYPE> ofAggregateImplementationType)
Description copied from interface:AggregateSnapshotRepositoryDelete all snapshots for the given aggregate implementation type- Specified by:
deleteAllSnapshotsin interfaceAggregateSnapshotRepository- Type Parameters:
AGGREGATE_IMPL_TYPE- the concrete aggregate implementation type- Parameters:
ofAggregateImplementationType- the concrete aggregate implementation type that we want to delete all snapshots for
-
deleteSnapshots
public <ID,AGGREGATE_IMPL_TYPE> void deleteSnapshots(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> withAggregateImplementationType)Description copied from interface:AggregateSnapshotRepositoryDelete all snapshots for the given aggregate instance with the given aggregate implementation type- Specified by:
deleteSnapshotsin interfaceAggregateSnapshotRepository- Type Parameters:
ID- the aggregate ID typeAGGREGATE_IMPL_TYPE- the concrete aggregate implementation type- Parameters:
aggregateType- the aggregate type (determining the aggregate's event stream name)aggregateId- the id of the aggregate that we want to delete all snapshots forwithAggregateImplementationType- the concrete aggregate implementation type that we want to delete all snapshots for
-
deleteSnapshots
public <ID,AGGREGATE_IMPL_TYPE> void deleteSnapshots(dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.eventstream.AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> withAggregateImplementationType, List<dk.cloudcreate.essentials.components.eventsourced.eventstore.postgresql.types.EventOrder> snapshotEventOrdersToDelete)Description copied from interface:AggregateSnapshotRepositoryDelete all snapshots with a givenAggregateSnapshot.eventOrderOfLastIncludedEventfor the given aggregate instance, with the given aggregate implementation type- Specified by:
deleteSnapshotsin interfaceAggregateSnapshotRepository- Type Parameters:
ID- the aggregate ID typeAGGREGATE_IMPL_TYPE- the concrete aggregate implementation type- Parameters:
aggregateType- the aggregate type (determining the aggregate's event stream name)aggregateId- the id of the aggregate that we want to delete all snapshots forwithAggregateImplementationType- the concrete aggregate implementation type that we want to delete all snapshots forsnapshotEventOrdersToDelete- The list ofAggregateSnapshot.eventOrderOfLastIncludedEvent's that should be deleted
-
-