Tratamento de Exceção do Hibernate

2 respostas
Oliverbill

Olá Pessoal !

Estou com uma dúvida relacionada à tratamento de exceção do Hibernate.

Considerem um ambiente Open-Session-In-View (framework de integração próprio+JSF e Hibernate), com transação e conexão gerenciadas pelo próprio framework da empresa (portanto,não-gerenciadas pelo conteiner).

Sabemos que a Session do Hibernate executa os statements SQL em modo batch, após o flush() - que ocorre automaticamente no COMMIT. Ou seja, qualquer tratamento de SQLException ou HibernateException antes do fechamento da transação (transparente, neste caso) me parece inútil, uma vez que na ocorrência de uma regra de banco (por exemplo) a exceção será lançada somente no fechamento da transação (após a execução da camada de visualização).

Assim, qualquer mensagem(FacesMessage) de sucesso lançada na camada de visualização, fica sem credibilidade, pois pode ocorrer um erro durante a execução do batch, e ocorrer ROLLBACK da transação.

Existe alguma forma de tratar estas exceções utilizando algum tipo de filtro ou interceptador ? Ou a única forma de tratar estas exceções seria na própria classe do framework que gerencia a transação ?

2 Respostas

Paulo_Silveira

oi oliver

voce tem toda razao aqui. as vezes, de acordo com o framework, fica dificil voce fazer o commit() da transacao ANTES da renderizacao do JSP. Ai voce tem um problema: talvez ele renderize a tela com um OK granitico, e depois vai dar exception so nos logs.

Oliverbill

Paulo,

Mas o Hibernate não oferece nenhuma solução (tipo um filtro ou interceptador) para combater esta fragilidade ? Me parece uma falha tão grosseira que chego a pensar que estou deixando de configurar/implementar alguma classe do Hibernate.

Não consigo acreditar em tamanha vulnerabilidade. Sem um tratamento de exceção eficaz, as mensagens que exibo para o usuário perdem toda a confiabilidade.

Você já enfrentou este problema ? Me parece um problema comum às aplicações Web.

Criado 7 de janeiro de 2010
Ultima resposta 17 de jan. de 2010
Respostas 2
Participantes 2