我想从演员系统外部构建actor层次结构。根据传递的描述动态更改层次结构。描述是一个包含Props
个对象的树。我更喜欢将从actor类重新配置actor层次结构的代码分开。因此,应该在actor线程之外创建并停止actor。
简化示例:
val system = ActorSystem("example")
val actor1 = system.actorOf[prop1, "1"]
val actor2 = actor1.context.actorOf[prop2, "2"]
我想知道如何从演员中提取上下文。即使我提供了适当的方法,上下文也被认为只在actor内有效。我想避免创建将产卵儿童委托给外面的混合体。
我写了一个关于如何实现提取器上下文暴露的简单演示。
trait Holder {
var factory : Option[ActorRefFactory] = None
val factoryLock = new Object
val props : Props // oftype ExposedActor, but Props lacks type parametrization
val parent : Holder
def create(props : Props, name : String) : ActorRef =
factoryLock synchronized {
factory.map( _.actorOf(props, name) ).get
}
val actorRef = parent.create(props, "ugly")
}
trait ExposedActor extends Actor {
val holder : Holder
override def preStart() {
super.preStart()
holder.factoryLock.synchronized {
holder.factory = Some(context)
}
}
}
但是有一个缺点:我需要在所有演员中混合ExposedActor
特征