2012-06-18 2 views
12

Come si crea un oggetto/variabile globale in Play Framework 2.0 usando Scala?Come creare una variabile globale con Play Framework 2.0

Voglio creare un oggetto che una volta istanziato, può persistere tra più azioni del controllore in modo che azioni diverse possano ancora richiamare lo stesso oggetto (perché l'inizializzazione dell'oggetto è molto costosa).

Ciò è possibile senza memorizzarlo nel DB? Ho provato attaccare l'oggetto in un oggetto globale per il metodo onStart come illustrato di seguito:

http://www.playframework.org/documentation/2.0/ScalaGlobal

Questo era il mio codice:

(nella cartella dell'applicazione principale)

object Global extends GlobalSettings { 

    override def onStart(app:Application) { 
    var foo = new Foo 
    } 
    } 

} 

E nelle azioni del mio controller provo solo a chiamare la variabile per nome, ma non ha funzionato.

+0

Si prega di mostrare un po 'di codice che hai provato. Ho usato con successo Global (deve essere nel pacchetto predefinito). – opyate

+0

In realtà, potrei avere una risposta nella mia [domanda correlata] (http://stackoverflow.com/questions/11091902/best-way-to-define-globals-in-a-play-2-0-application), ma ti stai chiedendo se c'è un modo migliore. – opyate

+0

Grazie, il tuo codice nella domanda correlata funziona per me! Ho anche cambiato la mia domanda per mostrare quale codice avevo. – wynnch

risposta

15

Se le variabili globali anche bisogno di essere disponibili per i metodi in Global, metterli in Global.scala in questo modo:

package object globals { 
    lazy val abc = Play.maybeApplication.flatMap(_.configuration.getString("abc")).getOrElse("default_value_of_abc") 
    lazy val someActor = Akka.system.actorOf(Props[SomeActor], name = "someActor") 
} 

E poi usarlo nel vostro controller come questo:

println(globals.abc) 
globals.someActor ! SomeMessage 

UPDATE

La documentazione è stata aggiornata in seguito come aggiungere Global.scala in un idioma gioco ic! modo, con documenti per entrambi Scala e Java.

+1

Sai come farlo in Java? – JhovaniC