Эта идея основана на реализации WebAppContext, где вы можете использовать WebAppContext.getUnavailableException(), чтобы определить, был ли контекст успешно инициализирован.
Просто замените реализацию по умолчанию сервера и контекст с вашим собственным:
public static class MyContext extends Context {
private Exception _exception;
@Override
protected void doStart() throws Exception {
try {
super.doStart();
} catch (final Exception e) {
_exception = e;
}
}
@Override
protected void doStop() throws Exception {
try {
super.doStop();
} finally {
_exception = null;
}
}
public Exception getException() {
return _exception;
}
}
public static class MyServer extends Server implements InitializingBean {
public void afterPropertiesSet() throws Exception {
start();
for (final Handler h : getHandlers()) {
if (h instanceof MyContext) {
final MyContext c = (MyContext) h;
if (c.getException() != null) {
throw new RuntimeException("failed to init context " + c.getDisplayName(),
c.getException());
}
}
}
}
}
В вашем beans.xml, просто замените org.mortbay.jetty.Server
(и удалить init-method="start"
) и org.mortbay.jetty.servlet.Context
с вашими собственными реализациями.
Этот код предназначен для Jetty 6, хотя (как показано на примере, который вы связали), так как это то, что у меня есть. Я не тестировал его, но это почти то же самое, что мы успешно используем в сочетании с WebAppContext. Чтобы распространить это на RequestLogHandler, вы можете либо сделать то же самое для любого обработчика, который используете, либо создать декоратор для переноса любого обработчика. Для этого вы можете посмотреть org.mortbay.jetty.handler.HandlerWrapper
.
Если вы не получили ответа здесь, попробуйте написать в список пользователей: [email protected] От: http://xircles.codehaus.org/projects/jetty/lists –