| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/04/2006 15:44:34
|
alots_ssa
JavaEvangelist
Membro desde: 19/07/2005 11:21:24
Mensagens: 469
Localização: Salvador
Offline
|
Galera, qual a melhor forma de abrir sessoes no hibernate em ambiente web. Abrir num filtro e usa essa mesma sessao em todos os casos. Ou ficar abrindo e fechando sempre que necessario. Outra coisa, a locaweb me disponibilizou um datasource com um pool que permite 5 conexoes simultaneas. Isso eh pouco como eu acho ou as excessoes de pool "exhausted" eram advindas de falhas minhas na manipulacao da sessao do hibernate?
Valeu,
Alberto
|
http://alots.wordpress.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/04/2006 10:18:11
|
Black_Pilot
Thread.start()
Membro desde: 28/03/2004 18:37:53
Mensagens: 25
Localização: Rio de Janeiro - RJ
Offline
|
alots_ssa wrote:Galera, qual a melhor forma de abrir sessoes no hibernate em ambiente web. Abrir num filtro e usa essa mesma sessao em todos os casos. Ou ficar abrindo e fechando sempre que necessario. Outra coisa, a locaweb me disponibilizou um datasource com um pool que permite 5 conexoes simultaneas. Isso eh pouco como eu acho ou as excessoes de pool "exhausted" eram advindas de falhas minhas na manipulacao da sessao do hibernate?
Valeu,
Alberto
Olha cara,
Eu tenho aberto a sessão, executado o comando e fechado a sessão. Mas isso por que eu parto do pré-suposto de que todos os meus comandos usarão banco de dados. Abrir e fechar uma sessão é uma operação barata, então não tem tanto problema.
O que eu recomendo é você colocar a sessão aberta numa ThreadLocal (sabe o que é isso? Eu não sabia até ler o livro do hibernate). Então, cada requisição http vai ter a sua própria sessão. Isso é bom pq a sessão possui um negócio chamado "cache de primeiro nivel". Ou seja, se vc pegar um objeto por um comando e, depois, com a mesma sessao mas em outra requisição, pegar o mesmo objeto, você vai pegar o objeto no cache e não no banco de dados. Isso pode acabar dando conflitos entre o banco e o seu programa.
Outra coisa é que se a sessão fechar por algum erro interno, seu sistema vai pras cucuias. Pq ele depende unicamente daquela sessão. Então, abrindo e fechando a sessão, se uma delas der erro, uma única requisição vai dar erro, mas o sistema continuará intacto.
5 Conexões é o suficiente, dependendo do caso. O Hibernate faz um pool de conexões, ou seja, ele mantém as conexões abertas e distrubui entre as sessões (esse é um dos papéis da SessionFactory).
Eu imagino que esse erro deve ser por que o hibernate está tentando aumentar o pool de conexões. Então, altere o arquivo de configurações do hibernate para usar apenas 5 conexões. Não lembro a propriedade exatamente, mas isso você acha fácil. Blz?
Boa sorte!
Pilot
|
Black Pilot - Estudante, estagiário, vagabundo e nas horas vagas admin do site Beco Diagonal. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/04/2006 11:37:37
|
ZehOliveira
GUJ Ranger
Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline
|
Você vai ter problemas com lazy collections se for ficar abrindo e fechando a session toda hora. O recomendado é a abordagem de filtro, abrindo no começo da requisição e fechando no final.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/04/2006 17:32:54
|
alots_ssa
JavaEvangelist
Membro desde: 19/07/2005 11:21:24
Mensagens: 469
Localização: Salvador
Offline
|
Black_Pilot, acho que o lance do pool do hibernate vc tem razao mesmo, ele vem por default um pool de 20 e eu nao modifiquei isso. Mas como tava dando esse erro e eu nao sabia pq adotei uma solucao forca bruta de abrir a conexao "natoralmente" e passa ela pa session do hibernate. Zeh, e se por acaso o usuari fechar o browser de repente, a sessao nao vai ficar aberta gastando a toa?
Alberto
|
http://alots.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/04/2006 19:40:57
|
Black_Pilot
Thread.start()
Membro desde: 28/03/2004 18:37:53
Mensagens: 25
Localização: Rio de Janeiro - RJ
Offline
|
alots_ssa wrote:Black_Pilot, acho que o lance do pool do hibernate vc tem razao mesmo, ele vem por default um pool de 20 e eu nao modifiquei isso. Mas como tava dando esse erro e eu nao sabia pq adotei uma solucao forca bruta de abrir a conexao "natoralmente" e passa ela pa session do hibernate. Zeh, e se por acaso o usuari fechar o browser de repente, a sessao nao vai ficar aberta gastando a toa?
Alberto
Mas nessa sua solução, vc abre uma conexão por sessão? Não sei como se passa conexão para a sessão, por isso estou perguntando. Mas acho que seria uma boa você alterar a configuração e deixar o pool fazer o trabalho, não seria melhor?
Bom, só respondendo pelo Zeh, a sessão se fecha quando o processamento requerido pelo usuário terminar, com o usuário com o navegador aberto ou não isso vai acontecer. Então é garantido que a seção sempre será fechada no filtro.
|
Black Pilot - Estudante, estagiário, vagabundo e nas horas vagas admin do site Beco Diagonal. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2006 17:03:59
|
alots_ssa
JavaEvangelist
Membro desde: 19/07/2005 11:21:24
Mensagens: 469
Localização: Salvador
Offline
|
Eu li na documentacao do hibernate que pa vc usar ele com um datasource vc tem que pegar a conexao com o datasource e passar para ela como parametro no openSession. Pensando na mesma coisa fiz o esquema parecido abrindo a conexao e passando para ele.
Alberto
|
http://alots.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2006 15:58:09
|
andrefariagomes
JavaBaby
![[Avatar]](/images/avatar/26ff6f4ca1cfca4861eb91876f706746.png)
Membro desde: 18/09/2004 11:10:06
Mensagens: 90
Offline
|
Alguém tem um exemplo de implementação com filtro?
|
Abraço,
André Faria
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/07/2007 15:41:13
|
cleriston
JavaGuru
![[Avatar]](/images/avatar/f4e4b6af8c2d1b0e2111b045201aebc3.jpg)
Membro desde: 06/02/2007 10:54:37
Mensagens: 234
Offline
|
Cara, vou reviver este post.
Dá uma olhada no link abaixo
http://www.hibernate.org/43.html
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/07/2007 15:58:08
|
cleriston
JavaGuru
![[Avatar]](/images/avatar/f4e4b6af8c2d1b0e2111b045201aebc3.jpg)
Membro desde: 06/02/2007 10:54:37
Mensagens: 234
Offline
|
Vou aproveitar o tópico...
O que é um Session do Hibernate?
A cada openSession do SessionFactory é aberta uma conexão com o banco?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/11/2008 22:28:22
|
berdam
Thread.start()
![[Avatar]](/images/avatar/4f20f7f5d2e7a1b640ebc8244428558c.jpg)
Membro desde: 04/04/2006 11:58:32
Mensagens: 30
Offline
|
A sessionFactory é a fábrica de session, seria mais especificamente a conexão com o banco de dados. Ela é aberta no início e no fim da aplicação. Sua abertura e fechamento consome muitos recursos, já a session não consome muitos recursos e é aberta toda vez que alguma operação envolvendo select é executada.
|
|
|
 |
|
|