Получил Ejb
@Stateless
@Local
public class UserManagerBean implements UserManagerBeanLocal {
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public Long registerUser(User user) throws UserAlreadyExistException {
return userManagerDao.createUser(user);
}
}
UserManagerDao перехватывает исключение базы данных (или все исключения) и повторно выдает его в UserManagerBean.
@ApplicationException(rollback=true)
public class UserAlreadyExistException extends Exception {
}
По какой-то причине это исключение переносится в EJBException и выдается клиенту. Вот что я вижу на стороне клиента.
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.ejb.EJBException: Transaction aborted
javax.ejb.EJBException: Transaction aborted
javax.transaction.RollbackException: Transaction marked for rollback.
root cause
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException
Чего я хочу добиться, так это перехватить исключение приложения (UserAlreadyExistException) на стороне клиента, но контейнер обернуть его, и я не могу
только начал изучать j2ee6. Использование Glassfish 3.0. Я что-то упустил?
Обновление
Извините, я понял, в чем была проблема, я перехватывал и повторно вызывал исключение для метода EntityManager.persist в моем дао-слое, который на самом деле не вызывал никаких исключений, поскольку контекст постоянства сбрасывался в конце метода, а не в персистенте призывание. Это означает, что я даже не поймал это исключение
Но на самом деле это не решает мою проблему, я не понимаю, куда следует выкидывать исключение, поскольку оба метода являются транзакционными.