Dando continuidade ao tema hibernate, neste post, vamos falar um pouco sobre suaa arquitetura e suas principais caracterísiticas.

A API do Hibernate está dividida em duas camadas que são aderentes à J2EE API. Existe a camada de negócios (Business Layer) que garante o ciclo de vida dos objetos, suas validações e as classes que serão responsáveis pela persistência, a ser gerenciada pela camada de persistência (Persistence Layer).

Os componentes responsáveis pelo gerenciamento de sessão, transação, queries, fábrica de sessões e configurações são parte integrante da camada de persistência. A imagem abaixo ilustra essa arquitetura.

hibernate1.gif

É possível utilizar o Hibenate rodando em uma ambiente stand alone , como também , num ambiente gerenciável , através do uso de containers como WAS, JBOSS , BES, TOMCAT.A figura abaixo exemplifica de forma simples e objetiva como funciona o hibernate em um

ambiente não gerenciado.

hibernate2.gif

Na próxima figura , está o exemplo de como funciona o hibernate no ambiente gerenciado, adicionando as características de controle que um Aplication Server permite.

hibernate3.gif

 

Mas para que se possa utilizar o Hibernate de forma adequada e correta, é preciso entender um conceito muito importante que permeia todo o ciclo de vida de um projeto que o utilizará. Existem estados e transições que devem ser considerados como exemplificado na figura abaixo.

 

hibernate4.gif

Transiente (Transient)– o objeto ainda não foi persistido na base , ou seja, esse seu estado indica que o objeto só existem em memória.

Persistente (Persistent)– o objeto foi salvo no BD em uso, e já poderá ser acessado de lá.

Desatachado (Detached)- o objeto não é mais utilizado e será liberado para descarte pelo gerenciado de lixo (Garbage Collector)

 

Trazendo uma atualização para Java EE 5 , o Hibernate implementa Entity Mananger, Annotations , Core e Seam e para quem trabalha com .NET da microsoft o NHibernate implementa .NET 2.0 também.

 

No próximo post, faremos um exemplo prático sobre o uso do hibernate , exemplificando como seria sua utilização e mostrando a diferença para o modo tradicional de mapeamento O/R em java.