Вы правы, за исключением того, что он включает в себя переменные, то есть ошибку, а также исключение в правиле дешифрования по умолчанию, и он действует в любое время, когда актер бросает Throwable. По http://doc.akka.io/docs/akka/2.0/java/fault-tolerance.html#default-supervisor-strategy, по умолчанию, если не определена стратегия супервизор или она не покрывает исключение сброшенного (задано пользователем) Актер, следующие правила не выполняются в порядке, пока один срабатывает:
- ActorInitializationException будет остановить неисправный ребенок актер
- ActorKilledException остановят неисправному актеру ребенка
- других исключений перезагрузятся неисправным актеру ребенка
- других типов Throwable будет эскалация родительскому актер
Проверка обзора на http://doc.akka.io/docs/akka/2.3.11/general/supervision.html, если вы еще этого не видели.
Хорошее обсуждение этого вопроса на уровне кода находится в главе 8 «Акка-параллелизма» Дерека Уайта. В основном это относится к версии Scala, но я считаю, что обработка ошибок Actor реализована в Scala (с зависимостями от Java).
Глядя в 2.3.11 источников, актер по умолчанию обработка неисправностей решающая в Акка-actor_2.11-2.3.11-sources.jar \ AKKA \ actor.FaultHandling.scala и:
/**
* When supervisorStrategy is not specified for an actor this
* [[Decider]] is used by default in the supervisor strategy.
* The child will be stopped when [[akka.actor.ActorInitializationException]],
* [[akka.actor.ActorKilledException]], or [[akka.actor.DeathPactException]] is
* thrown. It will be restarted for other `Exception` types.
* The error is escalated if it's a `Throwable`, i.e. `Error`.
*/
final val defaultDecider: Decider = {
case _: ActorInitializationException ⇒ Stop
case _: ActorKilledException ⇒ Stop
case _: DeathPactException ⇒ Stop
case _: Exception ⇒ Restart
}
/**
* When supervisorStrategy is not specified for an actor this
* is used by default. OneForOneStrategy with decider defined in
* [[#defaultDecider]].
*/
final val defaultStrategy: SupervisorStrategy = {
OneForOneStrategy()(defaultDecider)
}
Это согласуется с документацией - более и менее, поскольку defaultDecider не включает в себя явный
case _ => Escalate // _ is the scala wildcard for anything
, который реализуется в функциях makeDecider, что по умолчанию нагнетать, если Throwable не соответствует по defaultDecider; и в документации не упоминается включение положения о исключении DeathPactException, вероятно, для уменьшения путаницы с деталями.