Last active
July 4, 2016 15:42
-
-
Save matsu-chara/093a65072863a2303807f3c7300376c3 to your computer and use it in GitHub Desktop.
ActorInitiliazationExceptionのRestartだとpreStart以外は呼ばれない
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[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