2012-03-21 6 views
2

Play 2を使って書かれたアプリケーションがあるとします。アプリケーションがスタートアップ時にいくつかのことを把握する必要があると想像してください(設定ファイルを読んで、JNDIからいくつかのリソースを取得してください)。手近に再生する私たちはスタートにフックするために使用すると、イベントを停止することができますGlobalSettingsオブジェクトを与える:Playの初期化エラーを処理する最善の方法は何ですか?フレームワーク2.0?

import play.api._ 

object Global extends GlobalSettings { 

    var someResource: Resource = _ 

    override def onStart(app: Application) { 
    // might throw an exception if the path doesn't exist 
    resource = JNDI.grabThing("/some/path").asInstanceOf[Resource] 
    } 

} 

問題がある - 初期化が失敗した場合、我々は何ができるのでしょうか?これは、Playがアプリケーションの最初の要求を受け取ったときにのみ実行されるようです。例外がスローされると、その要求は失敗しますが、アプリケーションは実行を継続します。

理想的には、このブロックが正常に完了しなかった場合、アプリケーションの起動を停止することが理想です。残念ながら、Play.stop()に電話をかけても、実際には再生を停止していないようです。私はServer特性がdef stop()を定義していることが分かりますが、私のアプリケーションの中からServerインスタンスを保持する方法を見つけることができません。

おそらく私は間違った方法を見ていると私はと私のアプリケーション内から再生を停止することができると仮定していないと思うので、他のアプローチの提案を歓迎します。

これらのエラーを処理する最適な方法は何ですか?

答えて

1

私は嘘をついているようです。デベロッパーモード(play run)で実行している場合は、onStartの例外が発生した後でも、再生は要求の処理を継続します。 play start(つまりプロダクションモード)で開始された場合、ここでの例外はサーバーを終了します。これはまさに私が望むものです。

RUNNING_PIDファイルが横になっているように見えますが、これは刺激的ですが、それは別の問題です...

関連する問題