abstract class PersistentEntity extends AnyRef
A PersistentEntity
has a stable entity identifier, with which
it can be accessed from anywhere in the cluster. It is run by an actor
and the state is persistent using event sourcing.
initialState
and behavior
are abstract methods that your concrete subclass must implement.
The behavior is defined as a set of actions given a state. The actions are functions to process
incoming commands and persisted events.
The PersistentEntity
receives commands of type Command
that can be validated before
persisting state changes as events of type Event
. The functions that process incoming
commands are registered in the Actions
using onCommand
of the
Actions
.
A command may also be read-only and only perform some side-effect, such as replying
to the request. Such command handlers are registered using onReadOnlyCommand
of the Actions
. Replies are sent with the reply
method of the context that
is passed to the command handler function.
A command handler returns a Persist
directive that defines what event or events,
if any, to persist. Use the thenPersist
, thenPersistAll
or done
methods of the
context that is passed to the command handler function to create the Persist
directive.
When an event has been persisted successfully the state of type State
is updated by
applying the event to the current state. The functions for updating the state are
registered with the onEvent
method of the Actions
.
The event handler returns the new state. The state must be immutable, so you return
a new instance of the state. Current state is passed as parameter to the event handler.
The same event handlers are also used when the entity is started up to recover its
state from the stored events.
After persisting an event, external side effects can be performed in the afterPersist
function that can be defined when creating the Persist
directive.
A typical side effect is to reply to the request to confirm that it was performed
successfully. Replies are sent with the reply
method of the context that is passed
to the command handler function.
The command handlers may emit zero, one or many events. When many events are emitted, they are stored atomically and in the same order they were emitted. Only after persisting all the events external side effects will be performed.
The event handlers are typically only updating the state, but they may also change the behavior of the entity in the sense that new functions for processing commands and events may be defined for a given state. This is useful when implementing finite state machine (FSM) like entities.
When the entity is started the state is recovered by replaying stored events. To reduce this recovery time the entity may start the recovery from a snapshot of the state and then only replaying the events that were stored after the snapshot. Such snapshots are automatically saved after a configured number of persisted events.
- Source
- PersistentEntity.scala
- Alphabetic
- By Inheritance
- PersistentEntity
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
- new PersistentEntity()
Type Members
-
class
Actions extends (State) ⇒ Actions
Actions consists of functions to process incoming commands and persisted events.
Actions consists of functions to process incoming commands and persisted events.
Actions
is an immutable class. - type Behavior = (State) ⇒ Actions
- abstract type Command
-
abstract
class
CommandContext[R] extends ReadOnlyCommandContext[R]
The context that is used by command handler function.
The context that is used by command handler function. Events are persisted with the context and replies are sent with the context.
- R
the reply type of the command
- abstract type Event
- type EventHandler = PartialFunction[(Event, State), State]
-
trait
Persist extends AnyRef
A command handler returns a
Persist
directive that defines what event or events, if any, to persist.A command handler returns a
Persist
directive that defines what event or events, if any, to persist. Use thethenPersist
,thenPersistAll
ordone
methods of the context that is passed to the command handler function to create thePersist
directive. -
abstract
class
ReadOnlyCommandContext[R] extends AnyRef
The context that is used by read-only command handlers.
The context that is used by read-only command handlers. Replies are sent with the context.
- R
the reply type of the command
- abstract type State
Abstract Value Members
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
def
+(other: String): String
- Implicit
- This member is added by an implicit conversion from PersistentEntity to any2stringadd[PersistentEntity] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
-
def
->[B](y: B): (PersistentEntity, B)
- Implicit
- This member is added by an implicit conversion from PersistentEntity to ArrowAssoc[PersistentEntity] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
ensuring(cond: (PersistentEntity) ⇒ Boolean, msg: ⇒ Any): PersistentEntity
- Implicit
- This member is added by an implicit conversion from PersistentEntity to Ensuring[PersistentEntity] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: (PersistentEntity) ⇒ Boolean): PersistentEntity
- Implicit
- This member is added by an implicit conversion from PersistentEntity to Ensuring[PersistentEntity] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean, msg: ⇒ Any): PersistentEntity
- Implicit
- This member is added by an implicit conversion from PersistentEntity to Ensuring[PersistentEntity] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean): PersistentEntity
- Implicit
- This member is added by an implicit conversion from PersistentEntity to Ensuring[PersistentEntity] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
final
def
entityId: String
- Attributes
- protected
-
def
entityTypeName: String
The name of this entity type.
The name of this entity type. It should be unique among the entity types of the service. By default it is using the short class name of the concrete
PersistentEntity
class. Subclass may override to define other type names. It is needed to override and retain the original name when the class name is changed because this name is part of the key of the store data (it is part of thepersistenceId
of the underlyingPersistentActor
). -
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from PersistentEntity to StringFormat[PersistentEntity] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def onUnhandledCommand(command: Command, context: ReadOnlyCommandContext[Nothing], state: State): Unit
-
def
recoveryCompleted(state: State): State
This method is called to notify the entity that the recovery process is finished.
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
→[B](y: B): (PersistentEntity, B)
- Implicit
- This member is added by an implicit conversion from PersistentEntity to ArrowAssoc[PersistentEntity] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- object Actions