Seguinte… a tempos que li sobre o Pattern ThreadLocal e na última JavaMagazine (ed. 33) foi publicado um artido do Fernando Lozano sobre o uso do Hibernate na web.
Neste artigo ele traz um exemplo de um “Connection Manager” que ele chamou de AplicacaoTransacao.
Li o artigo, que diga-se de passagem está muito bem escrito, mas fiquei com dúvidas e gostaria de discuti-las…
A forma com que ele instancia/pega o Session (org.hibernate.Session) dentro dos DAO’s não é a forma correta… Desacopla o Session da ThreadLocal e os commits e rollbacks dentro do DAO não funcionam…
Levando em conta esse erro, pensei comigo que, por se tratar de uma ThreadLocal, que tem vida somente durante a vida de um request (está correto isso ou estou imaginando?), posso utilizar diretamente a Session (static) do Connection Manager, sem criar uma Session nova no DAO e portanto commits e rollbacks referneciam a mesma session. Esta é a melhor forma de aplicar o pattern threadLocal?
A vantagem de utilizar o ThreadLocal é manter uma única Session, durante o request, com o Hibernate? Depois que o request morre, a ThreadLocal com a session e transaction do Hibernate tb morrem, não é? Claro que devo fechar o Session antes para devolver a conexão ao pool e não precisar esperar que de time-out.
Alguém tem algo a falar sobre? Gostaria de discutir o tema…
[]s
