如何使用 Akka 管理对顶级 actor 的引用
How to manage ref to top-level actor with Akka
如何正确管理对顶级 actor 的引用。
我用那个
object MyController extends Controller {
lazy val supervisor = Akka.system.actorOf(Props[SupervisorActor])
但是我的测试失败了,因为akka系统在测试之间重新启动了...
测试代码与播放示例非常相似:
class IntegrationSpec extends Specification {
"Application" should {
"example1" in new WithBrowser(WebDriverFactory(FIREFOX)) {
…
}
"example2" in new WithBrowser(WebDriverFactory(FIREFOX)) {
…
}
我终于找到了一个 hack,因为 FakeApplication
也使用 Global
。
让我知道是否有更好的方法...
object Global extends GlobalSettings {
var supervisor : ActorRef = null;
override def onStart(app: Application) {
supervisor = Akka.system.actorOf(Props[SupervisorActor])
}
}
[edit] 正如@jean 所建议的,我修改了代码以使用命名的 Actor
,因此我不再需要在 object
中保留引用。
override def onStart(app: Application) {
Akka.system.actorOf(Props[SupervisorActor], "supervisor")
}
我可以通过以下方式检索演员:
context.actorSelection("/user/supervisor")
如何正确管理对顶级 actor 的引用。
我用那个
object MyController extends Controller {
lazy val supervisor = Akka.system.actorOf(Props[SupervisorActor])
但是我的测试失败了,因为akka系统在测试之间重新启动了...
测试代码与播放示例非常相似:
class IntegrationSpec extends Specification {
"Application" should {
"example1" in new WithBrowser(WebDriverFactory(FIREFOX)) {
…
}
"example2" in new WithBrowser(WebDriverFactory(FIREFOX)) {
…
}
我终于找到了一个 hack,因为 FakeApplication
也使用 Global
。
让我知道是否有更好的方法...
object Global extends GlobalSettings {
var supervisor : ActorRef = null;
override def onStart(app: Application) {
supervisor = Akka.system.actorOf(Props[SupervisorActor])
}
}
[edit] 正如@jean 所建议的,我修改了代码以使用命名的 Actor
,因此我不再需要在 object
中保留引用。
override def onStart(app: Application) {
Akka.system.actorOf(Props[SupervisorActor], "supervisor")
}
我可以通过以下方式检索演员:
context.actorSelection("/user/supervisor")