Class UntypedPersistentActor

  • All Implemented Interfaces:
    Actor, Stash, StashFactory, StashSupport, UnrestrictedStash, RequiresMessageQueue<DequeBasedMessageQueueSemantics>, Eventsourced, PersistenceIdentity, PersistenceRecovery, PersistenceStash, Snapshotter
    Direct Known Subclasses:
    UntypedPersistentActorWithAtLeastOnceDelivery

    public abstract class UntypedPersistentActor
    extends UntypedActor
    implements Eventsourced, PersistenceIdentity
    Deprecated.
    Use AbstractPersistentActor instead of UntypedPersistentActor. Since 2.5.0.
    Java API: asynchronously persists event. On successful persistence, handler is called with the persisted event. It is guaranteed that no new commands will be received by a persistent actor between a call to persist and the execution of its handler. This also holds for multiple persist calls per received command. Internally, this is achieved by stashing new commands and unstashing them when the event has been persisted and handled. The stash used for that is an internal stash which doesn't interfere with the inherited user stash.

    An event handler may close over persistent actor state and modify it. The getSender() of a persisted event is the sender of the corresponding command. This means that one can reply to a command sender within an event handler.

    Within an event handler, applications usually update persistent actor state using persisted event data, notify listeners and reply to command senders.

    If persistence of an event fails, Eventsourced.onPersistFailure(java.lang.Throwable, java.lang.Object, long) will be invoked and the actor will unconditionally be stopped. The reason that it cannot resume when persist fails is that it is unknown if the event was actually persisted or not, and therefore it is in an inconsistent state. Restarting on persistent failures will most likely fail anyway, since the journal is probably unavailable. It is better to stop the actor and after a back-off timeout start it again.

    param: event event to be persisted. param: handler handler for each persisted event

    • Constructor Detail

      • UntypedPersistentActor

        public UntypedPersistentActor()
        Deprecated.
    • Method Detail

      • defer

        public <A> void defer​(A event,
                              Procedure<A> handler)
        Deprecated.
        Defer the handler execution until all pending handlers have been executed. It is guaranteed that no new commands will be received by a persistent actor between a call to defer and the execution of its handler. Allows to define logic within the actor, which will respect the invocation-order-guarantee in respect to persistAsync or persist calls. That is, if persistAsync or persist was invoked before defer, the corresponding handlers will be invoked in the same order as they were registered in.

        This call will NOT result in event being persisted, use persist or persistAsync instead if the given event should possible to replay.

        If there are no pending persist handler calls, the handler will be called immediately.

        If persistence of an earlier event fails, the persistent actor will stop, and the handler will not be run.

        Parameters:
        event - event to be handled in the future, when preceding persist operations have been processes
        handler - handler for the given event
      • deferAsync

        public <A> void deferAsync​(A event,
                                   Procedure<A> handler)
        Deprecated.
        Defer the handler execution until all pending handlers have been executed. Allows to define logic within the actor, which will respect the invocation-order-guarantee in respect to persistAsync or persist calls. That is, if persistAsync or persist was invoked before deferAsync, the corresponding handlers will be invoked in the same order as they were registered in.

        This call will NOT result in event being persisted, please use persist or persistAsync, if the given event should possible to replay.

        If there are no pending persist handler calls, the handler will be called immediately.

        If persistence of an earlier event fails, the persistent actor will stop, and the handler will not be run.

        Parameters:
        event - event to be handled in the future, when preceding persist operations have been processes
        handler - handler for the given event
      • onReceive

        public final void onReceive​(java.lang.Object message)
        Deprecated.
        Specified by:
        onReceive in class UntypedActor
      • onReceiveCommand

        public abstract void onReceiveCommand​(java.lang.Object msg)
                                       throws java.lang.Throwable
        Deprecated.
        Java API: command handler. Typically validates commands against current state (and/or by communication with other actors). On successful validation, one or more events are derived from a command and these events are then persisted by calling persist.
        Parameters:
        msg - (undocumented)
        Throws:
        java.lang.Throwable
      • onReceiveRecover

        public abstract void onReceiveRecover​(java.lang.Object msg)
                                       throws java.lang.Throwable
        Deprecated.
        Java API: recovery handler that receives persisted events during recovery. If a state snapshot has been captured and saved, this handler will receive a SnapshotOffer message followed by events that are younger than the offered snapshot.

        This handler must not have side-effects other than changing persistent actor state i.e. it should not perform actions that may fail, such as interacting with external services, for example.

        If there is a problem with recovering the state of the actor from the journal, the error will be logged and the actor will be stopped.

        Parameters:
        msg - (undocumented)
        Throws:
        java.lang.Throwable
        See Also:
        Recovery
      • persist

        public <A> void persist​(A event,
                                Procedure<A> handler)
        Deprecated.
        Java API: asynchronously persists event. On successful persistence, handler is called with the persisted event. It is guaranteed that no new commands will be received by a persistent actor between a call to persist and the execution of its handler. This also holds for multiple persist calls per received command. Internally, this is achieved by stashing new commands and unstashing them when the event has been persisted and handled. The stash used for that is an internal stash which doesn't interfere with the inherited user stash.

        An event handler may close over persistent actor state and modify it. The getSender() of a persisted event is the sender of the corresponding command. This means that one can reply to a command sender within an event handler.

        Within an event handler, applications usually update persistent actor state using persisted event data, notify listeners and reply to command senders.

        If persistence of an event fails, Eventsourced.onPersistFailure(java.lang.Throwable, java.lang.Object, long) will be invoked and the actor will unconditionally be stopped. The reason that it cannot resume when persist fails is that it is unknown if the event was actually persisted or not, and therefore it is in an inconsistent state. Restarting on persistent failures will most likely fail anyway, since the journal is probably unavailable. It is better to stop the actor and after a back-off timeout start it again.

        Parameters:
        event - event to be persisted.
        handler - handler for each persisted event
      • persistAll

        public <A> void persistAll​(java.lang.Iterable<A> events,
                                   Procedure<A> handler)
        Deprecated.
        Java API: asynchronously persists events in specified order. This is equivalent to calling persist[A](event: A, handler: Procedure[A]) multiple times with the same handler, except that events are persisted atomically with this method.

        Parameters:
        events - events to be persisted.
        handler - handler for each persisted events
      • persistAllAsync

        public <A> void persistAllAsync​(java.lang.Iterable<A> events,
                                        Procedure<A> handler)
        Deprecated.
        JAVA API: asynchronously persists events in specified order. This is equivalent to calling persistAsync[A](event: A)(handler: A => Unit) multiple times with the same handler, except that events are persisted atomically with this method.

        Parameters:
        events - events to be persisted
        handler - handler for each persisted events
      • persistAsync

        public <A> void persistAsync​(A event,
                                     Procedure<A> handler)
        Deprecated.
        JAVA API: asynchronously persists event. On successful persistence, handler is called with the persisted event.

        Unlike persist the persistent actor will continue to receive incoming commands between the call to persist and executing it's handler. This asynchronous, non-stashing, version of of persist should be used when you favor throughput over the "command-2 only processed after command-1 effects' have been applied" guarantee, which is provided by the plain persist(A, akka.japi.Procedure<A>) method.

        An event handler may close over persistent actor state and modify it. The sender of a persisted event is the sender of the corresponding command. This means that one can reply to a command sender within an event handler.

        If persistence of an event fails, Eventsourced.onPersistFailure(java.lang.Throwable, java.lang.Object, long) will be invoked and the actor will unconditionally be stopped. The reason that it cannot resume when persist fails is that it is unknown if the event was actually persisted or not, and therefore it is in an inconsistent state. Restarting on persistent failures will most likely fail anyway, since the journal is probably unavailable. It is better to stop the actor and after a back-off timeout start it again.

        Parameters:
        event - event to be persisted
        handler - handler for each persisted event
      • receiveCommand

        public final scala.PartialFunction<java.lang.Object,​scala.runtime.BoxedUnit> receiveCommand()
        Deprecated.
        Description copied from interface: Eventsourced
        Command handler. Typically validates commands against current state (and/or by communication with other actors). On successful validation, one or more events are derived from a command and these events are then persisted by calling persist.
        Specified by:
        receiveCommand in interface Eventsourced
        Returns:
        (undocumented)
      • receiveRecover

        public final scala.PartialFunction<java.lang.Object,​scala.runtime.BoxedUnit> receiveRecover()
        Deprecated.
        Description copied from interface: Eventsourced
        Recovery handler that receives persisted events during recovery. If a state snapshot has been captured and saved, this handler will receive a SnapshotOffer message followed by events that are younger than the offered snapshot.

        This handler must not have side-effects other than changing persistent actor state i.e. it should not perform actions that may fail, such as interacting with external services, for example.

        If there is a problem with recovering the state of the actor from the journal, the error will be logged and the actor will be stopped.

        Specified by:
        receiveRecover in interface Eventsourced
        Returns:
        (undocumented)
        See Also:
        Recovery