Skip to content

Instantly share code, notes, and snippets.

@matsu-chara
Last active July 4, 2016 15:42
Show Gist options
  • Save matsu-chara/093a65072863a2303807f3c7300376c3 to your computer and use it in GitHub Desktop.
Save matsu-chara/093a65072863a2303807f3c7300376c3 to your computer and use it in GitHub Desktop.
ActorInitiliazationExceptionのRestartだとpreStart以外は呼ばれない
package ex2
import akka.actor.SupervisorStrategy._
import akka.actor._
import scala.concurrent.Await
import scala.concurrent.duration.Duration
object Main1 extends App {
val system = ActorSystem()
try {
val actor = system.actorOf(Props[SupervisorExceptionActor])
actor ! 1
actor ! 2
actor ! 3
Thread.sleep(5000)
} finally {
Await.result(system.terminate(), Duration.Inf)
}
}
class SupervisorExceptionActor extends Actor {
val actor = context.actorOf(Props[InitializationException])
override def supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 2) {
case _: ActorInitializationException ⇒ Restart
case _: ActorKilledException ⇒ Stop
case _: DeathPactException ⇒ Stop
case _: Exception ⇒ Stop
}
def receive = {
case Terminated(ref: ActorRef) => println(ref)
case x => actor forward x
}
}
class InitializationException extends Actor {
override def preStart() = {
super.preStart()
println("starting")
throw new RuntimeException("")
}
override def postStop() = {
super.postStop()
println("postStop")
}
override def preRestart(reason: Throwable, message: Option[Any]): Unit = {
super.preRestart(reason, message)
println("preRestart")
}
override def postRestart(reason: Throwable): Unit = {
super.postRestart(reason)
println("postRestart")
}
def receive = {
case x => println(x)
}
}
[info] Running ex2.Main1
starting
[ERROR] [07/05/2016 00:40:39.695] [default-akka.actor.default-dispatcher-3] [akka://default/user/$a/$a]
akka.actor.ActorInitializationException: exception during creation
at akka.actor.ActorInitializationException$.apply(Actor.scala:172)
at akka.actor.ActorCell.create(ActorCell.scala:606)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:461)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:483)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:282)
at akka.dispatch.Mailbox.run(Mailbox.scala:223)
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.RuntimeException:
at ex2.InitializationException.preStart(InitializationException.scala:42)
at ex2.InitializationException.preStart(InitializationException.scala:38)
at akka.actor.Actor$class.aroundPreStart(Actor.scala:485)
at ex2.InitializationException.aroundPreStart(InitializationException.scala:38)
at akka.actor.ActorCell.create(ActorCell.scala:590)
... 9 more
[ERROR] [07/05/2016 00:40:39.696] [default-akka.actor.default-dispatcher-2] [akka://default/user/$a/$a] changing Recreate into Create after akka.actor.ActorInitializationException: exception during creation
starting
starting
[ERROR] [07/05/2016 00:40:39.698] [default-akka.actor.default-dispatcher-5] [akka://default/user/$a/$a]
akka.actor.ActorInitializationException: exception during creation
at akka.actor.ActorInitializationException$.apply(Actor.scala:172)
at akka.actor.ActorCell.create(ActorCell.scala:606)
at akka.actor.dungeon.FaultHandling$class.finishCreate(FaultHandling.scala:136)
at akka.actor.dungeon.FaultHandling$class.faultCreate(FaultHandling.scala:130)
at akka.actor.ActorCell.faultCreate(ActorCell.scala:374)
at akka.actor.dungeon.FaultHandling$class.faultRecreate(FaultHandling.scala:59)
at akka.actor.ActorCell.faultRecreate(ActorCell.scala:374)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:464)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:483)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:282)
at akka.dispatch.Mailbox.run(Mailbox.scala:223)
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.RuntimeException:
at ex2.InitializationException.preStart(InitializationException.scala:42)
at ex2.InitializationException.preStart(InitializationException.scala:38)
at akka.actor.Actor$class.aroundPreStart(Actor.scala:485)
at ex2.InitializationException.aroundPreStart(InitializationException.scala:38)
at akka.actor.ActorCell.create(ActorCell.scala:590)
... 14 more
[ERROR] [07/05/2016 00:40:39.698] [default-akka.actor.default-dispatcher-3] [akka://default/user/$a/$a] changing Recreate into Create after akka.actor.ActorInitializationException: exception during creation
[ERROR] [07/05/2016 00:40:39.699] [default-akka.actor.default-dispatcher-3] [akka://default/user/$a/$a]
akka.actor.ActorInitializationException: exception during creation
at akka.actor.ActorInitializationException$.apply(Actor.scala:172)
at akka.actor.ActorCell.create(ActorCell.scala:606)
at akka.actor.dungeon.FaultHandling$class.finishCreate(FaultHandling.scala:136)
at akka.actor.dungeon.FaultHandling$class.faultCreate(FaultHandling.scala:130)
at akka.actor.ActorCell.faultCreate(ActorCell.scala:374)
at akka.actor.dungeon.FaultHandling$class.faultRecreate(FaultHandling.scala:59)
at akka.actor.ActorCell.faultRecreate(ActorCell.scala:374)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:464)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:483)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:282)
at akka.dispatch.Mailbox.run(Mailbox.scala:223)
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.RuntimeException:
at ex2.InitializationException.preStart(InitializationException.scala:42)
at ex2.InitializationException.preStart(InitializationException.scala:38)
at akka.actor.Actor$class.aroundPreStart(Actor.scala:485)
at ex2.InitializationException.aroundPreStart(InitializationException.scala:38)
at akka.actor.ActorCell.create(ActorCell.scala:590)
... 14 more
[INFO] [07/05/2016 00:40:39.704] [default-akka.actor.default-dispatcher-5] [akka://default/user/$a/$a] Message [java.lang.Integer] from Actor[akka://default/deadLetters] to Actor[akka://default/user/$a/$a#-1647862818] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
[INFO] [07/05/2016 00:40:39.704] [default-akka.actor.default-dispatcher-5] [akka://default/user/$a/$a] Message [java.lang.Integer] from Actor[akka://default/deadLetters] to Actor[akka://default/user/$a/$a#-1647862818] was not delivered. [2] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
[INFO] [07/05/2016 00:40:39.704] [default-akka.actor.default-dispatcher-5] [akka://default/user/$a/$a] Message [java.lang.Integer] from Actor[akka://default/deadLetters] to Actor[akka://default/user/$a/$a#-1647862818] was not delivered. [3] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
[success] Total time: 15 s, completed 2016/07/05 0:40:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment