Это когда-нибудь в порядке для броска java.lang. Ошибка?

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

7
задан finnw 9 May 2010 в 23:10
поделиться

2 ответа

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

Но даже если вы бросите это в веб-приложение, оно все равно продолжит прослушивание HTTP-запросов. Лучше всего выполнить загрузку или инициализацию модуля внутри фильтра , прослушивая URL-шаблон из / * , и пусть Фильтр ] соответственно заблокировать 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 с данным сообщением.

4
ответ дан 7 December 2019 в 14:29
поделиться

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

1
ответ дан 7 December 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: