У меня есть модуль плагина, который входит в веб-приложение. Если модуль не загружается правильно, веб-приложение не имеет смысла работать, и веб-приложение, вероятно, вообще не загружается, мы предпочли бы, чтобы этот модуль всегда инициализировался правильно. Если бы я выбрал исключение во время выполнения, он попал бы в журналы и просто проигнорировался, так как приложение все равно продолжит, и конечные пользователи никогда не узнают ... Я знаю, что ошибки должны быть выбраны только под исключительные условия, и они обычно связаны с ситуациями, от которых система не может оправиться, но что бы вы сделали в такой ситуации?Всегда ли бросать java.lang.Error?
ответ
только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 с данным сообщением.
Не знаете, как именно, но OSGi получила управление зависимостями пакетов (= аналогично плагинам). Один пучок не загружается, пока не будет готов другой пакет. Возможно, вы можете использовать этот же механизм (или просто использовать OSGi самостоятельно;)) ждать одного плагина/приложения до тех пор, пока не будет готов другой плагин. Или вы завершаете приложение во время запуска, если он не может правильно найти/загрузить ваш плагин.
Кажется, что молоток всех гвоздей, однако, он любит OSGi, я склонен утверждать. Кроме того, должен работать любой механизм управления зависимостями (IoC, вы его называете). – Riduidel
Регистрирует ошибку, а затем использовать System.exit просто выйти из приложения
Это не дает никаких указаний (вне кода возврата) о том, почему приложение не удалось. –
@HotLicks Я добавил предложение сначала зарегистрировать ошибку, а затем выйти. – Demi
- 1. Catching java.lang.Error
- 2. Сериализация java.lang.Error
- 3. Unity Android crash - java.lang.Error
- 4. Вопрос о Java.lang.Error
- 5. Бросать или не бросать
- 6. Slick addState java.lang.Error
- 7. java.lang.Error: Нерешенные проблемы компиляции
- 8. Должен ли я бросать в свою лямбду или бросать IEnumerable?
- 9. Javascript: безопасно ли «бросать неопределенные»?
- 10. Должен ли API бросать NullPointerExceptions
- 11. Могут ли реализации исключений Runtime.publish() бросать исключения?
- 12. Исключение в теме "main" java.lang.Error
- 13. Должен ли я бросать разные типы исключений?
- 14. java.lang.Error in Cucumber StepDefinition (JAVA)
- 15. Исключения в потоке «основной» java.lang.Error:
- 16. Исключение в теме «main»: java.lang.error
- 17. `isomorphic-fetch` response.json() метод всегда бросать Неожиданный конец ошибки ввода
- 18. Mockito-ing всегда бросать исключения, кроме определенных методов
- 19. Бросать или не бросать исключение в C#
- 20. Есть ли причина бросать исключение DivideByZeroException?
- 21. Должен ли я бросать исключение ArgumentException?
- 22. Безопасно ли бросать/ловить на стеке?
- 23. Должно ли исключение бросать первое дело?
- 24. Должна ли функция async никогда не бросать?
- 25. Linux оптимистичный malloc: будет ли новый всегда бросать, когда не хватает памяти?
- 26. Java: java.lang.Error: java.io.FileNotFoundException после создания jar-файла
- 27. Будет ли всегда предложение всегда выполняться всегда?
- 28. Исключение в теме «main» java.lang.Error: Неразрешенная компиляция
- 29. Как бросать/бросать мяч, пробирая его с помощью AndEngine?
- 30. «Нельзя бросать» и noexcept
не должно быть ошибки, но некоторые подходят подкласс, либо существующий или один можно определить. Но бросать подкласс ошибки в вашей ситуации. –