Прежде чем продолжить, пожалуйста, внимательно посмотрите на:
Ниже приведены некоторые из общепринятых принципов
обработка исключений:
- Если вы не можете обработать исключение, не отлавливайте его.
- Если вы поймали исключение, не глотайте его.
- Поймать исключение как можно ближе к его источнику.
- Записать исключение, где вы его поймали, если только вы не планируете его перебрасывать.
- Структурируйте свои методы в соответствии с тем, насколько тонкой должна быть обработка исключений.
- Используйте столько типизированных исключений, сколько вам нужно, особенно для исключений приложения.
Пункт 1 явно находится в конфликте с пунктом 3. Практическим решением является компромисс> между тем, насколько близко к источнику вы поймали исключение, и как далеко вы допустили его падение, прежде чем полностью потеряли намерение или контент оригинального исключения.
IBM DeveloperWorks: лучшие практики EJB
Обычно рекомендуется использовать проверенные исключения для исключений приложений на бизнес-уровне. Я предпочитаю следовать шаблону бизнес-интерфейса, чтобы отделить бизнес-уровень от пользовательского интерфейса и веб-уровня. Это позволит мне рассматривать ваш бизнес-уровень как библиотеку сервисного уровня, и вызывающие абоненты могут по-разному обрабатывать различные ситуации при вызове этого уровня. Это одна из причин, по которой вы можете захотеть включить проверенные исключения, поскольку вы можете по-разному реагировать на разные исключения. Кроме того, включение проверенных исключений обычно помогает коду вызывающей стороны лучше понимать, какие могут возникнуть различные ситуации при вызове некоторых функций. Возможно, стоит взглянуть на шаблон бизнес-делегата и на то, как он может помочь вам в обработке исключений. Вкратце, шаблон бизнес-делегата позволяет создать очень тонкий слой между бизнес-уровнем и веб-уровнем, где можно выполнять такие вещи, как обработка исключений.
Независимо от того, как вы поступите с этим, убедитесь, что вы понимаете смысл добавления исключения приложения в приложение Java EE. Вам может потребоваться выяснить, как она взаимодействует с вашей логикой управления транзакциями, особенно когда речь идет об откате транзакций. В моей работе мне пришлось добавить исключение @ApplicationException (rollback = false), чтобы запретить менеджеру транзакций откатывать мою транзакцию, когда исключение генерируется и распространяется вверх.
Вы можете сказать, что я работал с EJB, но эти концепции, вероятно, очень применимы и к вашему дизайну.
Итак, вернемся к вашим вопросам:
Необходимо ли регистрировать исключения на бизнес-уровне?
Нет необходимости, если вы планируете войти позже. Вам лучше разработать стратегию ведения журнала на высоком уровне и регистрировать там все обнаруженные исключения.
Если нет, нужно ли вообще регистрировать исключения (особенно непроверенные
из них)?
Я думаю, что вы должны регистрировать исключения, потому что это поможет вам позже отладить любые проблемы. Пользователь обычно не достаточно подкован, чтобы захватить любой вывод, который может быть получен, если исключение распространяется и печатается на его / ее экране без вашей обработки.
Что происходит с необработанными исключениями, которые не регистрируются с помощью log4j?
(Если они все еще печатаются в консоли, какова цель
log4j?)
Я думаю, что он в конечном итоге будет перехвачен веб-контейнером и выведен на консоль. Если исключение распространяется вверх и достигает исключения веб-контейнера, обрабатывающего сети безопасности, ваше исключение выходит из-под контроля. Обычно это признак плохого дизайна. Лучше всего, если вы будете контролировать свои исключения. Зачем удивляться, как контейнер будет реагировать на неисследованное исключение? Также, насколько полезным будет это исключение для пользователя? Я думаю, что информация, представленная из неисследованных исключений, почти бесполезна, поскольку они настолько далеки от источника ошибки, что становятся неактуальными и трудными для работы при отладке.