diff --git a/akka-core/src/main/scala/actor/Actor.scala b/akka-core/src/main/scala/actor/Actor.scala index 41f4c9c3a8..5ce7b14272 100644 --- a/akka-core/src/main/scala/actor/Actor.scala +++ b/akka-core/src/main/scala/actor/Actor.scala @@ -731,6 +731,8 @@ sealed class ActorRef private[akka] () extends TransactionManagement { } finally { link(actor) } + actor._selfOption = Some(this) + if (actor eq null) throw new ActorInitializationException("Actor instance passed to ActorRef can not be 'null'") actor } @@ -747,7 +749,6 @@ sealed class ActorRef private[akka] () extends TransactionManagement { } finally { link(actor) } - actor } /** @@ -1468,8 +1469,16 @@ object DispatcherType { } /** - * For internal use only. - * + * 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. + *

+ * => NEW (newly created actor) - can't receive messages (yet)
+ *     => STARTED (when 'start' is invoked) - can receive messages
+ *         => SHUT DOWN (when 'exit' is invoked) - can't do anything
+ * 
+ * * @author Jonas Bonér */ class ActorMessageInvoker private[akka] (val actorRef: ActorRef) extends MessageInvoker { diff --git a/akka-core/src/main/scala/routing/Routers.scala b/akka-core/src/main/scala/routing/Routers.scala index 66112a142f..a850b567e6 100644 --- a/akka-core/src/main/scala/routing/Routers.scala +++ b/akka-core/src/main/scala/routing/Routers.scala @@ -17,7 +17,7 @@ trait Dispatcher { this: Actor => protected def dispatch: PartialFunction[Any, Unit] = { case a if routes.isDefinedAt(a) => - if (self.replyTo.isDefined) routes(a) forward transform(a) + if (self.self.replyTo.isDefined) routes(a).forward(transform(a))(Some(self.self)) else routes(a).!(transform(a))(None) }