| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/01/2010 16:48:04
|
tassiocoelho
Entusiasta Java
Membro desde: 11/10/2008 20:02:58
Mensagens: 19
Offline
|
Amigos,
Estou a semanas lendo bastante sobre as formas de lidar com as sessões do Hibernate em ambientes web e mesmo após ler o batido link Open Session in View e Using Hibernate with Tomcat além de dezenas de posts em diversos fóruns não consegui chegar a uma conclusão satisfatória.
Vou mostrar as formas que vi as sessões sendo tratadas nas pesquisas que fiz e convido os colegas a darem suas opiniões sobre o que acham mais aconselhado.
OBS: Levem em consideração uma aplicação de grande porte com elevado número de acessos simultâneos.
Em relação a forma mais adequada de tratar as chamadas as sessões, transações e commits, concluí (mas posso estar enganado) que é através de um filtro.
Configurando o filtro no web.xml:
Implementação do HibernateSessionFilter:
O que desejo concluir é a melhor forma de retorno do método HibernateUtil.getSession()
1 - A primeira forma é fazer o HibernateUtil retornar uma nova sessão a cada chamada do método getSession():
Neste caso devemos acrescentar ao HibernateSessionFilter após o catch as linhas abaixo para que a sessão seja finalizada:
2 - A segunda maneira é usar o padrão ThreadLocal. Fiquei em dúvida se o Hibernate 3.2 já implementa nativamente ou não este padrão.
Não consegui compreender o funcionamento deste padrão. Se tudo é declarado como static concluo então que há apenas uma instância de ThreadLocal em toda aplicação e que em todos os momentos onde chama-se os métodos get ou set da ThreadLocal é referenciado um mesmo objeto do tipo ThreadLocal. Então porque utilizar o ThreadLocal e não o padrão Singleton simples, definindo apenas uma Session static?
3 - A terceira forma que encontrei mas não compreendi parece utilizar o mesmo padrão do item 2 porém já está implementado nativamente no Hibernate 3.2
É necessário acrescentar ao hibernate.cfg.xml a linha:
Resumindo:
1 - Utilizar o Filtro é a melhor forma ou não?
2 - É melhor abrir uma Sessão para cada requisição? Ou é melhor reaproveitar a mesma sessão?
3 - Construir uma única fábrica é o mais recomendado devido ao custo mas é recomendado utilizar uma única sessão para toda aplicação?
4 - E por fim e mais importante: Qual a melhor implementação do HibernateUtil e HibernateSessionFilter?
Espero que este POST gere uma grande quantidade de respostas pois servirá de ajuda para muitos.
Grande abraço a todos,
Tássio Coêlho
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2010 13:55:38
|
ono.leo
Thread.start()
Membro desde: 09/11/2009 15:09:45
Mensagens: 38
Offline
|
Olá, sei que já faz um tempinho, mas comecei a estudar o Hibernate a pouco tempo e atualmente estou tendo a mesma dúvida que voce escreveu acima. Como já faz algum tempo, será que voce já conseguiu esclarece-las ? Se sim, qual a conclusão que voce chegou ?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2010 14:09:29
|
juniorsatanas
GUJ Master
![[Avatar]](/images/avatar/e80d4e20bea58e20d925e45e6fb7aab8.jpg)
Membro desde: 20/05/2007 01:08:24
Mensagens: 1864
Localização: web2ajax@gmail.com
Offline
|
Olha eu uso de várias maneira, e agora to usando Facade !os 2 funcionam !
|
Cheque Mate em 6 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2010 18:18:21
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
Confesso q não li muito...
masss.... abra a session, e depois feche.... não reaproveite.... use C3P0 pra reaproveitar
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/10/2010 10:27:36
|
ivan.silva
Thread.start()
![[Avatar]](/images/avatar/a3a37085ccdb51ae99dc481ba1266105.jpg)
Membro desde: 28/04/2009 08:10:15
Mensagens: 27
Offline
|
Olá Tássio,
Estou no mesmo dilema que você. Estamos implantando um sistema WEB de grande porte e estamos com problemas nas transações e ao reconetar no banco quando cai a conexão ou quando o DBA mata o serviço de banco.
Qual das 3 opções você utilizou?
A primeira de utilizar no Filter é um tanto quanto arriscada, pois ficará na sessão da aplicação e alguém pode fechar o browser sem deslogar.
A segunda é a que eu utilizo, mas precisa de melhorias.
A terceira estou tentando implementar mais nao estou conseguindo.
Voce pode me enviar seu HibernateUtil e sua configuração . cfg para eu ver como tu fez.
Att,
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2011 20:22:26
|
AdemirPinto
Thread.start()
![[Avatar]](/images/avatar/6732648d9355578b7b4f70bff86b3083.jpg)
Membro desde: 19/01/2011 13:47:06
Mensagens: 43
Offline
|
Lavieri wrote:Confesso q não li muito...
masss.... abra a session, e depois feche.... não reaproveite.... use C3P0 pra reaproveitar
Olá Lavieri, apesar do topico ser antigo, mas pra mim é atual...rss
Como assim, abra a sessão de depois fecha? Ser sua requisição tiver 10 inserts vc abriria 10 sessões e fechariam elas?
Obrigado
Ademir
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/11/2011 11:32:10
|
root_
JavaGuru
![[Avatar]](/images/avatar/5dc86332c108bc63cafa5c4ea0d34ae1.jpg)
Membro desde: 05/09/2006 15:46:19
Mensagens: 206
Localização: Gurupi - Tocantins
Offline
|
Essa é uma dúvida que tenho até hj, pq com EclipseLink, eu abro uma entityManager por View(FRame, internalFrame, Dialog.. etc..) e ela fica aberta até que a View seja fechada... assim realizando o controle de commit, begin e rollback das transacoes.
AGora com hibernate...?
|
Rogério Milhomens de Queiroz
Agile - Consultoria em Tecnologia da Informação!
http://www.agilecti.com.br
Dataview - Inteligência em Tecnologia!
http://www.dataview.com.br |
|
|
 |
|
|