O Hibernate possui diversos projetos que ocorrem em paralelo ao Hibernate e que podem ser incorporados ao framework tornando-o ainda mais enxuto. Alguns desses projetos são o Hibernate Search, Hibernate OGM e Hibernate Validator.

Muitos projetos ainda utilizam o Hibernate 3, no entanto, o novo Hibernate 4 já foi lançado e passou por diversas melhorias que podem facilitar e melhorar a vida dos desenvolvedores. A partir de agora o Hibernate será continuado a partir da versão 4.x e, portanto, a última versão do Hibernate 3.x foi a versão 3.6.

No restante do artigo estaremos verificando melhor quais são as melhorias e novidades lançadas na recente versão do Hibernate 4.

Novidades

Diversas funcionalidades foram introduzidas na versão principal do Hibernate 4, entre elas destacam-se:

  • Introdução do ServiceRegistry.
  • Melhoria na abertura de sessões do SessionFactory.
  • Novo projeto para construção do Sessionfactory.
  • org.hibernate.integrator.spi.Integrator permite uma melhor integração e auto descoberta.
  • Adicionadas melhorias para trabalharmos com as mensagens e códigos do i18n.
  • Limpeza de interfaces e métodos deprecados.
  • e muito mais.

Além disso, a nova versão do Hibernate já possui suporte para JPA 2.1 e tem entre as suas melhorias mais importantes um grande número de correções de antigos problemas de performance que ocorriam no framework.

Arquivos de configuração e buildSessionFactory

Uma situação interessante é que ainda podemos usar o DTD do Hibernate 3.0, pois ele não mudou da versão 3 para a versão 4, o DTD continua o mesmo. Dessa forma, ainda podemos utilizar o mesmo arquivo de configuração do Hibernate apontando para o DTD da versão 3 que pode ser encontrado em http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd

No entanto, se ainda utilizarmos o buildSessionFactory, usado nas aplicações do Hibernate 3 para criarmos um SessionFactory, teremos uma mensagem informando que o método está deprecado. Essa é a grande alteração do Hibernate 4 em relação ao seu antecessor. Anteriormente nós criávamos um SessionFactory como na Listagem 1.

Listagem 1. Criando SessionFactory com buildSessionFactory().


  SessionFactory sessionFactory = new Configuration()
           .configure()
                     .buildSessionFactory(); 

Agora na versão 4 do Hibernate devemos usar como o exemplo da Listagem 2, utilizando ServiceRegistry.

Listagem 2. Nova forma de criarmos um SessionFactory.


  Configuration conf = new Configuration();
  conf.configure();
  serviceRegistry = new ServiceRegistryBuilder().applySettings
    (conf.getProperties()).buildServiceRegistry();        
  SessionFactory sessionFactory = configuration.buildSessionFactory
    (serviceRegistry);

Outra forma é utilizando um MetadataSources onde eventualmente podemos adicionar recursos, classes anotadas, entre outros, similar ao Configuration. A partir do MetadaSources obtemos um Metadata e então conseguimos um SessionFactory. O exemplo da Listagem 3 demonstra a utilização.

Listagem 3. Criando uma SessionFactory com MetadataSources.


  ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
      .configure().buildServiceRegistry();
  MetadataSources metadataSources = new MetadataSources(serviceRegistry);
  metadataSources.addResource("exemplo.hbm.xml")
      .addAnnotatedClass(SuaEntidade.class);
  Metadata metadata = metadataSources.buildMetadata();
  SessionFactory sessionFactory = metadata.buildSessionFactory();

O grande ponto do ServiceResgistry é que ele é uma nova forma do Hibernate gerenciar os seus serviços, pois Services são classes que oferecem muitas funcionalidades ao Hibernate como ClassLoader, ConnectionProvider (conexão com um BD), e muitas outras funcionalidades. Portanto, agora todos os serviços possuem uma interface, facilitando modificações pelo desenvolvedor na forma como o Hibernate realiza algumas funcionalidades. Dessa forma, nossas classes precisariam apenas implementar a interface de serviço do Hibernate.

Além do buildSessionFactory as classes de Configuration: org.hibernate.cfg.Configuration e AnnotationConfiguration também estão deprecadas.

Vale ressaltar que na documentação oficial em alguns pontos ainda encontramos a criação de SessionFactory da forma antiga. Provavelmente esta parte da documentação não foi atualizada e deve ser normalizada na próxima versão.

Suporte a Multi-Tenancy

Um modelo multi-tenancy nada mais é do que o compartilhamento de recursos físicos para clientes ou empresas diferentes, mas ao mesmo tempo permite-se que eles fiquem logicamente isolados. Um Multi-Tenancy pode ser implementado de algumas formas como: Instâncias de bancos separadas com cada tenant com a sua própria instância de banco, schema separados com cada tenant compartilhando o mesmo banco físico, mas com cada um deles com seu próprio schema ou ainda pode-se implementar o Multi-Tenancy através de particionamento onde utiliza-se o mesmo banco físico e o mesmo schema.

Anotações nas Entidades

A boa notícia para os projetos que utilizam as versões anteriores do Hibernate é que as anotações das entidades não possuem alterações. Como o Hibernate utiliza as anotações definidas na especificação JPA e a JPA não possui alterações o Hibernate também não passou por alterações. As anotações específicas do Hibernate também não possuem alterações nas anotações.

Obtendo o Hibernate 4

O Hibernate está disponível no SourceForge nos formatos ZIP e TGZ. Essa versão 4 contém os JARs necessários, documentação, código-fonte e outros utilitários. O download oficial está disponível no link http://sourceforge.net/projects/hibernate/files/hibernate4/.

Avaliando o Pacote do Hibernate 4

Após fazer o download do Hibernate 4, podemos notar que temos uma hierarquia de pastas no pacote.

As funcionalidades que usaremos do Hibernate encontram-se na pasta lib que possui os seguintes artefatos:

  • lib/required: Contém todos os JARs requeridos pelo Hibernate. Todos os JARs presentes neste diretório devem ser incluídos no classpath do nosso projeto.
  • lib/jpa: Contém o jar hibernate-entitymanager e suas dependências além das dependências do lib/required que também devem estar juntos. Este jar é integrado com o Hibernate para prover suporte para JPA.
  • lib/envers: Contém o jar hibernate-envers e suas dependências. Para utilizá-lo também devemos ter os jars presentes em lib/required.
  • lib/optional: Contém os jars necessários para utilitários opcionais do Hibernate.

No diretório principal do Hibernate temos também a pasta projects que possui outros artefatos que o Hibernate disponibiliza aos desenvolvedores, são eles:

  • hibernate-core: Artefato principal do Hibernate que possui toda a parte central do framework. Todo o código fonte está disponível.
  • hibernate-entitymanager: Implementação da JPA. Este artefato depende do hibernate-core caso este projeto seja compilado.
  • hibernate-envers: Modulo opcional que provê histórico de autoria de alterações para as entidades. Este artefato depende de ambos hibernate-core e hibernate-entitymanager
  • hibernate-c3p0: Provê a integração entre Hibernate e o C3P0 connection pool library. Mais informações são encontradas na página oficial do projeto em http://sourceforge.net/projects/c3p0/. Este artefato só depende de hibernate-core.
  • hibernate-proxool: Provê a integração entre Hibernate e o Proxool connection pool library. Mais informações são encontradas na página oficial do projeto em http://proxool.sourceforge.net/. Este artefato só depende de hibernate-core.
  • hibernate-ehcache: Provê integração entre Hibernate e o EhCache, um cache de segundo nível. Mais informações são encontradas na página oficial do projeto em http://ehcache.sourceforge.net/. Este artefato só depende de hibernate-core.
  • hibernate-infinispan: Provê integração entre Hibernate e o Infinispan, este também é um cache de segundo nível.

Com isso, neste artigo vimos quais são algumas das novidades do Hibernate 4 como ServiceRegistry, Multi-Tenancy e melhorias internas. Também vimos quais as suas principais diferenças em relação ao Hibernate 3, principalmente quanto ao buildSession(), e as principais funcionalidades trazidas no seu pacote.

Para finalizar, vale uma dica para aqueles que usam JBOSS. Aqueles que adquirirem o servidor de aplicação JBOSS versão 7.1 já ganharão de praxe a nova versão do Hibernate.

Bibliografia

[1]Hibernate - JBoss Community, disponível em www.hibernate.org/

[2]Documentação de Referência Hibernate, disponível em https://docs.jboss.org/hibernate/core/3.6/reference/pt-BR/html/index.htmlhttp://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.html

[3] Introdução ao Hibernate, disponível em http://hibernate.javabeat.net/articles/2007/05/hibernate-orm-framework-introduction/

[4] Jeff Linwood and Dave Minter. An introduction to persistence using Hibernate 3.5, Second Edition. Apress.

[5] Steve Perkins. Hibernate Search by Example: Explore the Hibernate Search system and use its extraordinary search features in your own applications. Packt Publishing.