Да, есть способ сделать это, но я считаю, что он все еще специфичен для WebSphere. У нас была такая же проблема несколько лет назад, приложение, которое требовало много настроек, все равно показывало бы, что оно запущено, даже когда произошла серьезная ошибка. Единственный способ узнать это - посмотреть файл журнала и посмотреть, не возникло ли каких-либо исключений (и веб-интерфейс работал не очень хорошо).
Стандартным способом обработки жизненного цикла, который, похоже, работает в большинстве контейнеров, является ServletContextListener, но, как вы обнаружили, нет изящного способа обработки ошибок при запуске.
В WebSphere (во всяком случае, для нескольких версий) существует концепция запускаемого компонента. Вместо того, чтобы пытаться объяснить это подробно, как это было пару лет назад, когда я делал это, вы можете взглянуть на эту ссылку http://publib.boulder.ibm.com/inforcenter...
Это по существу позволяет вам создавать EJB-компонент, который реализует два метода:
public boolean start() {
return new Delegate().start();
}
public void stop() {
new Delegate().stop();
}
Если вы возвращаете true из метода start, он возвращает успешный запуск, в противном случае возвращение false останавливает запуск приложения, поэтому в консоли приложение укажет, что оно не удалось запустить. Мы реализовали делегат для выполнения этой работы, чтобы мы могли подключить его либо к бину запуска, либо к серверу ServletContextListener, если контейнер не реализует бины запуска.
Единственная дополнительная вещь, связанная с запускающими bean-компонентами, заключается в том, что в WebSphere вам необходимо включить службу Startup bean-компонентов в административной консоли, иначе они не будут запускаться, и ваше приложение не будет выполнять никакой инициализации, но все равно будет отображаться как запущенное при попробуй и запусти. Информация о том, как это сделать, приведена на странице выше.
Я также уверен, что в Redbook IBM есть более подробная информация об этом, но в данный момент я не могу найти ее.