Gerenciar transações com spring

0 respostas
antoniopopete
O que estou fazendo de errado na configuração do spring que ele não está dando rollback nas transações? Vou postar o app.xml com as partes do spring que configuro tudo relacionado a transação.
[b]<tx:annotation-driven transaction-manager="transactionManager" />[/b]
<bean id="txProxyTemplate" abstract="true"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="add*">PROPAGATION_REQUIRED</prop>
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>

	<bean id="taxonomiaService" parent="txProxyTemplate">
		<property name="target">
			<bean
				class="br.ucsal.projeto.domain.services.impl.TaxonomiaServiceImpl">
				<property name="taxonomiaDAO">
					<ref bean="taxonomiaDAO" />
				</property>
				<property name="conceitoDAO">
					<ref bean="conceitoDAO" />
				</property>
			</bean>
		</property>
	</bean>

	<bean id="conceitoService" parent="txProxyTemplate">
		<property name="target">
			<bean
				class="br.ucsal.projeto.domain.services.impl.ConceitoServiceImpl">
				<property name="conceitoDAO">
					<ref bean="conceitoDAO" />
				</property>
			</bean>
		</property>
	</bean>

<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

	<bean id="txAttributeSource"
		class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
		<property name="properties">
			<props>
				<prop key="add*">PROPAGATION_REQUIRED</prop>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
				<prop key="send*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>

	<bean id="txInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager">
			<ref local="transactionManager" />
		</property>
		<property name="transactionAttributeSource">
			<ref local="txAttributeSource" />
		</property>
	</bean>

	<bean id="autoProxyCreator"
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="interceptorNames">
			<list>
				<idref local="txInterceptor" />
			</list>
		</property>
		<property name="beanNames">
			<list>
				<value>*Dao</value>
				<value>*DAO</value>
			</list>
		</property>
	</bean>

	<bean id="taxonomiaDAO"
		class="br.ucsal.projeto.domain.dao.impl.TaxonomiaDAOImpl"
		parent="daoTemplate" />

Minha classe de serviço:

@Transactional(propagation=Propagation.REQUIRED)
public class TaxonomiaServiceImpl implements TaxonomiaService {
//omitido outras coisas inclusive atributos..

public void save(TaxonomiaModel taxonomiaModel,List<ConceitoModel> conceitos) {		
		Long id = (Long) taxonomiaDAO.save(taxonomiaModel);
		taxonomiaModel = taxonomiaDAO.load(id);
		for(ConceitoModel conceitoModel: conceitos){
			conceitoModel.setTaxonomiaModel(taxonomiaModel);
			conceitoDAO.save(conceitoModel);
		}
	}

Ele salva uma taxonomia e quando tenho erro no método save de conceitoDAO, ele não da rollback na taxonomia persistida anteriormente.

Criado 18 de maio de 2008
Respostas 0
Participantes 1