Boa noite comunidade!
Estou iniciando um projeto utilizando Spring 3.0.6 + Hibernate 3.9.0
A integração ocorreu de maneira satisfatória. Na configuração da transação estou enfrentando um problema, elas simplesmente não executam o rollback quando gero uma exceção.
Abaixo segue minha configuração, agradeço a boa vontade da comunidade.
<context:annotation-config/>
<context:component-scan base-package="projeto.cmi"/>
<tx:annotation-driven transaction-manager="txManager"/>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:projeto/cmi/jdbc.properties"/>
</bean>
<bean id="cmiDS" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<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.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="cmiDS"/>
<property name="packagesToScan" value="projeto.cmi"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
@Repository("contatoRepository")
public class ContatoRepository {
@Autowired
private SessionFactory sessionFactory;
public void persist(Contato contato){
sessionFactory.getCurrentSession().save(contato);
}
}
@Transactional(readOnly=true)
@Service("contatoRegra")
public class ContatoRegra {
@Autowired
private ContatoRepository contatoRepository;
@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public void persist(Contato contato) throws Exception {
contatoRepository.persist(contato);
throw new RuntimeException();//Aqui gero a Exception, o rollback não está sendo feito
}
}
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext(
new String[]{"spring-persistencia.xml"});
ContatoRegra regra = context.getBean("contatoRegra",
ContatoRegra.class);
Contato contato = new Contato();
contato.setDataCadastro(new Date(System.currentTimeMillis()));
contato.setEmail("testeInsertTransacao@spring.com");
contato.setNome("Testando insert Transacao");
contato.setObservacao("Minha obs Transacao");
contato.setTelefone("(81) 6154-2541");
try{
regra.persist(contato);
}catch(Exception e){
System.out.println("EXCECAO GERADA ");
}
}