Каков наилучший способ обработки исключения ConstraintViolationException с помощью EJB3 и управления объектами в SLSB? - PullRequest
3 голосов
/ 29 октября 2010

вот мой фрагмент кода:

@Stateless
public class mySLSB {

@PersistenceContext(unitName = "db")
private EntityManager myEntityManager;

 public void crud(MyEntity myEntity) throws MyException {
  myEntityManager.merge(myEntity);
 }
}

Однако это объединение может вызвать ConstraintViolationException, которое не генерирует MyException (которое перехватывается в вызывающем сервлете).

Как лучше всего ловить исключения из спящего режима?

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Однако это слияние может вызвать ConstraintViolationException, который не генерирует MyException (который перехватывается в вызывающем сервлете). Как лучше всего ловить исключения из спящего режима?

При использовании JPA и API EntityManager вы получите javax.persistence.RollbackException с ConstraintViolationException в качестве причины. Так что поймайте RollbackException и используйте getCause() для его проверки.

1 голос
/ 31 октября 2010

Hibernate исключения создаются по особым причинам.Каждая из этих причин нуждается в отдельном лечении.Для некоторых исключений, например ConstraintViolationException, вам даже нужно различать, вызваны ли они ошибками пользователей или ошибками на стороне сервера.Если пользователь предоставил неверные входные данные, вы должны сообщить пользователю, что ввод должен быть исправлен.Если сервер манипулировал данными некорректно, вы должны сообщить клиенту, что что-то пошло не так, но это не его / ее ошибка.и действовать на основе фактического типа исключения.В зависимости от обнаруженного исключения, вы должны зарегистрировать достаточно информации, чтобы воспроизвести ошибку и соответственно информировать пользователя о сбое на стороне сервера (включая то, что он / она должен или может сделать для устранения причины).

В вашем примерекод, я бы сначала поискал возможные ошибки в вашем коде, которые вызывают ConstraintViolationException.Если пользователь предоставил неверные входные данные, вы можете извлечь подробную информацию, вызвав getConstraintName() экземпляра ConstraintViolationException.Затем эта извлеченная информация должна быть зарегистрирована и представлена ​​пользователю.

...