2009-09-09 2 views
1

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

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

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

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

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

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

ответ

2

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

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

+0

+1 для «клиента не нужно знать технические детали». Я думаю, что уникальный подход числа ошибок совершенно не нужен. Все клиенты должны знать, что «произошла ошибка сервера». Журналы сервера должны предоставить всю необходимую информацию для устранения неполадки. – ChssPly76

+0

Когда у вас много пользователей, и они не всегда своевременны или точны в своих отчетах об ошибках, и у вас нетривиальная n-ярусная архитектура, я считаю, что эти номера ошибок действительно работают и далеки от ненужных. Объем работы по реализации тривиален. – djna

+0

Мой плохой. Я не имел в виду «лишнее», как «бессмысленное» :-) Мы пробовали этот подход и обнаружили, что фактическое число ошибок обратило нас примерно на 0,5% всех случаев; остальные были сообщены как «какая-то ошибка» или «окно всплыло». Но, возможно, ваши пользователи лучше, чем мои - я могу вам только позавидовать :-) – ChssPly76

Смежные вопросы