Правильная обработка исключений EJB - ClassNotFoundException от клиента - PullRequest
1 голос
/ 09 сентября 2009

У меня есть несколько EJB, которые используют Hibernate для сохранения данных в базе данных. У меня есть толстый клиент Swing, который общается с этими EJB. Клиент ничего не знает о базе данных (без файла драйвера).

Во время одной транзакции может быть сгенерировано исключение Hibernate ConstraintViolationException. Я перехватываю все исключения и помещаю их в EJBException примерно так:

catch(HibernateException e) {
    e.printStackTrace();
    throw new EJBException(e);
}

Проблема, которую я получаю, состоит в том, что когда исключение не вызывается JBoss Invoker на стороне клиента, генерируется исключение ClassNotFoundException (для PSQLException), поскольку у клиента нет jar драйвера sql в пути к классам.

Я изменил это приложение, чтобы всегда передавать перехваченное исключение в конструктор ejbexception, чтобы мы могли иметь историю трассировки стека. Теперь я понимаю, почему разработчики оригинала этого не сделали.

На данный момент я вижу два варианта - либо включить jar драйвера postgres с клиентом, либо удалить передачу перехваченного исключения в конструктор EJBException. Мне интересно, есть ли у кого-нибудь другие предложения, а также как другие обрабатывают исключения в своих EJB-компонентах?

1 Ответ

2 голосов
/ 09 сентября 2009

Я считаю, что клиент, конечный пользователь, не должен знать технические детали проблемы. Следовательно, на разных границах слоя вполне разумно преобразовать техническое исключение в общую ошибку «Произошла ошибка XYZ».

Схема, которую я видел, использовалась для сервера, чтобы назначить уникальный номер ошибки в точке, где обнаружено исключение. Затем он записывает диагностику в свои журналы, включая этот номер. Сообщения, сообщаемые клиенту, просто включают номер. Служба поддержки может затем сопоставить отчет пользователя о проблеме с этим конкретным номером ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...