Правильная обработка исключений EJB - ClassNotFoundException от клиента

StackOverflow https://stackoverflow.com/questions/1401108

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть несколько 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-компонентах?

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top