2012-03-21 39 views
2

想象一下,我有一個使用Play 2編寫的應用程序。想象一下,應用程序需要在啓動時抓住一些東西(讀取配置文件,從JNDI獲取一些資源,這種事情)。播放輕而易舉地給我們的GlobalSettings對象,我們可以使用掛接到啓動和停止事件:處理Play中的初始化錯誤的最佳方法是什麼? Framework 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纔會繼續處理請求。如果從play start(即生產模式)開始,這裏的異常將終止服務器,這正是我想要的。

它似乎離開RUNNING_PID文件躺在,這是令人煩惱,但這是一個單獨的問題...

相關問題