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