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.
ThreadLocal ou sincronização para gerenciar os sessions do Hibernate?
2 Respostas
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
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.