Configuração de transações no Spring

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 ");
		}
			
	}

Pessoal,

Estou desconfiado que o hibernate que está gerenciando as transações e não o spring por meio da annotation. Talvez seja por isso que o rollback não esteja funcionando.

E aí pessoal!!

Ainda estou aqui tentando resolver meu problema. Vou ver se minhas libs estão corretas, estou usando o seguinte:

Vou ver se consigo achar um exemplo na net com o uso do maven.

até

Salve pessoal!

Problema resolvido.

A questão era que a tabela mysql que eu criei era do tipo MyISAM que não suporta rollback! Criei a tabela novamente como InnoDB e funcionou legal! :smiley:

Agradecimentos ao pessoal do forum springsource!!

Até +