Transaction Rollback - Spring

3 respostas
B

Fala pessoal!

Estou com um problema aqui e queria saber se alguém já passou por isso…

Tenho um serviço ‘X’ que chama várias vezes o serviço ‘Y’. O serviço ‘Y’ pode me retornar erros e estes erros serão enviados para o usuário via e-mail.

O problema é que quando um dis serviços ‘Y’ retorna um erro o Spring automaticamente faz um rollback da transação iniciada por ‘X’, e no final não consigo gravar nenhum dado dos serviços ‘Y’ que funcionaram…

Alguém sabe como posso resolver este problema? Talvez forçar um commit a cada execução de um serviço que funcionou?

Segue a exceção:
org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only

3 Respostas

A

Olá amigo,

nunca enfrentei problema semelhante, mas a opção noRollbackFor não resolveria o seu problema?

noRollbackFor - an optional array of exception classes that must not cause rollback.

[]'s

F

Acho que seu problema pode ser resolvido de duas formas:

  1. Declarando qual a exceção não deve provocar rollback no serviço y:

<tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="y" no-rollback-for="Exception1, Exception2, Exception3,..."/> </tx:attributes> </tx:advice>

  1. Declarando que o serviço x não deve propagar a transação:

<tx:advice id="noTxAdvice"> <tx:attributes> <tx:method name="x" propagation="NEVER"/> </tx:attributes> </tx:advice>

B

Fala pessoal,
acabei de verificar aqui e já tenho uma regra para no-rollback-for, e é chamada usando aspectos com a tag:

&lt;aop:config&gt;
		&lt;aop:pointcut ...

A regra é pegar todas as classes que setejam no pacote service e setar o rollbackonly para true…

A regra para o serviço não propagar a transação seria perfeita, mas esta regra via aspectos é executada mesmo que eu crie esta outra regra.

Você sabe se existe uma maneira de eu fazer este aspecto ignorar esta minha classe de serviço, sem ter que mudar o que tenho hoje em dia?

Não posso mudar muita coisa, porque outras regras de negócio podem parar de funcionar.

Abs
>

Criado 4 de março de 2010
Ultima resposta 8 de mar. de 2010
Respostas 3
Participantes 3