Spring 3 + JPA 2  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
rogeriosantos77
Java Ninja
[Avatar]

Membro desde: 30/07/2007 15:00:53
Mensagens: 281
Localização: Jerusalém
Offline

Srs,

Quando eu anoto um método como @Transactional o default dele não é caso ocorra uma exception no método ele executar um rollback da transação ?

Pergunto isso pq criei um método e anotei ele com @Transactional e esse método persiste dados em duas tabelas distintas, porém em certo ponto do método ele faz um processamento e dependendo do resultado ele lança uma Exception (ServiceException é o nome da Excessão que o método lança), porém qdo ele lança a exception um rollback não ocorre. Na verdade o rollback soocorre se eu incluir o atributo rollbackFor={ServiceException.class} na anotação

É isso memso ? O lançamento de exception não é default para ocorrer rollback ?

Rogerio L Santos
@roglusa - Twitter
[WWW] [MSN]
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1695
Offline

Cara, também tenho essa dúvida.
Com EJB funciona o rollback normal quando há alguma exception, mas com Spring se eu não informar o rollbackFor ele não funciona.

Será esse o comportamento esperado?
Até acredito que exista alguma configuração que se possa fazer pra não ser necessário, mas fico com a impressão que lá vem xml...

A propósito, eu conheço vc hehehe
rogeriosantos77
Java Ninja
[Avatar]

Membro desde: 30/07/2007 15:00:53
Mensagens: 281
Localização: Jerusalém
Offline

Balloni ? E ai blz?

Pelo jeito vamos continuar com a dúvida hein rs.

Rogerio L Santos
@roglusa - Twitter
[WWW] [MSN]
FernandoFranzini
GUJ Master
[Avatar]

Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline

rogeriosantos77 wrote:Srs,

Quando eu anoto um método como @Transactional o default dele não é caso ocorra uma exception no método ele executar um rollback da transação ?

Pergunto isso pq criei um método e anotei ele com @Transactional e esse método persiste dados em duas tabelas distintas, porém em certo ponto do método ele faz um processamento e dependendo do resultado ele lança uma Exception (ServiceException é o nome da Excessão que o método lança), porém qdo ele lança a exception um rollback não ocorre. Na verdade o rollback soocorre se eu incluir o atributo rollbackFor={ServiceException.class} na anotação

É isso memso ? O lançamento de exception não é default para ocorrer rollback ?

Nâo existe default de roolback no spring...vc tem que declarar qual é a exception que fara o rooback, uma vez que pode acontecer casos que em vc pode lancar um exception q não volte a transação corrente. Ou seja...é isso mesmo!

This message was edited 1 time. Last update was at 28/10/2011 06:56:52


Fernando Franzini
[Email] [WWW]
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1695
Offline

FernandoFranzini wrote:
rogeriosantos77 wrote:Srs,

Quando eu anoto um método como @Transactional o default dele não é caso ocorra uma exception no método ele executar um rollback da transação ?

Pergunto isso pq criei um método e anotei ele com @Transactional e esse método persiste dados em duas tabelas distintas, porém em certo ponto do método ele faz um processamento e dependendo do resultado ele lança uma Exception (ServiceException é o nome da Excessão que o método lança), porém qdo ele lança a exception um rollback não ocorre. Na verdade o rollback soocorre se eu incluir o atributo rollbackFor={ServiceException.class} na anotação

É isso memso ? O lançamento de exception não é default para ocorrer rollback ?

Nâo existe default de roolback no spring...vc tem que declarar qual é a exception que fara o rooback, uma vez que pode acontecer casos que em vc pode lancar um exception q não volte a transação corrente.


Bom, imagino que poderia ser default ele dar rollback quando houvesse exceção exceto nos que houverem declarados "norollbackfor" ou "rollbackonly".
Mas anyway, já está esclarecida a questão. Só seria legal se encontrássemos uma referência da documentação que indicasse isso. Procurando...

Obrigado!
FernandoFranzini
GUJ Master
[Avatar]

Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline

Vc pode declarar o @Transaction em cima da classe que é assumido por padrão em todos os métodos...Com isso vc centraliza uma vez....

Fernando Franzini
[Email] [WWW]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team