2016-08-09 27 views
0

Ich habe eine mit ActorApplication injiziert und in seiner preStart MethodeInjected Application und Play.current in Play! Rahmen

override def preStart = { 
    println(application) 
    println(Play.current) 
    } 

Der Schauspieler erstellt bindActor von AkkaGuiceSupport mit so ist es asEagerSingleton

Verwendung Wenn ich die app das Ergebnis beginnen ist, dass application definiert ist während des Druckens Play.current löst Ausnahme aus.

[email protected] 
[error] a.a.OneForOneStrategy - There is no started application 
akka.actor.ActorInitializationException: exception during creation 
... 
Caused by: java.lang.RuntimeException: There is no started application 

Ist Play.current einige andere Anwendung als die injizierten ein?

+0

Wenn Sie bereits eine Anwendungsinstanz haben, warum brauchen Sie 'Play.current'? – Salem

+0

Ich hatte nur 'Play.current'. Ich habe einige Änderungen vorgenommen und es hat aufgehört zu arbeiten. Es scheint, dass ich überall dort, wo ich 'Play.current' verwende, eine Applikation einspielen muss. Ich bin nur neugierig, warum es nicht gestartet wird, wenn die injizierte Anwendung gestartet wird. – lowercase

Antwort

0

es ist schwer zu sagen, wo Sie ohne mehr Kontext schief gehen könnte, aber wenn man sieht, wie Play.current implementiert ist ... es führt zu der Notwendigkeit für einen Anruf an: Play.start(application)

im Anschluss an die Kette:

Die letzte Zeile oben ist der einzige Ort, an dem eine Anwendung so eingestellt wird, dass Play.current sie erreicht. Wenn Sie also diese Ausnahme erhalten, wurde Ihre Anwendung nicht so gestartet, wie sie es erwartet.

Wenn ich raten müsste, würde ich sagen, dass Ihr Akteur irgendwo initialisiert wird, bevor Play.start aufgerufen wird.

+0

So sieht es aus wie Anwendung erstellt und injiziert wird und dann 'Play.start' aufgerufen wird. Nicht sehr intuitiv. In einem Fall gibt es eine Anwendung in der anderen nicht. – lowercase

Verwandte Themen