Play のアクター システムを使用して、アプリのスーパーバイザー (ルート) アクターを作成しています。
このルート アクターに対して最初に行う必要があるのは、自身と一連の子アクターを構成するためのメッセージを送信することです。構成には、TypeSafe 構成 API を使用して conf ファイルから読み取り、これらの値をデータベース (この場合は MongoDB) にロードすることが含まれます。私はreactivemongoを使用して設定をconfファイルからデータベースにロードしているので、完全にノンブロッキングで非同期です。コントローラーの他のすべてのアクションは、データベースにロードされる構成値に依存します。
このアクターをどこで作成すればよいかわかりません。コントローラーのコンストラクターで作成しようとしましたが、非同期の読み込みが完了する前にアクションが呼び出されると、例外が発生します。
また、Global.onStart() 内に配置しようとしましたが、再度、コントローラー コード内にスーパーバイザーを取得できませんでした。
import play.api._
object Global extends GlobalSettings {
override def onStart(app: Application) {
Logger.info("Application has started")
val supervisor = Akka.system().actorOf(Props(new Supervisor()), "easupervisor")
}
}
Global オブジェクトのコンストラクターでスーパーバイザーを直接作成しようとしましたが、再生の初期化エラーも発生しました。
object Global extends GlobalSettings {
val supervisor = Akka.system().actorOf(Props(new Supervisor()), "easupervisor")
override def onStart(app: Application) {
Logger.info("Application has started")
}
}