Padrão para tratamento de exceções com Hibernate

Galera,

Eu estou com um probleminha para definir um padrão para tratar as exeções que são geradas pelo Hibernate. Seguinte, estou usando o padrão Open Session In View que consta na Wiki do Hibernate para deixar o controle de abrir e fexar as transações com o banco por um Filter. Isso funciona legal quando não ocorre erro, como não estou usando nenhum FrameWork por enquanto em um projeto pequeno que estou fazendo, o controle de erro quem faz sou eu mesmo.

E tenho a seguinte situação: o Filter está sendo utilizado para todas as requisições com *.db onde efetuo operações pelo Hibernate. Ou seja, se estou em uma tela de cadastro onde listo todos os usuários e quero incluir um novo vou para um /incluiUsuario.db por exemplo e faço as operações em um Servlet que usa o Hibernate, e ao final tenho que renderizar novamente a página de cadastro com a lista dos usuários para mostrar o novo usuário adicionado.

Aí se eu forçar um erro nessa inclusão eu tenho que efetuar um rollback da transação e, como para listar novamente os usuários tenho que acessar o banco e vou para um mesmo servlet *.db que monta a view do listaUsuarios.jsp daria erro porque não foi criada uma nova transação após o erro gerado.

Então fica minha pergunta:“Como procedo para fazer essa verificação e se ocorrer um erro criar outra transação para a próxima operação com o banco?”. Existe algum padrão a seguir?

OBS: Para dar jeito nisso eu estou capturando o erro da chamada ao método que efetua as operações com o banco e dentro dele iniciando uma nova transação. Creio que não seja a melhor saída. Espero que me ajudem. Obrigado

Daniel Nunes

Acredito que exceções de “infraestrutura”, como a do Hibernate não devem ser tratadas pela sua aplicação e sim pelo container. O máximo que você pode fazer é capturar a exceção para efetuar o rollback da transação, mas depois relançar a exceção.

Também acho que erros desse tipo não podem ser forçados, quando ocorrem provavelmente significa que tem alguma inconsistência no sistema ou algum bug.

Humm resumindo: “eu estou fazendo ‘cagada’” :shock: hehehe. Brincadeira =)

Mas é verdade cara, porque eu estou parando pra pensar aqui, o erro eu ‘forcei’ porque estava fazendo duas hipóteses pra uma ação e copiei a primeira e alterei exceto uma parte. Aí lógico que iria dar erro do Hibernate quando fosse testar. Mas fiquei com a pulga atrás da orelha e fiquei perdendo tempo com isso :roll: .

:arrow: Valeu pela luz.