ThreadLocal ou sincronização para gerenciar os sessions do Hibernate?

2 respostas
J

Pessoal,
o manual do hibernate sugere que para manter as sessões (Session) de cada Thread numa app. web, use-se um objeto ThreadLocal.
Buscando no google, vi alguns comentários a favor da sincronização pura e simples do objeto Session ao invés de usar ThreadLocal.
Como uma app web tipicamente tem muitas threads, fiquei na dúvida: a sincronização de um único session não afetaria muito o desempenho?
Qual a experiência de vcs com isso?
Valeu.

2 Respostas

Rafael_Steil

Use ThreadLocals. Eh recomendado pelo proprio pessoal do Hibernate e usado em varias outras solucoes / situacoes para o mesmo tipo de necessidade, alem de ser muito simples de implementar.

Rafael

J

Valeu pela resposta, Rafael.
E para não perder o fio da meada, onde eu fecho a sessao? No mesmo manual do hibernate ele sugere no fim do código do servlet (qual, se tenho várias paginas jsp ???) ou num filtro, mas achei mais fácil o seguinte: criei um HttpSessionListener e na implementação do sessionDestroyed chamei o closeSession(do exemplo de ThreadLocal do manual).
Assim, eu espero que toda vez que uma sessão http for fechada, o session (do hiber) tb o seja.
Está rodando, mas será que por trás das cenas pode estar acontecendo algo de errado, tipo abrir sessions demais, ou deixá-las abertas, que eu não esteja conseguindo enxergar nessa solução?
Agradeço as opiniões.

Criado 30 de abril de 2005
Ultima resposta 30 de abr. de 2005
Respostas 2
Participantes 2