2010-04-22 3 views
7

У меня есть модуль плагина, который входит в веб-приложение. Если модуль не загружается правильно, веб-приложение не имеет смысла работать, и веб-приложение, вероятно, вообще не загружается, мы предпочли бы, чтобы этот модуль всегда инициализировался правильно. Если бы я выбрал исключение во время выполнения, он попал бы в журналы и просто проигнорировался, так как приложение все равно продолжит, и конечные пользователи никогда не узнают ... Я знаю, что ошибки должны быть выбраны только под исключительные условия, и они обычно связаны с ситуациями, от которых система не может оправиться, но что бы вы сделали в такой ситуации?Всегда ли бросать java.lang.Error?

+0

не должно быть ошибки, но некоторые подходят подкласс, либо существующий или один можно определить. Но бросать подкласс ошибки в вашей ситуации. –

ответ

4

толькоError, который я регулярно использовал в бизнес-коде, ExceptionInInitializerError. У вас нет другого выбора в блоках инициализатора static.

Но даже если вы выбросите это внутри веб-приложения, веб-приложение все равно продолжит прослушивание HTTP-запросов. Лучше всего сделать загрузку или инициализацию модуля внутри Filter, прослушивая url-pattern из /*, и пусть Filter блокирует HTTP-запросы соответственно. Например.

private boolean allModulesAreLoaded; 

@Override 
public void init(FilterConfig config) { 
    try { 
     // Load modules. 
     allModulesAreLoaded = true; 
    } catch (Exception e) { 
     // Handle. 
    } 
} 

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    if (allModulesAreLoaded) { 
     chain.doFilter(request, response); 
    } else { 
     throw new ServletException("Not all modules are loaded."); 
    } 
} 

Это приведет к ошибке HTTP 500 с данным сообщением.

1

Не знаете, как именно, но OSGi получила управление зависимостями пакетов (= аналогично плагинам). Один пучок не загружается, пока не будет готов другой пакет. Возможно, вы можете использовать этот же механизм (или просто использовать OSGi самостоятельно;)) ждать одного плагина/приложения до тех пор, пока не будет готов другой плагин. Или вы завершаете приложение во время запуска, если он не может правильно найти/загрузить ваш плагин.

+0

Кажется, что молоток всех гвоздей, однако, он любит OSGi, я склонен утверждать. Кроме того, должен работать любой механизм управления зависимостями (IoC, вы его называете). – Riduidel

-1

Регистрирует ошибку, а затем использовать System.exit просто выйти из приложения

+0

Это не дает никаких указаний (вне кода возврата) о том, почему приложение не удалось. –

+0

@HotLicks Я добавил предложение сначала зарегистрировать ошибку, а затем выйти. – Demi

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