Artigo do tipo Tutorial
Recursos especiais neste artigo:
Contém nota Quickupdate, Artigo no estilo Solução Completa
Novidades do Hibernate 4

O artigo trata de algumas das novas funcionalidades do Hibernate 4, framework de mapeamento objeto/relacional Java mais popular atualmente. Dentre as novidades trazidas pelas versões 4.0, 4.1 e a atual 4.2 CR (Candidate Release), o artigo mostra por meio de uma aplicação de exemplo o registro central de serviços do Hibernate, o suporte a bancos de dados multi-inquilinos e a utilização de identificadores naturais.

Em que situação o tema é útil
O tema é útil para todo desenvolvedor que trabalha com o desenvolvimento de aplicações Java cuja persistência é feita em bancos de dados relacionais, como Oracle, Microsoft SQL Server, IBM DB2, PostgreSQL, MySQL, dentre outros. Em especial, desenvolvedores que precisam implementar aplicações com arquitetura multi-inquilinos (muito comum em soluções SaaS para computação em nuvem) ou que realizam frequentemente consultas ao banco de dados filtrando por identificadores naturais (atributos únicos que, porém, não compõem a chave primária da entidade em questão) poderão ver na prática como utilizar as novas funcionalidades do Hibernate para estas situações.

O Hibernate é o framework de mapeamento objeto/relacional mais conhecido e utilizado para a plataforma Java atualmente. Foi também um dos pioneiros desse tipo de solução de persistência e foi utilizado como base para a definição do padrão Java Persistence API 2.0, dada a sua popularidade. Veja a Nota do DevMan 1.

Nota do DevMan 1. Mapeamento Objeto/Relacional

Mapeamento Objeto/Relacional (em inglês: object/relational mapping, ou ORM) é uma solução para persistência de objetos em bases de dados relacionais. Estes dois paradigmas são incompatíveis: na orientação a objetos, os dados são armazenados como atributos de objetos ligados entre si formando um grafo; já em bases de dados relacionais, dados são armazenados em tabelas com linhas e colunas, associadas umas às outras por chaves primárias e estrangeiras. Frameworks ORM transformam os dados de uma representação para a outra utilizando meta-dados e oferecendo APIs e linguagens de consulta para realizar operações de persistência.

Em seus muitos anos de existência, o projeto cresceu e lançou diversos subprojetos como o Hibernate Shards (para persistência em bancos de dados distribuídos), Hibernate Search (trazendo funcionalidades mais avançadas de pesquisa textual para o banco de dados), Hibernate Validator (implementação de referência da JSR 303 – Bean Validation), Hibernate OGM (para soluções NoSQL), dentre outras. Neste artigo, abordaremos o núcleo do framework, que na época da criação dos subprojetos foi chamado de Hibernate Core, mas que hoje é conhecido como Hibernate ORM. Utilizaremos todos estes nomes (Hibernate, Hibernate Core e Hibernate ORM) para fazer referência ao mesmo framework.

Em dezembro de 2011, a JBoss (empresa que coordena o desenvolvimento do framework) lançou a versão 4.0 do Hibernate ORM, registrando um salto da versão anterior, a 3.6.9. Em fevereiro de 2012 registrou-se um avanço um pouco menor com o lançamento da versão 4.1. No final de janeiro, foi publicada a Candidate Release (CR) da versão 4.2 do núcleo do framework (veja a Nota do DevMan 2). Apesar de muitos usuários ávidos por novas funcionalidades já utilizarem o Hibernate 4.x há meses, os mais conservadores provavelmente se ativeram a alguma versão da família 3.x até que as novas versões estivessem mais estáveis.

Nota do DevMan 2. Candidate Release

Versões Candidate Release representam distribuições de um framework ou aplicação que, segundo os seus próprios desenvolvedores, encontram-se quase prontas para uso em ambientes de produção. Dentro de uma numeração qualquer (ex.: 4.2) podem ser lançadas algumas versões CR (CR1, CR2, etc.) até que o software seja considerado estável (nenhuma falha séria não corrigida encontra-se reportada) e, então, é lançada a versão final daquela numeração.

Em todas estas evoluções, desde a 4.0 há mais de um ano atrás até a mais recente CR do Hibernate ORM 4.2, algumas novas funcionalidades foram adicionadas ao framework em relação à versão 3.6. De acordo com os próprios desenvolvedores, em seu blog (veja Links), destacam-se as seguintes:

· Uma nova forma de obtenção da SessionFactory, após unificação dos serviços já existentes no framework em um registro único;

· Adequação do framework à plataforma OSGi (veja Links), dividindo as classes em cada um de seus pacotes em três categorias: públicas, internas e SPI (Service Provider Interface, ou Interface Provedora de Serviços);

· Suporte a bancos de dados multi-inquilinos (multi-tenant databases). Bancos de dados deste tipo armazenam dados de diferentes organizações (inquilinos) na mesma instância, gerenciando o acesso de cada um aos seus dados;

· Uma nova API para recuperação de objetos utilizando identificadores naturais. Tais identificadores são aqueles que fazem parte do domínio do problema e não foram adicionados artificialmente somente por questões de persistência;

· Verificação de objetos sujos (dirty checking) personalizável pelo cliente. Em outras palavras, permite que o próprio usuário do framework especifique quando um objeto deve ser considerado sujo (ou seja, foi modificado em relação aos dados do banco) ou não;

· Internacionalização das mensagens de log utilizando JBoss Logging;

· Uso da JDK 1.6 e JDBC 4 como base para o desenvolvimento.

Neste artigo, apresentaremos por meio de exemplos algumas das funcionalidades listadas acima. Começaremos, no entanto, com instruções de download e “instalação” do framework.

Download e Instalação

O Hibernate ORM pode ser obtido no site oficial do framework (veja Links), na seção Downloads. Ele é distribuído em duas formas: pacotes de distribuição contendo binários, fontes e documentação ou por meio de um repositório de artefatos Maven.

O Maven (veja Links) é uma ferramenta de gerência de projetos de software que permite a um desenvolvedor indicar as dependências de um projeto (por exemplo, o framework Hibernate) e confiar à ferramenta a obtenção dos arquivos JAR necessários, incluindo qualquer dependência transitiva, de repositórios na Internet. Para o leitor interessado, o assunto foi abordado na Java Magazine 101.

No primeiro caso, a distribuição em um pacote (ZIP ou TGZ) quando descompactada provê todos os arquivos necessários para uso do framework na pasta lib. Esta pasta é ainda subdividida em quatro pastas:

· lib/required: JARs que são obrigatórios para uso do Hibernate. Caso você esteja configurando o classpath do seu projeto manualmente, estes são os arquivos a serem adicionados para utilização do framework;

· lib/jpa: o JAR presente neste diretório contém as classes que implementam o suporte do Hibernate ao padrão JPA (Java Persistence API), caso o desenvolvedor prefira utilizar esta interface padrão ao invés da API específica do framework;

· lib/envers: esta pasta contém o framework de auditoria de entidades JBoss Envers (veja Links). Tal framework registra o histórico de modificações em determinados atributos de entidades persistentes para auditoria futura;

· lib/optional: esta pasta contém JARs relativos a funcionalidades opcionais do framework, como utilização do pool de conexões C3P0 ou do cache ehcache ao invés das soluções utilizadas por padrão caso nenhuma configuração específica seja feita (tais configurações estão fora do escopo deste artigo).

...
Quer ler esse conteúdo completo? Tenha acesso completo