Olá, estou desenvolvendo um projeto com Ajax4JSF e Richfaces e me deparei com um problema. Eu havia criado um filter para o hibernate em que a toda requisição a sessão era aberta e uma transação iniciada, porém, como estou usando Ajax existem requisições a todo momento e nem todas devem iniciar uma conexão com o banco.
Diante disso não sei qual a melhor maneira de abrir e fechar as sessões e transações do hibernate. Tentei usar aquele tutorial aqui do GUJ de controle de transação com annotations, mas num funfa, ele nunca inicia a transação.
Eu não gostaria de abrir e fechar em cada método dos meus DAO’s, mas se não houver alternativa melhor…
com certeza abrir e fechar uma sessão em toda requisição é meio feio. Mas não vejo muitos problemas com esta solução. Sempre usei assim em todos os meus projetos.
Talvez você poderia tentar bolar algum padrão de URL que deveria ter uma sessão aberta e aplicar o filtro apenas nestas URL’s, mas não sei se seria uma boa solução.
Bem, se você pensar um pouco pode encontrar várias soluções, mas não sei se compensa tanto assim.
ACDias
A solução do padrão URL funcionaria se eu não estivesse usando AJAX, pois eu faço requests sem mudar a URL.
É… Acho q vou colocar esse controle nos DAO’s mesmo.
Vlw
marcelo_mococa
você está confundindo as coisas.
O Ajax é apenas uma maneira diferente de fazer requisições para o servidor. Ou seja, para o servidor não interessa se é Ajax ou não. Todo o tratamento aplicado é o mesmo.
ACDias
Sim. Sim. Me expressei mal. Acho que a melhor solução é colocar no DAO mesmo…
Tenho mais requisições que não necessitam de iniciar uma transação do que as que precisam. Mesmo que não seja a solução ideal, é a que funciona com menos dores de cabeça.
F
Flin
Se teu contexto transacional está na camada de service e você está usando um ConnectionPool o overhead é mínimo.
ACDias
Bem…
Agora surgiu um problema, pois não posso fechar a conexão do Hibernate, pois tenho um objeto que fica na sessão que é populado com os dados do banco, então quando tento acessá-los depois de ter fechado uma sessão do hibernate estou recebendo um erro por tentar acessar um objeto de uma sessão fechada.
Então percebi que terei de usar o filtro mesmo, porém isso vai gerar erro em outra área do sistema, onde eu tenho um erro em que o hibernate tenta persistir um objeto onde não deveria fazê-lo.