Представьте, что у меня есть приложение, написанное с использованием Play 2 . Представьте, что приложению нужно захватить некоторые вещи при запуске (прочитать файл конфигурации, получить некоторые ресурсы из JNDI, и тому подобное). Play удобно предоставляет нам объект 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()
на самом деле не останавливает Play. Я вижу, что черта Server
определяет def stop()
, что выглядит многообещающе, но я не могу найти способ заполучить экземпляр Server
из моего приложения.
Возможно, я смотрю на это неправильно, и я не предполагал, что не сможет остановить Play (или даже просто мое приложение) из моего приложения, поэтому предложения по другим подходам Добро пожаловать.
Как лучше всего справиться с этими ошибками?