Вот ваша архитектура:

Как вы хотите обработать ошибку на уровне DAO?Вернуть поддельные данные?Пустая коллекция?если вы не можете, просто позвольте всплывающему исключению.
А как насчет обработки на уровне сервиса?Вы знаете, что база данных не работает, так что вы можете вернуться к действию Struts?Пустой результат?Объект ошибки?Не является ли исключение объектом ошибки?
Таким образом, исключение появляется в действии Struts.Здесь у вас есть несколько вариантов.Если исключение действительно скажет что-то пользователю, и ваш графический интерфейс подготовлен, вы можете вернуть другое представление (и зарегистрировать исключение здесь).
Но что, если вы поймаете NullPointerException
в действии Struts?Будете ли вы обрабатывать это отдельно в каждом действии Struts?Нет, так что передавайте исключение еще дальше (!)
Я думаю, вы поняли - пока вы не знаете, как обработать исключение (и ведение журнала не обрабатывает ), пусть клиент наведет порядок.В противном случае вы только скрываете проблему и увеличиваете убытки (например, транзакции не откатываются, пользователи видят неверные результаты).
Я бы посоветовал внедрить generic механизм обработки исключений, который регистрирует исключение и возвращает HTTP 500 пользователю.Должно появиться мягкое сообщение об ошибке ( без трассировки стека), и пользователь должен извиниться.Вы должны исследовать каждую ошибку, которая достигает этого уровня.
Насколько я помню, Struts (и практически каждая веб-инфраструктура) имеет некоторый централизованный способ обработки исключений.( Документы по обработке исключений Struts 2 )