2016-08-11 4 views
0

私は俳優です。私はシステムのライフサイクルでアプリケーションの起動時に一度この俳優を始めたいと思っています。play framework 2.5どのファイルから起動するのですか

現在、私はrenderLoginPageコントローラでそれを使用しています続き

def loginPage: Action[AnyContent] = Action.async { 
implicit request => 
    scheduler.sendReminder(kSessionService,userService) 
    Logger.debug("Redirecting renderHomePage") 
} 

は俳優のためのスケジューラの私のコードです:今、問題は私と一緒に起こる

class Scheduler{ 
    val system = ActorSystem("system") 
    def sendReminder(kSessionService: KSessionService, userService: UserService):Unit = { 
    val reminder = system.actorOf(ReminderActor.props(kSessionService,userService), "reminder-actor") 
    reminder ! ReminderActor.Tick 
    } 

} 

は次のとおりです。私はからログアウトしていたときにアプリケーションは再びログインページをレンダリングし、同じ名前のアクターを作成しようとします。

[InvalidActorNameException:俳優名[リマインダー-俳優]が一意ではありません!]私は、スケジューラを開始するためのコードを記述する必要があります

だから私は例外を取得しています。

+0

は、あなたがリクエストごとに俳優を作成しますか? 1つの方法は、AkkaGuiceSupportモジュールを使用することです。一方、BalancingPoolを使用して、作成するアクターの数を教えてください。一方、あなたは単にsystem.actorOf(ReminderActor.props(kSessionService、userService))という名前を残すことができます – sascha10000

答えて

1

あなたは、俳優名を指定せずにそれを行うことができます:

system.actorOf(ReminderActor.props(kSessionService,userService)) 

しかし、あなたはあなたの役者の実装方法に応じて、あなたは、単一の俳優が自分の行動に注入かもしれないとティックメッセージでデータを送信します。

reminder ! ReminderActor.Tick(kSessionService,userService) 

チェック熱心バインディング:https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection#Eager-bindings

は、私はあなたのような何かを行うことができると思う。

class Module(system: ActorSystem) extends AbstractModule { 
    def configure() = { 
    //Set your binding here 
    } 
} 
+0

素晴らしい..私のために働いた:) – avy

関連する問題