Pessoal, estou desenvolvendo uma aplicação usando : Hibernate, JSF, PrimeFaces e Spring. Estou usando o padrão OpenSessionInView para abrir, fechar, commitar e dar rollback nas transações automaticamente através de um Filter.
O problema é que eu não estou conseguindo garantir que a mensagem de “Operação Realizada com Sucesso” seja verdadeira porque no ManagedBean se eu der a mensagem após o Save ela aparece na pagina mas se no momento do commit realizado pelo Filter der uma exceção e ocorrer rollback a mensagem que aparece é realizada com sucesso, mas aconteceu uma execeção, então a mensagem fica sendo falsa.
Preciso de Ajuda para implementar a questão das mensagens para o usuário corretamente.
Não entendo muito de Spring mas… VocÊ poderia fazer o commit no ManagedBean e deixar apenas o close para o filter?
O
Oliveira.caio
No seu ManagedBean voce chama um metodo do service certo?
Caso sim e só colocar @Transactional no metodo ai a delimitação da transação nao será o filtro.
Caso a chamada desse metodo der erro voce não exibi a mensagem de ok.
alexfe
jakefrog, então tentei fazer o que vc disse, fiz o commit no final do metodo do ManagedBean e apenas o close no filter, mas não deu certo, ocorrem problemas de transação ativa para o carregamento da tela.
Teria como eu idendificar o close ou uma exeção do filter e exibir a mensagem correta ??
Ou alguma outra solução ?
alexfe
Oliveira.caio:
No seu ManagedBean voce chama um metodo do service certo?
Caso sim e só colocar @Transactional no metodo ai a delimitação da transação nao será o filtro.
Caso a chamada desse metodo der erro voce não exibi a mensagem de ok.
Oliveira.caio, sim no meu ManagedBean eu chamado metodos de persistencia criados no controller. Eu conheço pouco de Spring, o que a anotação @Transactional faria realmente ???
alexfe
Existe a possibilidade de identificar o commit ou uma exceção realizado pelo Filter e exibir mensagens de erro ou sucesso ??
alexfe
Pessoal, consegui resolver o problema. Após cada operação de CRUD, ex: save, delete, etc. coloquei para que o Flush do Hibernate fosse chamado.