2010-12-01 2 views
1

Я использую встроенный Jetty для запуска стандартного Java webapp. Мой пусковое это что-то вроде этого:Ошибка запуска Webapp, но Jetty LifeCycle утверждает, что «начал»

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(); 
... 

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

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

ERROR org.eclipse.jetty.util.log Failed startup of context [email protected] 

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

Просмотр результатов моего веб-поиска в 503 Службах Недоступные ошибки.

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

ответ

2

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

public class ThrowyWebAppContext extends WebAppContext { 
    @Override 
    protected void doStart() throws Exception { 
     super.doStart(); 
     if (getUnavailableException() != null) { 
      throw (Exception) getUnavailableException(); 
     } 
    } 
} 
1

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

+0

Я пробовал подключить слушателей всем, кому не повезло. Я смотрю на [источник для WebAppContext] (http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/webapp/WebAppContext.html#483). Этот Log.warn соответствует сообщению журнала, которое я вижу (кроме того, что я вижу его на уровне ошибки ...). Если я читаю это право, ошибка полностью проглатывается. Соответствующая часть в [AbstractLifeCycle] (http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/util/component/AbstractLifeCycle.html#46) устанавливает ошибки, когда исключения подкласс `doStart()`. – Patrick 2010-12-01 22:57:18

Смежные вопросы