什么是在Play中处理初始化错误的最佳方法! Framework 2.0?

时间:2012-03-21 15:26:01

标签: scala error-handling initialization playframework-2.0

想象一下,我有一个使用Play 2编写的应用程序。想象一下,应用程序需要在启动时抓住一些东西(读取配置文件,从JNDI获取一些资源,这种事情)。轻松播放给我们GlobalSettings对象,我们可以用它来挂钩开始和停止事件:

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 个答案:

答案 0 :(得分:1)

看来我在说谎。如果您在开发模式(onStart)中运行,则仅在play run中的异常后继续播放请求。如果以play start(即生产模式)启动,则此处的异常将终止服务器,这正是我想要的。

它似乎确实留下了RUNNING_PID文件,这很令人恼火,但这是一个单独的问题......