0

Global.scala で開始した外部 URL から引用符を読み取る定期的な Akka ジョブがあります。このような:

object Global extends GlobalSettings {
  override def onStart(app: Application) {
    val collector = Akka.system.actorOf(Props[QuoteCollector], "quoteCollector")
    Akka.system.scheduler.schedule(0.seconds, 10.seconds, collector, "tick")
  }
}

ここで、誰かが / ページを表示したときにアクターのデータにアクセスしたいので、コントローラーでこれを行います。

def index = Action {
  val actor:ActorRef = Akka.system.actorFor("akka://application/user/quoteCollector")
  val collector = actor.asInstanceOf[QuoteCollector]
  val list: List = collector.quotes
  Ok(views.html.index("hi"))
}

これは毎回起こることです:

error] application - 

! @6e1hjmdbo - Internal server error, for (GET) [/] ->

play.api.Application$$anon$1: Execution exception[[ClassCastException: akka.actor.RepointableActorRef cannot be cast to actors.QuoteCollector]]
    at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1]
    at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:326) [play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:324) [play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
java.lang.ClassCastException: akka.actor.RepointableActorRef cannot be cast to actors.QuoteCollector
    at controllers.Application$$anonfun$index$1.apply(Application.scala:22) ~[classes/:na]
    at controllers.Application$$anonfun$index$1.apply(Application.scala:20) ~[classes/:na]
    at play.api.mvc.ActionBuilder$$anonfun$apply$11.apply(Action.scala:254) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.ActionBuilder$$anonfun$apply$11.apply(Action.scala:254) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:217) ~[play_2.10.jar:2.1.1]
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]

そこで起こったことと、それを修正する方法についての指針は大歓迎です。

4

1 に答える 1

2

Akka は俳優からあなたを守ります。ActorRef代わりに、常にアドレス ( s)を扱っています。したがって、背後のアクターにはActorRef、メッセージを受け入れるロジック ( などcase object GetQuotes) と、引用符のリスト ( ) を返送するロジックList[Quote]も必要です。

ドキュメントのこの部分もチェックしてください。

于 2013-04-14T08:57:00.147 に答える