Correto uso do Hibernate, dúvidas conceituais

Olá a todos! :smiley:

Meus estudos sobre o hibernate estão progredindo, porém estou com algumas dúvidas conceituais sobre o correto uso (inicialização) dos objetos: Configuration e SessionFactory. Assim gostaria de pedir a opnião dos colegas sobre as seguintes dúvidas:

:arrow: Dúvida 01:
Segundo a documentação do hibernate e alguns posts do nosso forum, o correto seria instanciar os objetos Configuration e SessionFactory apenas uma vez e passar a instância de SessionFactory para os DAOs, permitindo assim obter as Sessions que serão utilizadas para as operações de CRUD.
Essa idéia esta correta? Eu entendi direito e é isso mesmo ou existem outros detalhes envolvidos?

:arrow: Dúvida 02:
Se eu utilizar Servlets para construir minha aplicação, posso então declarar os objetos Configuration e SessionFactory como variáveis da classe e inicializa-los no método init() da Servlet e finalmente utiliza-los na instanciação dos outros DAOs da aplicação.
Seria essa a abordagem correta? ou existe maneira melhor de se fazer?

:arrow: Dúvida 03:
Se eu precisar utilizar o Struts para construir minha aplicação, como fazer para inicializar os objetos Configuration e SessionFactory apenas uma vez e disponibiliza-los para os Action e por conseguinte aos DAOs?

Todos os comentários são bem vindos! :o

1 - Sim é isso mesmo. Até pq se vc iniciar a sessionFactory várias vezes vc logo vai perceber o pq nao pode :wink:

2 - Sim. Mas declare as variávieis em outra classe. Tipo HibernateAlgumaCoisa. E esse HibernateAlgumaCoisa vc usa para pegar a sessiond depois, continua no 3…

3 - Faça um “singleton”. Se não existir a sessionFactory vc cria uma nova, senão pega a que já existe. Todos os DAO’s podem chamar esta classe para obter a session…

na pergunta 3, eu uso assim,
eu crio uma classe de Inicialização, que sua única função é inicializar o Configuration e o SessionFactory quando o Servidor de Aplicação (JBoss ou Tomcat) iniciar o uso.

Para isso, dentro do arquivo web.xml, eu mapeio essa classe como um <servlet> e jogo o atributo <load-on-startup>1</…>, assim quando o servidor rodar, o SessionFactory será inicializado (e claro, ele é um Singleton como o Ricardo já disse).