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…
Fala Elton, blza? Entao, nao sou um grande conhecedor de ThreadLocal, e acho q nem posso contribuir muito, mas no hibernate3 ja tem uma factory lá para que vc nao precise usar ThreadLocal, acho q isso foi feito para superar alguns dos problemas listados por vc. Assim q der uma aliviada aqui no trampo vou pesquisar mais sobre o assunto.
No meu caso eu tenho o JBoss como controller do meu Pool… Faço o deploy de um pacote HAR que já contém um Factory do hibernate (e os POJOs)… Esse factory, no meu caso, somente libera as sessões de banco de dados para os sistemas que o chamam, como por exemplo o meu ServiceLocator que pega conexões deste factory.
Na arquitetura que eu estou utilizando, não vejo onde o factory possa suprir a necessidade do ThreadLocal… ou onde um substitua outro… sendo que o JBoss controla o meu factory e o meu sistema controla as sessões e transações do hibernate que aloco para um ThreadLocal…
Se tu encontrar algo Dark, posta aqui
Dando uma olhada em alguns materiais realmente vi que é possível subtituir o factory do hibernate por um hiberante session factory… ai você acaba criando as configurações do teu POJO dentro dessa sessionFactory…
Mas ai vem mais uma dúvida… Vale a pena implementar o Configuration do Hibernate nessa sessionFactory ou eh melhor utilizar a configuração que o JBoss (junto com o factory do Hibernate) faz?