Class LazyAggregateRoot<T>

java.lang.Object
io.fluxcapacitor.javaclient.modeling.LazyAggregateRoot<T>
Type Parameters:
T - The type of the aggregate's value.
All Implemented Interfaces:
AggregateRoot<T>, Entity<T>

public class LazyAggregateRoot<T> extends Object implements AggregateRoot<T>
A lazily-loaded implementation of AggregateRoot that defers deserialization and event application until the entity value is explicitly accessed.

This implementation is typically used as a historical previous reference in ImmutableAggregateRoot when the aggregate's Aggregate.cachingDepth() has been exceeded. In such cases, only the checkpointed state is retained in memory, and the full entity state is reconstructed by replaying events from the most recent checkpoint.

LazyAggregateRoot is read-only and will throw UnsupportedOperationException for any attempt to apply updates or modify the state. It is solely intended for retrieving past states in an efficient and memory-conscious way.

Event replay occurs on demand via the get() method, which reconstructs the aggregate state by re-applying all events from the last known checkpoint until the desired sequence number or event id is reached.

See Also:
  • ImmutableAggregateRoot.asPrevious(long)
  • Constructor Details

  • Method Details

    • from

      public static <T> LazyAggregateRoot<T> from(ImmutableAggregateRoot<T> delegate)
    • withEventIndex

      public Entity<T> withEventIndex(Long index, String messageId)
      Description copied from interface: Entity
      Updates the event index and message ID of the entity and returns the updated version of the entity.
      Specified by:
      withEventIndex in interface AggregateRoot<T>
      Specified by:
      withEventIndex in interface Entity<T>
      Parameters:
      index - the event index to set for the root entity
      messageId - the message ID associated with the event
      Returns:
      the updated entity corresponding to the current entity's ID and type, or null if no such entity can be found
    • sequenceNumber

      public long sequenceNumber()
      Description copied from interface: Entity
      Retrieves the sequence number of the current entity.
      Specified by:
      sequenceNumber in interface AggregateRoot<T>
      Specified by:
      sequenceNumber in interface Entity<T>
      Returns:
      the sequence number of the root entity
    • timestamp

      public Instant timestamp()
      Description copied from interface: Entity
      Retrieves the timestamp of the entity.
      Specified by:
      timestamp in interface AggregateRoot<T>
      Specified by:
      timestamp in interface Entity<T>
      Returns:
      the timestamp as an Instant obtained from the root entity
    • previous

      public Entity<T> previous()
      Description copied from interface: Entity
      Retrieves the previous version of this entity.
      Specified by:
      previous in interface AggregateRoot<T>
      Specified by:
      previous in interface Entity<T>
      Returns:
      the previous state of the entity, or null if this is the first known version
    • get

      public T get()
      Description copied from interface: Entity
      Retrieves the current instance of the entity.
      Specified by:
      get in interface Entity<T>
      Returns:
      the current instance of the entity or null if not initialized
    • getLastCheckpoint

      protected Entity<T> getLastCheckpoint()
    • aliases

      public Collection<?> aliases()
      Description copied from interface: Entity
      Retrieves a collection of aliases associated with this entity.
      Specified by:
      aliases in interface Entity<T>
      Returns:
      a collection containing aliases of this entity, or an empty collection if no aliases are present
    • entities

      public Collection<? extends Entity<?>> entities()
      Description copied from interface: Entity
      Retrieves child entities of this entity.
      Specified by:
      entities in interface Entity<T>
      Returns:
      a collection containing child entities.
    • id

      public Object id()
      Description copied from interface: Entity
      Retrieves the unique identifier of the entity.
      Specified by:
      id in interface Entity<T>
      Returns:
      the unique identifier of the entity, or null if this entity has not been initialized yet
    • type

      public Class<T> type()
      Description copied from interface: Entity
      Retrieves the type of the entity.
      Specified by:
      type in interface Entity<T>
      Returns:
      the class type of the entity, or null if the type has not been defined
    • idProperty

      public String idProperty()
      Description copied from interface: Entity
      Retrieves the name of the property that serves as the unique identifier for the entity.
      Specified by:
      idProperty in interface Entity<T>
      Returns:
      the name of the identification property as a string
    • lastEventId

      public String lastEventId()
      Description copied from interface: Entity
      Retrieves the identifier of the last event applied to the entity hierarchy.
      Specified by:
      lastEventId in interface AggregateRoot<T>
      Specified by:
      lastEventId in interface Entity<T>
      Returns:
      the identifier of the last event as a string, or null if no events have been recorded in the entity's aggregate
    • lastEventIndex

      public Long lastEventIndex()
      Description copied from interface: Entity
      Retrieves the index of the last event applied to this entity hierarchy.
      Specified by:
      lastEventIndex in interface AggregateRoot<T>
      Specified by:
      lastEventIndex in interface Entity<T>
      Returns:
      the index of the last event as a Long, or null if no events have been recorded for the entity's aggregate
    • update

      public Entity<T> update(UnaryOperator<T> function)
      Description copied from interface: Entity
      Updates the current entity's value using the specified unary operator and returns a new entity containing the updated value.
      Specified by:
      update in interface Entity<T>
      Parameters:
      function - the unary operator to apply to the current entity's value
      Returns:
      a new entity containing the updated value after applying the function
    • apply

      public Entity<T> apply(Message eventMessage)
      Description copied from interface: Entity
      Applies the given message to the entity.
      Specified by:
      apply in interface Entity<T>
      Parameters:
      eventMessage - the message representing the event to be applied
      Returns:
      the updated or newly created Entity of type T
    • commit

      public Entity<T> commit()
      Description copied from interface: Entity
      Commits the current state of the entity, persisting any changes made to it. This method ensures that the modifications are saved. Typically, it is unnecessary to invoke this manually as it is automatically invoked after the current handler or consumer batch has completed.
      Specified by:
      commit in interface Entity<T>
      Returns:
      The updated entity after the commit operation is successfully completed.
    • withType

      public Entity<T> withType(Class<T> type)
      Description copied from interface: Entity
      Sets the type of the entity to the specified class and returns the updated entity.
      Specified by:
      withType in interface Entity<T>
      Parameters:
      type - the class representing the type to be set for the entity
      Returns:
      the updated entity with the specified type
    • withSequenceNumber

      public Entity<T> withSequenceNumber(long sequenceNumber)
      Description copied from interface: Entity
      Returns an updated entity based on this with the specified sequence number.
      Specified by:
      withSequenceNumber in interface AggregateRoot<T>
      Specified by:
      withSequenceNumber in interface Entity<T>
      Parameters:
      sequenceNumber - the sequence number to assign to the entity
      Returns:
      the updated entity with the specified sequence number, or null if the entity could not be found in the entity hierarchy
    • assertLegal

      public <E extends Exception> Entity<T> assertLegal(Object update) throws E
      Description copied from interface: Entity
      Verifies that the provided update is legal given the current state of the aggregate. If so, the entity is returned; otherwise, it throws an appropriate exception.
      Specified by:
      assertLegal in interface Entity<T>
      Type Parameters:
      E - the type of exception expected if the update is not legal
      Parameters:
      update - the update to be validated for compliance with the required rules
      Returns:
      the entity if the update is legal
      Throws:
      E - if the update fails to meet legal requirements