DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Artigo Java Magazine 33 - Hibernate na Web

Artigo Publicado pela Java Magazine 33.

Esse artigo faz parte da revista Java Magazine edição 33. Clique aqui para ler todos os artigos desta edição

jm33.jpg

Hibernate na Web

Avaliando Arquiteturas e Criando uma Aplicação Completa

Conheça melhores práticas para usar o Hibernate em aplicações web e a lidar com locks otimistas, aplicando os conceitos em um exemplo prático

Fernando Lozano

Neste são apresentadas melhores práticas para uso do framework Hibernate dentro de aplicações web, e para lidar com transações da aplicação utilizando técnicas de “lock otimista”. As práticas são ilustradas com um exemplo completo, útil em várias empresas: uma aplicação de reserva de salas de reuniões. (Com poucas modificações, principalmente na entrada de dados, a mesma aplicação poderia lidar com reservas de assentos em teatros, lugares em vôos, quartos de hotéis e outros cenários similares.)

A aplicação será desenvolvida respeitando boas práticas do desenvolvimento JEE, em especial a separação em camadas de apresentação, negócio e persistência, e a arquitetura MVC. O quadro “Camadas em uma aplicação web” relembra e relaciona esses conceitos. Não será utilizado outro framework além do Hibernate, embora as técnicas apresentadas aqui sejam aplicáveis a aplicações baseadas no Struts, JSF, Spring, WebWork e outras tecnologias. E apesar do foco em aplicações web, as práticas e o código referente ao Hibernate (para a camada de persistência) poderiam ser utilizados sem modificações em aplicações não-web.

Vamos utilizar o Tomcat 5.5, e o JSTL 1.1 (através da implementação Jakarta Taglibs Standard; veja as referências ao final do artigo). Para o leitor que não acompanhou o artigo sobre o Hibernate na Edição 28, o quadro “Conceitos essenciais do Hibernate” fornece um resumo das principais classes e arquivos de configuração do framework.

Sessions do Hibernate x containers web

Antes de apresentar detalhes do exemplo, precisamos discutir alguns conceitos importantes para o entendimento da nossa aplicação.

A adequação do Hibernate a uma aplicação web envolve quatro atividades fundamentais:

1.      Criação de um SessionFactory.

2.      Obtenção e liberação de conexões ao banco de dados.

3.      Criação e fechamento de um Session[1].

4.      Demarcação de início e fim de um Transaction no banco de dados.

 

A criação de um SessionFactory é um processo caro, assim o ideal é realizá-lo uma única vez para toda a aplicação. O mesmo SessionFactory pode ser compartilhado por múltiplos threads: só necessitamos de um local onde colocar este objeto, que seja visível aos demais objetos dentro da aplicação.

Então basta identificar um local (e um momento) apropriado para criar o SessionFactory dentro da aplicação web, e estabelecer uma forma de compartilhar esta única instância entre todas as classes de persistência da aplicação. O SessionFactory também é o responsável por gerenciar conexões ao banco de dados feitas pelo Hibernate, assim a definição de como realizar a primeira atividade  implica em definir também a segunda.

O Session e o Transaction geralmente andam juntos, pois uma transação deve ser iniciada e completada com uma mesma sessão aberta. Uma única sessão pode ser utilizada para várias transações, mas isto traz o risco de que a aplicação utilize versões obsoletas dos objetos persistentes que são gerenciados pela sessão. Além disso, uma sessão pode conter uma grande quantidade de objetos e mantê-los abertos e vinculados à sessão HTTP, para atender a várias requisições de um mesmo usuário. Isso pode prejudicar seriamente performance da aplicação em ambientes de cluster. Existem cenários válidos para o que a documentação do Hibernate chama de “sessões longas” (long sessions), onde uma única sessão engloba várias transações, mas o autor (e os criadores do Hibernate) prefere não usar esta prática.

Dessa forma, iremos impor que todas as sessões sejam criadas e fechadas dentro da mesma requisição HTTP, e a definição das atividades (3) e (4) se resume também em identificar o local e o momento apropriado para iniciar e fechar simultaneamente um Session e um "



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
Fernando Lozano

é consultor independente, ativista do software livre e professor da Faculdade Metodista Bennett, além de autor do livro “Java em GNU/Linux” (Editora Alta Books). É detentor de certificações da Sun, IBM, Microsoft e Red Hat, sendo uma espécie de “agente duplo” nas várias tribos.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03