Senhores
Estou tentando configurar o spring para gerenciar as minhas transações, eu ja pesquisei na internet e achei varios
exemplos e a minha configuração esta igual a estes exemplos.
Sendo que ao executar minha aplicações eu anoto o meu método com @Transactional e após salvar um registro eu estou forçando um erro para a
aplicação fazer rollback sendo que a mesma não desfaz o que foi gravado.
applicationContext.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
método anotado
@Transactional(readOnly=true, propagation=Propagation.REQUIRES_NEW)
public boolean salvar(Pessoa pessoa) {
try {
if(pessoa == null) {
throw new RuntimeException("application.object.null");
}
if(pessoa.getNome() == null || pessoa.getNome().equals("")) {
throw new BusinessException("pessoa.label.nome.empty");
}
if(pessoa.getSobreNome() == null || pessoa.getSobreNome().equals("")) {
throw new BusinessException("pessoa.label.sobreNome.empty");
}
Integer id = pessoaDao.save(pessoa);
if(id != null && id > 0) {
logger.debug("==========> Object saved with identity ("+ id +")");
throw new RuntimeException("application.object.null");
//return true;
}
return false;
} catch (DaoException ex) {
throw new RuntimeException(ex);
}
}
alguém sabe porque esta acontecendo isso?