Class DurableStateOnCommandWithReplyBehavior<Command,​State>


  • public abstract class DurableStateOnCommandWithReplyBehavior<Command,​State>
    extends BehaviorImpl.DeferredBehavior<Command>
    A Behavior for a persistent actor with durable storage of its state for projects built with Java 17 or newer where message handling can be done * using switch pattern match.

    Enforces replies to every received command.

    For building event sourced actors with Java versions before 17, see DurableStateBehavior

    API May Change

    • Constructor Detail

      • DurableStateOnCommandWithReplyBehavior

        public DurableStateOnCommandWithReplyBehavior​(PersistenceId persistenceId)
        Parameters:
        persistenceId - stable unique identifier for the DurableStateBehavior
      • DurableStateOnCommandWithReplyBehavior

        public DurableStateOnCommandWithReplyBehavior​(PersistenceId persistenceId,
                                                      BackoffSupervisorStrategy onPersistFailure)
        If using onPersistFailure the supervision is only around the DurableStateBehavior not any outer setup/withTimers block. If using restart any actions e.g. scheduling timers, can be done on the PreRestart signal or on the RecoveryCompleted signal.

        Parameters:
        persistenceId - stable unique identifier for the DurableStateBehavior
        onPersistFailure - BackoffSupervisionStrategy for persist failures
    • Method Detail

      • Effect

        protected final EffectFactories<State> Effect()
        Factory of effects.

        Return effects from your handlers in order to instruct persistence on how to act on the incoming message (i.e. persist state).

      • changeEventHandler

        protected ChangeEventHandler<Command,​State,​?> changeEventHandler()
        API May Change: Override this and implement the ChangeEventHandler to store additional change event when the state is updated or deleted. The event can be used in Projections.
      • durableStateStorePluginId

        public java.lang.String durableStateStorePluginId()
        Override and define the DurableStateStore plugin id that this actor should use instead of the default.
      • emptyState

        protected abstract State emptyState()
        Implement by returning the initial empty state object. This object will be passed into this behaviors handlers, until a new state replaces it.

        Also known as "zero state" or "neutral state".

      • lastSequenceNumber

        public final long lastSequenceNumber​(ActorContext<?> ctx)
        The last sequence number that was persisted, can only be called from inside the handlers of a DurableStateBehavior
      • newSignalHandlerBuilder

        protected final SignalHandlerBuilder<State> newSignalHandlerBuilder()
        Returns:
        A new, mutable signal handler builder
      • onCommand

        protected abstract ReplyEffect<State> onCommand​(State state,
                                                        Command command)
        Implement by handling incoming commands and return an Effect() to persist or signal other effects of the command handling such as stopping the behavior or others.

        Use DurableStateBehavior.newCommandHandlerBuilder() to define the command handlers.

        The command handlers are only invoked when the actor is running (i.e. not recovering). While the actor is persisting state, the incoming messages are stashed and only delivered to the handler once persisting them has completed.

      • snapshotAdapter

        public SnapshotAdapter<State> snapshotAdapter()
        Transform the state into another type before giving it to and from the store. Can be used to migrate from different state types e.g. when migration from PersistentFSM to Typed DurableStateBehavior.
      • stashCapacity

        public java.util.Optional<java.lang.Integer> stashCapacity()
        Override to define a custom stash capacity per entity. If not defined, the default akka.persistence.typed.stash-capacity will be used.
      • tag

        public java.lang.String tag()
        The tag that can be used in persistence query.