Запретить запуск приложения Java EE в WebSphere в исключительных случаях - PullRequest
5 голосов
/ 27 августа 2009

Есть ли способ с WebSphere 6.1.0.25, чтобы предотвратить запуск приложения предприятия из-за исключения? У меня есть ServletContextListener, который я настроил, чтобы вызвать RuntimeException во время contextInitialized (). Это создает трассировку стека в журнале сервера, однако консоль WebSphere по-прежнему показывает, что приложение успешно запускается, и ресурсы WAR по-прежнему доступны. Существует ли механизм, препятствующий WebSphere помечать приложение как успешный запуск, который может быть создан артефактами in-WAR?

Я также попытался настроить сервлет на загрузку при запуске и выдал исключение из init (), но это не дало эффекта, который я искал.

1 Ответ

4 голосов
/ 27 августа 2009

Да, есть способ сделать это, но я считаю, что он все еще специфичен для 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 есть более подробная информация об этом, но в данный момент я не могу найти ее.

...