system.actorOf == top-level actor
context.actorOf == child/sub actor
On Mar 27, 2014 9:15 PM, "Anton Kumaigorodskiy" <[email protected]>
wrote:

> I have the following test setup which does not seem to work as I expect it
> to:
>
> class A extends Actor {
>   override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 2)
> {
>     case _ => println("An actor has been killed"); Restart
>   }
>
>   val b = context.system.actorOf(Props[B], "b")
>
>   def receive = {
>     case _ => context.system.scheduler.schedule(5 seconds, 5 seconds) {
> println("Sending request"); b ! true }
>   }
> }
>
> class B extends Actor {
>   def receive = { case true => println("Executing request"); self ! Kill }
> }
>
> I then instantiate 'A' and send it an arbitrary message to get a scheduler
> started.
> I expect that supervisorStrategy would be catching ActorKilledException
> but it does not happen, the output looks like this:
>
> Sending request
> Executing request
> [ERROR] ... Kill (akka.actor.ActorKilledException)
> Sending request
> [INFO] ... dead letters encountered
>
> It looks like supervisorStrategy override just does not work, I can even
> comment it out and output would stay the same.
> Could someone shed some light on why it's happening this way?
>
> ================
> And while we're at it, here's another situation that puzzles me:
>
> class A extends Actor {
>   val b = context.system.actorOf(Props[B], "b")
>
>   def receive = {
>     case _ => context.system.scheduler.schedule(5 seconds, 5 seconds) {
> println("Sending request"); b ! true }
>   }
> }
>
> class B extends Actor {
>   override def postRestart(reason: Throwable) = println("Post restart")
>   def receive = { case true => println("Executing request"); throw new
> Exception }
> }
>
> Output is:
>
> Sending request
> Executing request
> Post restart
> [ERROR] ... java.lang.Exception
> <sequence above repeats indefinitely>
>
> Is actor 'B' being terminated and restarted after an Exception being
> thrown? If yes, why is it being restarted given that I don't have any
> supervisorStrategy at all in this case?
> Is actor 'B' not being terminated and keeps working normally after an
> Exception being thrown? If yes, why is postRestart being called each time?
>
> --
> >>>>>>>>>> Read the docs: http://akka.io/docs/
> >>>>>>>>>> Check the FAQ:
> http://doc.akka.io/docs/akka/current/additional/faq.html
> >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
> ---
> You received this message because you are subscribed to the Google Groups
> "Akka User List" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/akka-user.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to