ProjectionRepository

public abstract class ProjectionRepository<I, P extends Projection<I, S, ? extends Object>, S extends EntityState> extends EventDispatchingRepository<I, E, S>

Abstract base for repositories managing Projections.

Provides an API for the entity catch-up. During this process, the framework re-builds the states of all or the selected projection instances by replaying the historical events from the EventStore of its Bounded Context. The catch-up process is fully automated and may be scaled across instances.

To start the catch-up, one should call a corresponding method (see below).

    TaskViewRepository repository = new TaskViewRepository();

    BoundedContextBuilder builder = BoundedContext.singleTenant("Tasks")
                                                  .add(repository)
                                                  .build();
    // ...

    //Start the catch-up when needed:
    Timestamp replayHistorySince = ...
    repository.catchUp(replayHistorySince, ImmutableSet.of(outdatedTaskId, anotherOne));

All the live events dispatched to the entities-under-catch-up are not lost. They are preserved and dispatched to the projections in a proper historical order.

After the catch-up is completed, the framework automatically switches back to the propagation of the live events.

Parameters

<I>

the type of IDs of projections

<P>

the type of projections

<S>

the type of projection state messages

Inheritors

Constructors

Link copied to clipboard
public void ProjectionRepository()

Functions

Link copied to clipboard
public final boolean canDispatch(EventEnvelope event)
Checks if this dispatcher can dispatch the given message.
Link copied to clipboard
public CatchUpId catchUp(Timestamp since, Set<I> ids)
Repeats the dispatching of the events from the event log to the requested entities since the specified time.
Link copied to clipboard
public CatchUpId catchUpAll(Timestamp since)
Starts the catch-up of all entities in this repository.
Link copied to clipboard
public void close()
Closes the repository by closing the underlying storage.
Link copied to clipboard
public P create(I id)
Create a new entity instance with its default state.
Link copied to clipboard
protected final ProjectionStorage<I> createStorage()
Creates the storage for this repository.
Link copied to clipboard
protected final DispatchOutcome dispatchTo(Set<I> ids, EventEnvelope event)
Dispatches the given event to entities with the given identifiers, and returns the dispatch outcome.
Link copied to clipboard
public final ImmutableSet<EventClass> domesticEventClasses()
Obtains classes of domestic events processed by this dispatcher.
Link copied to clipboard
public final ImmutableSet<EventClass> externalEventClasses()
Obtains classes of external events processed by this dispatcher.
Link copied to clipboard
protected final P findOrCreate(I id)
Loads an entity by the passed ID or creates a new one, if the entity was not found.
Link copied to clipboard
protected TypeUrl inboxStateType()
Returns a TypeUrl under which the entities of this repository will register their Inboxes.
Link copied to clipboard
protected boolean isCatchUpEnabled()
Tells whether the catch-up feature is enabled for this repository.
Link copied to clipboard
public final ImmutableSet<EventClass> messageClasses()
Obtains a set of message classes that can be processed by this dispatcher.
Link copied to clipboard
protected final RecordStorage<I> recordStorage()
Ensures that the repository has the storage.
Link copied to clipboard
public void registerWith(BoundedContext context)
Initializes the repository.
Link copied to clipboard
protected void setupEventRouting(EventRouting<I> routing)
A callback for derived repository classes to customize routing schema for events.
Link copied to clipboard
protected void setupStateRouting(StateUpdateRouting<I> routing)
A callback for derived repository classes to customize routing schema for delivering updated state to subscribed entities, if the default schema does not satisfy the routing needs.
Link copied to clipboard
protected final Stand stand()
Obtains the Stand from the BoundedContext of this repository.
Link copied to clipboard
public final void store(P entity)
Stores the passed object.
Link copied to clipboard
protected final ProjectionClass<P> toModelClass(Class<P> cls)
Obtains a model class for the passed entity class value.

Inherited functions

Link copied to clipboard
public final void applyMigration<T extends TransactionalEntity<I, S, ? extends Object>>(I id, Migration<I, T, S> migration)
Applies a given Migration to an entity with the given ID.
public final void applyMigration<T extends TransactionalEntity<I, S, ? extends Object>>(Set<I> ids, Migration<I, T, S> migration)
Applies a Migration to several entities in batch.
Link copied to clipboard
public void checkNotRegistered()
Verifies that this instance is NOT registered yet.
Link copied to clipboard
public void checkOpen()
Ensures that the object is open.
Link copied to clipboard
public void checkRegistered()
Verifies that this instance is already registered.
Link copied to clipboard
protected static S checkStorage<S extends AutoCloseable>(S storage)
Ensures that the storage is not null.
Link copied to clipboard
public abstract void close()
Link copied to clipboard
protected final BoundedContext context()
Obtains the BoundedContext to which this repository belongs.
Link copied to clipboard
protected abstract Storage<I, ? extends Object, ? extends Object> createStorage()
Creates the storage for this repository.
Link copied to clipboard
Obtains StorageFactory associated with the ServerEnvironment for creating standard storages.
Link copied to clipboard
public abstract DispatchOutcome dispatch(E envelope)
Dispatches the message contained in the passed envelope and returns the outcome.
public final DispatchOutcome dispatch(EventEnvelope event)
Dispatches the event to the corresponding entities.
Link copied to clipboard
public boolean dispatchesEvents()
Verifies if this instance dispatches at least one event.
Link copied to clipboard
public boolean dispatchesExternalEvents()
Verifies if this instance dispatches at least one external event.
Link copied to clipboard
public final Class<E> entityClass()
Returns the class of entities managed by this repository.
Link copied to clipboard
Obtains EntityFactory associated with this repository.
Link copied to clipboard
Obtains model class for the entities managed by this repository.
Link copied to clipboard
public final TypeUrl entityStateType()
Obtains the TypeUrl for the state objects wrapped by entities managed by this repository.
Link copied to clipboard
public ImmutableSet<EventClass> eventClasses()
Obtains classes of all events processed by this dispatcher.
Link copied to clipboard
Creates an EventFilter for this repository.
Link copied to clipboard
public Optional<E> find(I id)
Finds an entity with the passed ID.
public Iterator<E> find(TargetFilters filters, ResponseFormat format)
Finds the entities passing the given filters and applies the given FieldMask to the results.
Link copied to clipboard
public Optional<E> findActive(I id)
Finds an entity with the passed ID even if the entity is active.
Link copied to clipboard
public Iterator<EntityRecord> findRecords(TargetFilters filters, ResponseFormat format)
Obtains iterator over entity records matching the passed filters.
Link copied to clipboard
protected final boolean hasContext()
Verifies whether the repository is registered with a BoundedContext.
Link copied to clipboard
public final Class<I> idClass()
Returns the class of IDs used by this repository.
Link copied to clipboard
public Iterator<I> index()
Returns an iterator over the identifiers of all the entities managed by this repository.
Link copied to clipboard
public final boolean isOpen()
Verifies if the repository is open.
Link copied to clipboard
public boolean isRegistered()
Tells if the repository is registered in a BoundedContext.
Link copied to clipboard
protected boolean isTypeSupplier()
Tells if this repository should be registered as a type supplier with a Stand of the BoundedContext to which this repository belongs.
Link copied to clipboard
public Iterator<E> iterator(Predicate<E> filter)
Returns an iterator over the entities managed by the repository that match the passed filter.
Link copied to clipboard
Obtains an instance of EntityLifecycle for the entity with the given ID.
Link copied to clipboard
public Iterator<E> loadAll(ResponseFormat format)

public Iterator<E> loadAll(Iterable<I> ids, FieldMask fieldMask)
Loads all the entities in this repository with IDs, contained within the passed ids values.
Link copied to clipboard
public Iterator<EntityRecord> loadAllRecords(ResponseFormat format)
Obtains iterator over all present entity records.
Link copied to clipboard
public void onRegistered()
The callback is invoked by a BoundedContext when adding the repository.
Link copied to clipboard
protected void onRoutingFailed(SignalEnvelope<? extends Object, ? extends Object, ? extends Object> envelope, Throwable cause)
A callback invoked when an exception is thrown from message routing.
Link copied to clipboard
protected final void open()
Initializes the storage of the repository.
Link copied to clipboard
protected Set<I> route(EventEnvelope event)
Determines the targets of the given event.
protected final Optional<R> route<M extends Message, C extends MessageContext, R>(Route<M, C, R> routing, SignalEnvelope<? extends Object, ? extends Object, C> envelope)
Link copied to clipboard
protected final Storage<I, ? extends Object, ? extends Object> storage()
Returns the storage assigned to this repository.
Link copied to clipboard
public final boolean storageAssigned()
Returns true if the storage is assigned, false otherwise.
Link copied to clipboard
protected final StorageConverter<I, E, S> storageConverter()
Obtains StorageConverter associated with this repository.
Link copied to clipboard
public void store(Collection<E> entities)
Stores Entities in bulk.
protected abstract void store(E obj)
Stores the passed object.
Link copied to clipboard
protected E toEntity(EntityRecord record)
Converts the passed record into an entity.