VRaptor - Como interceptar um StaleObjectStateException  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
CommanderShepard
Debugger

Membro desde: 11/02/2009 13:17:13
Mensagens: 62
Offline

tudo bom pessoal
preciso interceptar o StaleObjectStateException do Hibernate
pra isso criei um Interceptor mas ele tah engolindo a exceção



e pelo objeto "Exception exception" eu não consigo chegar na causa da exceção (no caso o StaleObjectStateException)
alguma dica?
obrigado
Rafael Guerreiro
JavaEvangelist

Membro desde: 26/10/2010 07:28:13
Mensagens: 479
Localização: São Paulo/SP
Offline

Se você debugar, qual exception acontece?





CommanderShepard
Debugger

Membro desde: 11/02/2009 13:17:13
Mensagens: 62
Offline

tudo bom Rafael
abaixo um print do Inspect do Eclipse com o objeto "Exception exception"

Rafael Guerreiro
JavaEvangelist

Membro desde: 26/10/2010 07:28:13
Mensagens: 479
Localização: São Paulo/SP
Offline

Ele não está dando um StaleObjectStateException...

Ou o RollbackException extends StaleObjectStateException?





CommanderShepard
Debugger

Membro desde: 11/02/2009 13:17:13
Mensagens: 62
Offline

o StaleObjectStateException acontece
ele é printado na stack trace, o funcionamento dele tá ok (estamos testando a concorrência e até agora tudo ok)
o problema tá sendo pegar ele no Interceptor pra jogar um erro legal pro usuário
senão me engano a árvore do StaleObjectStateException é "StaleObjectStateException->StaleStateException->HibernateException->RuntimeException->..." e o RollbackException é "javax.algumacoisa"

This message was edited 2 times. Last update was at 13/06/2011 09:32:07

Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

o problema é que antes de chegar em vc está passando pelo interceptor de transações, e ele tá tentando dar o commit de uma transação que já estava marcada como rollback only.

use a última versão do VRaptor e anote seu interceptor da StaleObject com:


assim a exception vai passar antes (na volta) pelo seu interceptor

--
Caelum
www.caelum.com.br

CommanderShepard
Debugger

Membro desde: 11/02/2009 13:17:13
Mensagens: 62
Offline

tudo bom Lucas
implementando sua sugestão está gerando uma exceção



abaixo o código do meu Interceptor



e outra dúvida... o HibernateTransactionInterceptor é um open session in view?

obrigado

This message was edited 1 time. Last update was at 13/06/2011 12:35:54

Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

desculpe, vc está usando jpa... o interceptor é JPATransactionInterceptor. Use:



e sim, ele é um OpenSessionInView.

Detalhe importante: vc está controlando transações ou é o VRaptor que está fazendo isso? se for você isso que eu falei não vai funcionar

--
Caelum
www.caelum.com.br

CommanderShepard
Debugger

Membro desde: 11/02/2009 13:17:13
Mensagens: 62
Offline

quem está controlando as transações é o Spring
será que tem jeito de pegar o StaleObjectStateException via Interceptor?
ficaria perfeito pra mim pois já tenho um Interceptor para erros genéricos que faz isso (o que recebe o objeto "Exception exception")
aí seria apenas adicionar mais um catch no try
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

vc está usando o @Transactional então, certo?

o problema é que ele tá escondendo a exception, não sei se vc vai conseguir capturá-la de um jeito legal...
pq vc quer fazer isso mesmo? vc vai conseguir se recuperar do erro? ou é só logging?

--
Caelum
www.caelum.com.br

CommanderShepard
Debugger

Membro desde: 11/02/2009 13:17:13
Mensagens: 62
Offline

isto
estou utilizando "@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)"
eu vou me recuperar do StaleObjectStateException e mostrar uma mensagem pro usuário: "Este registro foi atualizado por outro usuário, recarregue os dados e tente novamente."
essa vai ser a mensagem padrão pra quando algum erro de concorrência acontecer

e eu tb não to conseguindo pegar o StaleObjectStateException direto do meu Controller



tah foda

This message was edited 1 time. Last update was at 13/06/2011 16:30:23

Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

tenta fazer esse try...catch mais perto da session/entityManager... por exemplo no dao ou coisa do tipo

--
Caelum
www.caelum.com.br

 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team