Olá Pessoal, tudo bem?
Continuando ainda nos problemas que ocorreram no projeto SeminariosCientificos devido a atualização do Hibernate, chegamos em um ponto interessante sobre a modificação na forma de se obter a SessionFactory. Veja na continuação deste artigo.
Contexto
Para começarmos essa atualização, vamos nos basear no artigo sobre Hibernate 4 – Criação da SessionFactory e obtem a Session. Nesse artigo a SessionFactory era obtida da seguinte forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package br.com.mauda.seminario.cientificos.dao.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; /** * @author Mauda * */ public class HibernateUtil { private static SessionFactory sessionFactory = getSessionFactory(); private static SessionFactory getSessionFactory() { Configuration configuration = new Configuration(); configuration.configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() .applySettings(configuration.getProperties()).buildServiceRegistry(); return configuration.buildSessionFactory(serviceRegistry); } public static Session getSession() { return sessionFactory.openSession(); } } |
Com a atualização do Hibernate, essa forma de atualização não funciona mais. Então chegou a hora de ajustar esse ponto do projeto.
Utilizando a org.hibernate.boot.registry.StandardServiceRegistry
Agora para obter a instancia de SessionFactory é necessário os seguintes passos:
- Obter uma instância de org.hibernate.boot.registry.StandardServiceRegistry
- Criar os MetadataSources e o Metadata
- Criar a SessionFactory
1. Obter uma instância de org.hibernate.boot.registry.StandardServiceRegistry
Para realizar uma instância de org.hibernate.boot.registry.StandardServiceRegistry, precisaremos utilizar da classe StandardServiceRegistryBuilder, que irá ler o arquivo hibernate.cfg.xml para obter as informações. Além disso, todo o conteúdo que estava dentro do método getSessionFactory foi deletado, assim como seus imports. O código abaixo mostra essa alteração grande:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package br.com.mauda.seminario.cientificos.dao.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; /** * @author Mauda * */ public class HibernateUtil { private static SessionFactory sessionFactory = getSessionFactory(); private static SessionFactory getSessionFactory() { StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build(); } public static Session getSession() { return sessionFactory.openSession(); } } |
2. Criar os MetadataSources e o Metadata
Próximo passo é obter as instâncias de MetadataSources e Metadata, com o registry e o MetadataBuilder. Veja no código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
package br.com.mauda.seminario.cientificos.dao.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; /** * @author Mauda * */ public class HibernateUtil { private static SessionFactory sessionFactory = getSessionFactory(); private static SessionFactory getSessionFactory() { // Creating a registry StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build(); // Create the MetadataSources MetadataSources sources = new MetadataSources(registry); // Create the Metadata Metadata metadata = sources.getMetadataBuilder().build(); } public static Session getSession() { return sessionFactory.openSession(); } } |
3. Criar a SessionFactory
Agora chegou o ponto de obter uma instância de SessionFactory, para isso utilizaremos a instância de metadata que obtivemos no ponto anterior. Veja no código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package br.com.mauda.seminario.cientificos.dao.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; /** * @author Mauda * */ public class HibernateUtil { private static SessionFactory sessionFactory = getSessionFactory(); private static SessionFactory getSessionFactory() { // Creating a registry StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build(); // Create the MetadataSources MetadataSources sources = new MetadataSources(registry); // Create the Metadata Metadata metadata = sources.getMetadataBuilder().build(); // Create SessionFactory return metadata.getSessionFactoryBuilder().build(); } public static Session getSession() { return sessionFactory.openSession(); } } |
Por fim, o método getSession permanece igual, não tendo a necessidade de modificação.
finally{
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply