Как показано ниже, я обращаюсь к методу сервисного уровня внутри другого DAO.
(Каждый DAO в системе реализован с использованием класса HibernateDAOSupport)
Я хотел откатить транзакцию, когда # 1 или # 2 (комментарий в следующем коде) не удалось.
Но когда # 2 выдает исключение, # 1 не откатывается, и я вижу записи в базе данных.
@Transactional(readOnly=false, rollbackFor={DuplicateEmailException.class,DuplicateLoginIdException.class,IdentityException.class},propagation=Propagation.REQUIRES_NEW)
public void createUserProfile(UserProfile profile)
throws DuplicateEmailException, DuplicateLoginIdException,
IdentityException {
// #1 create principal using Identity Service
identityService.createPrincipal(profile.getSecurityPrincipal());
try {
// #2 save user profile using Hibernate Template
getHibernateTemplate().save(profile);
} catch (RuntimeException e) {
throw new IdentityException("UseProfile create Error", e);
}
}
Вот подпись для метода createPrincipal () 'IdentityService'.
public void createPrincipal(Principal principal) throws DuplicateEmailException,DuplicateLoginIdException,IdentityException ;
В IdentityService не настроено управление транзакциями
Что я здесь не так делаю?