ActorInitializationException when using actor class inheritance
The code below compiles and runs fine when
However, if
Scala 2.10.3, Akka 2.3.1.
timeout
is given its value inside the ParentActor abstract class.However, if
timeout
is abstract in the ParentActor and only defined in the MyActor class as below, then I get a rather cryptic "akka.actor.ActorInitializationException: exception during creation".Scala 2.10.3, Akka 2.3.1.
object Error extends App {
val system = ActorSystem("test")
system.actorOf(Props(classOf[MyActor]), "my-actor")
}
class MyActor extends ParentActor {
val timeout: FiniteDuration = 20.milliseconds
def receive: Receive = {
case Hello => println("hello")
}
}
abstract class ParentActor extends Actor {
val timeout: FiniteDuration
import context.dispatcher
context.system.scheduler.scheduleOnce(timeout) {
self ! Hello
}
}
case object Hello
[ERROR] [04/08/2014 17:56:25.486] [test-akka.actor.default-dispatcher-3] [akka://test/user/my-actor] null
akka.actor.ActorInitializationException: exception during creation
at akka.actor.ActorInitializationException$.apply(Actor.scala:164)
at akka.actor.ActorCell.create(ActorCell.scala:596)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:263)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
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.NullPointerException
at akka.actor.LightArrayRevolverScheduler.akka$actor$LightArrayRevolverScheduler$$roundUp(Scheduler.scala:204)
at akka.actor.LightArrayRevolverScheduler.scheduleOnce(Scheduler.scala:275)
at akka.actor.Scheduler$class.scheduleOnce(Scheduler.scala:117)
at akka.actor.LightArrayRevolverScheduler.scheduleOnce(Scheduler.scala:182)
at demo.ParentActor.<init>(Error.scala:23)
at demo.MyActor.<init>(Error.scala:11)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:374)
at akka.util.Reflect$.instantiate(Reflect.scala:45)
at akka.actor.NoArgsReflectConstructor.produce(Props.scala:358)
at akka.actor.Props.newActor(Props.scala:249)
at akka.actor.ActorCell.newActor(ActorCell.scala:552)
at akka.actor.ActorCell.create(ActorCell.scala:578)
... 9 more
Leave a comment