Session aberta para somente um serviço

5 respostas
adrianostanley

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.

5 Respostas

Gustavo_Sperandio

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!!!

adrianostanley

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???

Gustavo_Sperandio

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.

adrianostanley

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()???

Gustavo_Sperandio

È 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

Criado 25 de março de 2011
Ultima resposta 25 de mar. de 2011
Respostas 5
Participantes 2