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