Boa tarde a todos.
Em minha aplicação, sigo sempre a mesma forma de trabalhar com a session do Hibernate: abro e fecho sempre que houver uma solicitação ao banco - não sei se é a melhor forma de se trabalhar como hibernate, visto que é uma aplicação web com um número razoável de acessos.
Enfim… minha dúvida mesmo é que estou criando uma classe que ficará por conta de executar algumas ações no banco (que vão precisar de abrir e fechar transações) sempre que um usuário efetuar o login. Criei a classe como espécie de Serviço, que também será utilizada por outras partes do sistema. Implementei em forma de Singleton e minha dúvida agora é se é melhor separar uma Session do Hibernate somente pra essa classe. Isto é, criar um campo static contendo essa session e utilizá-la em todos os métodos da classe que precisarão ir ao banco. Dessa forma não precisaria abrir e fechar uma session toda vez que a classe fosse chamada. Em contra partida acho que reservando uma session somente pra uma classe poderia limitar o número de acessos ao banco, estou certo?
Enfim, até que ponto vale a pena fazer isso ou mandar ele abrir/fechar uma sessão sempre?
Obrigado a todos.
Acho que essa sua ultima pergunta é bem complicada, tem de levar em consideração varias coisas antes de responder, enfim cada caso é um caso, mas sobre sua duvida de acesso ao banco em minhas aplicações web eu uso em parte a idéa do Singleton mas não deixo como static porque isso atrapalha na concorrência dos métodos, com isso eu deixo uma classe para conexão com o banco sempre ativa e vou fazendo a demanda deixo o pool por conta do hibernate, nele se resolve quantas conexões qual o tamanho essas coisas e se eu quiser controlar essa parte uso o c3po para ajustar mas nunca precisei!!!
Eu sou mt novato nesse ramo do Hibernate e suas sessões.
Mas com uma sessão aberta eu consigo controlar todas as requisições da minha aplicação???
Sim sem o menor problema, tenho sistema com mais de 400 usuários pendurados fazendo varias requisições ao banco e com um único pool para gerenciar.
Mas esse único pool que vc fala é o que??
Vc só faz um openSession() quando o site é rodado pela primeira vez e depois disso nunca mais faz um session.close()???
È um pouco mais complicado que isso, eu montei uma api para me da esse suporte
mas basicamente fica tudo concentrado em uma EntityManagerFactory e para cada ação eu uso um EntityManager esse que eu inicio e comito a requisição