EJB 3.0, как мне обернуть исключение, чтобы клиент мог его обработать? - PullRequest
1 голос
/ 23 марта 2011

Получил 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 в моем дао-слое, который на самом деле не вызывал никаких исключений, поскольку контекст постоянства сбрасывался в конце метода, а не в персистенте призывание. Это означает, что я даже не поймал это исключение

Но на самом деле это не решает мою проблему, я не понимаю, куда следует выкидывать исключение, поскольку оба метода являются транзакционными.

1 Ответ

0 голосов
/ 23 марта 2011

Вы должны вызвать метод сброса EntityManager во время транзакции, чтобы перехватить DatabaseException и выдать свое собственное исключение.

...