Akka - 使用反射创建一个actor

时间:2011-10-29 21:59:36

标签: scala reflection constructor akka actor

我需要创建一个actor,其精确类型仅在运行时从配置文件中读取。该actor的构造函数非常简单,即它需要一些在配置文件中定义的参数。

到目前为止,我已尝试使用反射执行此操作,如下所示:

val actor = actorOf(constructor.newInstance(parameters: _*).asInstanceOf[T]).start

不幸的是,这会导致“akka.actor.ActorInitializationException:actor [...]实例的ActorRef不在范围内。您无法使用'new MyActor'显式创建actor的实例。[.. ]“!

现在,我明白这可以保护框架不会泄漏对内部对象的引用,但是如何才能解决这个问题呢?或者,我怎样才能以一种有效的方式做我想做的事情呢?

1 个答案:

答案 0 :(得分:4)

也许使用Java界面来创建带参数的actor。用于创建的(Java)代码如下所示:

ActorRef actor = actorOf(new UntypedActorFactory() {
  public UntypedActor create() {
    return new MyUntypedActor("service:name", 5);
   }
});

所以你传递工厂而不是函数。这可能会更好......