Существует ли какой-либо метод, предотвращающий запуск приложения Java EE, если во время инициализации приложения возникает исключение?Я в основном ищу способ заставить приложение войти в состояние "j2ee.state.failed
" (для JSR-77 ) после необработанного исключения, выданного из ServletContextListener
илибин Singleton
Startup
во время инициализации приложения.
Спецификация EJB , по-видимому, указывает, что если во время инициализации возникает исключениеbean-компонент Singleton
, приложение продолжит запускаться и работать без ошибок;однако, только сам бин может находиться в состоянии, в котором он не может быть вызван.К сожалению, это не то поведение, которое я ищу.
4.8.4 Обработка ошибок Singleton
Ошибки, возникающие при инициализации Singleton, считаются фатальными идолжен привести к отбрасыванию экземпляра Singleton.Возможные ошибки инициализации включают сбой внедрения, системное исключение, вызванное методом PostConstruct
, или сбой транзакции, управляемой контейнером метода PostConstruct
, для успешной фиксации.Если синглтон не может инициализироваться, попытки вызова синглтона приводят к исключению, как определено в разделе 3.4.3 и разделе 3.4.4.
Спецификация сервлета немногоболее двусмысленным в своих требованиях, по-видимому, не , требующим контейнера, чтобы вести себя каким-либо конкретным образом, а просто , предлагающим (через использование термина «может»), чтобы веб-модуль продолжалзапуск, но любые запросы должны привести к внутренней ошибке сервера.Опять же, это, к сожалению, не то поведение, которое я ищу.Почему веб-приложение должно продолжать запускаться и работать, если оно не может обработать какие-либо запросы?
11.6 Исключения слушателя
Контейнер может отвечать на все запросыпоследующие запросы к веб-приложению с кодом состояния HTTP 500 для указания ошибки приложения.
По своему опыту я видел, что серверы приложений по-разному справляются с этим требованием.Некоторые контейнеры фактически препятствуют запуску приложения в этих случаях, тогда как другие просто подавляют исключение и отвечают на запросы с 500 ошибками, как предложено в спецификации.
Я пропускаю любую часть спецификации, котораябудет препятствовать запуску приложения, если во время инициализации произойдет исключение?