|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface Actor
Actor base trait that should be extended by or mixed to create an Actor with the semantics of the 'Actor Model': http://en.wikipedia.org/wiki/Actor_model
An actor has a well-defined (non-cyclic) life-cycle. - ''RUNNING'' (created and started actor) - can receive messages - ''SHUTDOWN'' (when 'stop' is invoked) - can't do anything
The Actor's own ActorRef
is available as self
, the current
message’s sender as sender()
and the ActorContext
as
context
. The only abstract method is receive
which shall return the
initial behavior of the actor as a partial function (behavior can be changed
using context.become
and context.unbecome
).
This is the Scala API (hence the Scala code below), for the Java API see UntypedActor
.
class ExampleActor extends Actor {
override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
case _: ArithmeticException => Resume
case _: NullPointerException => Restart
case _: IllegalArgumentException => Stop
case _: Exception => Escalate
}
def receive = {
// directly calculated reply
case Request(r) => sender() ! calculate(r)
// just to demonstrate how to stop yourself
case Shutdown => context.stop(self)
// error kernel with child replying directly to 'sender()'
case Dangerous(r) => context.actorOf(Props[ReplyToOriginWorker]).tell(PerformWork(r), sender())
// error kernel with reply going through us
case OtherJob(r) => context.actorOf(Props[ReplyToMeWorker]) ! JobRequest(r, sender())
case JobReply(result, orig_s) => orig_s ! result
}
}
The last line demonstrates the essence of the error kernel design: spawn
one-off actors which terminate after doing their job, pass on sender()
to
allow direct reply if that is what makes sense, or round-trip the sender
as shown with the fictitious JobRequest/JobReply message pair.
If you don’t like writing context
you can always import context._
to get
direct access to actorOf
, stop
etc. This is not default in order to keep
the name-space clean.
Nested Class Summary | |
---|---|
static class |
Actor.emptyBehavior$
emptyBehavior is a Receive-expression that matches no messages at all, ever. |
Method Summary | |
---|---|
void |
aroundPostRestart(java.lang.Throwable reason)
Can be overridden to intercept calls to postRestart . |
void |
aroundPostStop()
Can be overridden to intercept calls to postStop . |
void |
aroundPreRestart(java.lang.Throwable reason,
scala.Option<java.lang.Object> message)
Can be overridden to intercept calls to preRestart . |
void |
aroundPreStart()
Can be overridden to intercept calls to preStart . |
void |
aroundReceive(scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit> receive,
java.lang.Object msg)
INTERNAL API. |
ActorContext |
context()
Stores the context for this actor, including self, and sender. |
void |
postRestart(java.lang.Throwable reason)
User overridable callback: By default it calls preStart() . |
void |
postStop()
User overridable callback. |
void |
preRestart(java.lang.Throwable reason,
scala.Option<java.lang.Object> message)
User overridable callback: '''By default it disposes of all children and then calls postStop() .''' |
void |
preStart()
User overridable callback. |
scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit> |
receive()
This defines the initial actor behavior, it must return a partial function with the actor logic. |
ActorRef |
self()
The 'self' field holds the ActorRef for this actor. |
ActorRef |
sender()
The reference sender Actor of the last received message. |
SupervisorStrategy |
supervisorStrategy()
User overridable definition the strategy to use for supervising child actors. |
void |
unhandled(java.lang.Object message)
User overridable callback. |
Method Detail |
---|
ActorContext context()
forward
.
WARNING: Only valid within the Actor itself, so do not close over it and publish it to other threads!
ActorContext
is the Scala API. getContext
returns a
UntypedActorContext
, which is the Java API of the actor
context.
ActorRef self()
self ! message
ActorRef sender()
deadLetters
in ActorSystem
.
WARNING: Only valid within the Actor itself, so do not close over it and publish it to other threads!
scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit> receive()
void aroundReceive(scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit> receive, java.lang.Object msg)
Can be overridden to intercept calls to this actor's current behavior.
receive
- current behavior.msg
- current message.void aroundPreStart()
preStart
. Calls preStart
by default.
void aroundPostStop()
postStop
. Calls postStop
by default.
void aroundPreRestart(java.lang.Throwable reason, scala.Option<java.lang.Object> message)
preRestart
. Calls preRestart
by default.
reason
- (undocumented)message
- (undocumented)void aroundPostRestart(java.lang.Throwable reason)
postRestart
. Calls postRestart
by default.
reason
- (undocumented)SupervisorStrategy supervisorStrategy()
void preStart()
void postStop()
void preRestart(java.lang.Throwable reason, scala.Option<java.lang.Object> message)
postStop()
.'''
reason
- the Throwable that caused the restart to happenmessage
- optionally the current message the actor processed when failing, if applicable
Is called on a crashed Actor right BEFORE it is restarted to allow clean
up of resources before Actor is terminated.void postRestart(java.lang.Throwable reason)
preStart()
.
reason
- the Throwable that caused the restart to happen
Is called right AFTER restart on the newly created Actor to allow reinitialization after an Actor crash.void unhandled(java.lang.Object message)
DeathPactException
(in
case of an unhandled Terminated
message) or publishes an UnhandledMessage
to the actor's system's EventStream
message
- (undocumented)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |