Запуск веб-приложения завершился неудачно, но Jetty LifeCycle утверждает, что «запущен» - PullRequest
1 голос
/ 02 декабря 2010

Я использую встроенный Jetty для запуска стандартного веб-приложения Java. Мой лаунчер примерно такой:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.component.LifeCycle.Listener;
import org.eclipse.jetty.webapp.WebAppContext;

...

Listener listener = ...;
Server server = new Server(8080);
WebAppContext webapp = new WebAppContext();
...
webapp.addLifeCycleListener(listener);

server.setHandler(webapp);
server.start();
...

Это все работает нормально, я могу запустить свое приложение и просмотреть его, и все, кажется, работает.

Но сейчас я пытаюсь добавить сообщение об ошибке в мою программу запуска. Я временно установил в своем веб-приложении исключение в методе contextInitialized() для ServletContextListener. Исключение выдается, и я получаю сообщение журнала

ERROR org.eclipse.jetty.util.log Failed startup of context WebAppContext@...

но мой LifeCycleListener не получает никаких событий сбоя. Фактически, он получает запущенное событие, и WebAddContext, переданный слушателю, возвращает false для LifeCycle#isFailed() и true для LifeCycle#isRunning().

Просмотр моего веб-приложения приводит к ошибкам 503 Service Unavailable.

Это происходит в версиях Jetty 7.0.1.v20091125 и 7.2.1.v20101111. См. Jetty 7 api docs .

Ответы [ 2 ]

2 голосов
/ 02 декабря 2010

Согласно моим комментариям к ответу Хери, WebAppContext проглатывает исключения.В противном случае они будут перехвачены AbstractLifeCycle и отправлены события сбоя.Это дает мне большую часть пути там:

public class ThrowyWebAppContext extends WebAppContext {
    @Override
    protected void doStart() throws Exception {
        super.doStart();
        if (getUnavailableException() != null) {
            throw (Exception) getUnavailableException();
        }
    }
}
1 голос
/ 02 декабря 2010

Если я правильно помню, неудачные жизненные циклы элементов контекста не распространяются на жизненный цикл самого контекста (например, неудачные контексты не распространяются на жизненный цикл самого сервера). Проверьте также жизненный цикл SecurityHandler, ServletHandler и SessionHandler контекста.

...