Académique Documents
Professionnel Documents
Culture Documents
Glauber da Rocha Balthazar, Fbio Mendes Ramos Guimares, Melise Maria Veiga de Paula, Elio Lovisi Filho Bacharelado em Sistemas de Informao Faculdade Metodista Granbery (FMG) Rua Batista de Oliveira, 1145 - 36010-532 - Juiz de Fora MG
{gbalthazar,fguimaraes}@si.granbery.edu.br,elovise@granbery.edu.br, melisepaula@gmail.com,
Abstract. In this article presents the tutorial one that it an approach, of practical form is presented, the use of the Framework of Hibernate persistence in NetBeans. For this, the construction of a guided application is considered the Objects, in Java, that has access a Data base Relationary Object through an architecture developed for this type of application. After that, it is presented all the steps for the necessary configuration of the objectrelationary mapping between the application and the bank. Resumo. Neste artigo apresentado um tutorial que aborda, de forma prtica, a utilizao do Framework de persistncia Hibernate no NetBeans. Para isso, proposto a construo de uma aplicao Orientada a Objetos, em Java, que acesse um Banco de Dados Objeto Relacional por meio de uma arquitetura desenvolvida para este tipo de aplicao. Em seguida, so apresentados todos os passos para a configurao necessria do mapeamento objeto-relacional entre a aplicao e o banco.
INTRODUO
Para PRESSMAN (2005), o software tornou-se uma das foras motoras das empresas, ele quem dirige a tomada de deciso nos negcios. Este fato justifica a crescente importncia que o processo de desenvolvimento de software vem adquirindo nos ambientes organizacionais. Contudo, atualmente, observa-se que apesar da evoluo das ferramentas de apoio ao desenvolvimento de software, esta atividade ainda considerada uma tarefa bastante complexa para os profissionais da rea. Neste contexto, pode-se observa duas vertentes. De um lado, os usurios vm se tornado cada vez mais exigentes, fato que aumenta a complexidade dos requisitos e a expectativa em relao aos resultados esperados. Alm disso, as empresas tm percebido que um sistema de informao pode ser o seu diferencial perante suas concorrentes, pois a gerencia das informaes e a garantia da segurana e disponibilidade destas de forma rpida, confivel e sigilosa em qualquer ponto a qualquer momento permite que diretores, gerentes e vendedores tomem decises de forma mais precisa e rpida [OLIVEIRA]. Por outro lado, diversas tecnologias vm surgindo e amadurecendo, fornecendo ao desenvolvedor uma variedade de linguagens, ferramentas e softwares que o aproximem desta realidade. Um exemplo disto a Orientao a Objetos que vem sendo explorada no intuito de encontrar padres para desenvolvimento de softwares de forma mais simples com uma alta manutenibilidade e reusabilidade dos cdigos escritos.
Considerando o cenrio descrito, este artigo pretende apresentar, de forma prtica uma viso de como desenvolver uma aplicao orientada a objetos com acesso a um banco de dados objeto-relacional. Para tanto, sero empregados a linguagem de programao JAVA e o ambiente de desenvolvimento NetBeans como IDE (Interface Desktop Environment). Alm disso, o Hibernate ser usado como a camada de persistncia que dever fazer a interface entre a aplicao e o sistema gerenciador de banco de dados PostegreSQL. O artigo est organizado da seguinte maneira, na seo 2, descrita a Arquitetura DAO (Data Access Object) que ser utilizada para a construo das classes de mapeamento e gerencia das informaes para o Hibernate. Na seo 3, descrita a aplicao a ser considerada nos exemplos prticos. Os captulo seguintes exploraram a prtica no NetBeans na construo de aplicaes.
A ARQUITETURA DAO
Para a construo da aplicao, vamos adaptar o padro proposto por [FAERMAN] na revista Java Magazine de Janeiro de 2005, que descreve uma poltica para a construo de aplicaes que utilizam um Framework para persistncia dos dados. Ser empregada a arquitetura DAO (Data Access Object), onde um objeto intermedirio responsvel pelo acesso aos dados do sistema, independente do SGBD empregado. Na figura 1, apresenta-se a arquitetura DAO utilizada para a construo da aplicao, definindo-se o relacionamento entre as classes que iro compor a estrutura de persistncia do Hibernate.
Action (Aplicao)
FactoryClasses
Instancia Implementa
hibernate.cfg.xml
DAOFactory
Implementa
HibernateDAOFactory
Instancia
ClasseDAO ClasseHibernateDAO HibernateConfiguration
Abre Conecta
BD
Session
O banco de dados a ser utilizado assim como o nome de usurio e a senha para acesso e demais propriedades do banco so mapeados para um arquivo XML denominado hibernate.cfg.xml, a partir de uma Factory de Classes. O HibernateDAOFactory ser a classe responsvel por gerar instncias dos objetos a serem utilizados na aplicao. Estes objetos so descritos na arquitetura de forma genrica como ClasseHibernateDAO (na aplicao ser visto como FuncionrioHibernateDAO) e estes implementaro as suas respectivas interfaces, tambm descritas de forma genrica como ClasseDAO (na aplicao como FuncionarioDAO) que contm todas as assinaturas dos mtodos de gerncia dos objetos como incluir (persistir), excluir, dentre outros. A partir deste ponto, aberta uma seo com o banco atravs do HibernateConfiguration e os mtodos chamados podero ser executados.
A APLICAO
Com o objetivo de manter um aspecto tcnico e prtico deste trabalho, ser considerada uma aplicao contendo apenas uma classe, Funcionrio. A partir desta classe, sero construdas as principais funcionalidades de gerncia de objetos como persistir, recuperar apenas um objeto, recuperar todos os objetos persistidos e excluso. Desta forma, todos os atributos para esta classe so apresentados na figura 2.
Funcionario
private String nome; private int idade; private String cpf;
Para a arquitetura utilizada como modelo de desenvolvimento desta aplicao, os mtodos de persistncia e recuperao dos objetos ficaro escritos em uma classe especfica, deixando apenas na classe Funcionario os atributos e seus mtodos de acesso alm do construtor default, apresentando desta forma uma classe com todas as 3
caractersticas POJO (Plain Old Java Object) para manipulao do Framework de persistncia Hibernate. O banco de dados utilizado ser o PostgreSQL por ser um banco objetorelacional e apresentar as caractersticas de estabilidade e confiabilidade. Desta forma, os objetos gerados pela aplicao sero persistidos e recuperados no banco atravs do Hibernate.
Agora, informe o nome para a Library na caixa Library Name. Para este exemplo, digite Hibernate e clique em ok. Com a Library j construda, adicione agora as bibliotecas (.Jar) do Hibernate 3.1. Para isso, clique no boto Add Jar/Folder... Direcione para o local em que o Hibernate foi descompactado e localize o diretrio hibernate-3.1. Dentro dele localize o arquivo hibernate3.jar e adicione-o clicando nele e em seguida no boto Open. Veja na figura 5 que o ClassPath foi preenchido.
Mas ainda faltam as demais Librarys existentes no diretrio lib do hibernate. Para tanto, volte no boto add Jar/Folder... e direcione para o sub diretrio lib existente no diretrio hibernate-3.1 e adicione todas as librarys existentes (todos os arquivos jar) e em seguida clicando no boto Open, veja na figura 6:
Figura 6 Seleo das demais bibliotecas do Hibernate na pasta Lib
Neste momento todas as librarys do hibernate foram adicionadas a Library criada anteriormente. Por fim, clique em Ok para terminar a construo desta nova Library no NetBeans. Repita agora o mesmo procedimento para a construo de uma Library para o driver JDBC do PostgreSQL. D o nome para ela de JDBCPostgreSQL como na figura 7.
Aps isso, adicione o arquivo postgresql-8.2dev-501.jdbc2.jar . Por ltimo falta apenas adicionar as duas Librarys criadas anteriormente ao projeto. Para isso, v ao inspetor de Projetos e clique com o boto direito sobre as Libraries e escolha Add Library como na figura 8.
Escolha agora as duas Librarys criadas anteriormente e clique no boto Add Libary. Aguarde um momento enquanto o NetBeans atualiza o ClassPath e veja que 6
todas as bibliotecas do Hibernate e do Driver do PostgreSQL foram adicionadas ao seu projeto atravs da figura 9.
A janela New File ser aberta, nela visualize a lista das Categories e escolha Java Classes e na lista de Files Types escolha Java Class, veja a figura 11.
Em seguida, veja a figura 12, clique em Next. Na tela seguinte digite o nome para a classe (Funcionario) e clique em Finish.
Pronto, a classe Funcionario foi criada. Agora, complete esta classe com os atributos descritos na figura 13:
Construa agora os mtodos getters e setters para cada um deles. Para isso, clique primeiramente em cima de qualquer um dos atributos e v at o menu Refactor e escolha Encapsulate Fields... Na tela Encapsulate Fields Funcionario, marque todos os mtodos a serem construdos e desmarque a caixa Preview all changes, veja na figura 14:
Em seguida clique em Next e pronto, todos os mtodos de get e de set foram criados.
Para realizar o mapeamento proposto, crie um arquivo XML, selecionando com o boto direito o Default Package e escolhendo a opo New e em seguida File/Folder, veja na figura 15:
Na janela seguinte, New File apresentado na figura 16, nas Categories escolha XML e na lista Files Type escolha XML Document:
Em seguida, clique em Next. Na ltima tela, como nome para este arquivo, digite Funcionario.hbm. Por ltimo clique em Next e na prxima tela em Finish. Veja a figura 17.
10
No mapeamento acima, a classe Funcionario da aplicao relacionada tabela funcionario do banco de dados. As tags property indicam o mapeamento dos atributos da classe com os campos da tabela, descrevendo tambm os valores que podem ser atribudos aos mesmos.
No cdigo acima so definidos, entre outros, o driver de conexo, o usurio e a senha de acesso, bem como os arquivos que descrevem o mapeamento das classes de negcio.
12
Obs.: Neste ponto, algumas linhas do seu cdigo iro ficar marcadas de vermelho. No se preocupe, elas indicam apenas que as demais classes ainda no foram construdas, isso ser feito nos prximos passos. Agora, crie a interface para a construo do FuncionarioDAO. Chame esta interface de DAOFactory e digite o cdigo da figura 21 para ela:
Aps ter construdo a interface DAOFactory, vamos implement-la em uma classe. Para isso, crie uma nova classe e a chame de HibernateDAOFactory. Nesta classe, vista na figura 22, implemente a interface DAOFactory e em seguida, sobrescreva o mtodo criarFuncionarioDAO( ) adicionando a ele a funcionalidade de instncia do FuncionarioHibernateDAO( ).
CONSTRUINDO OS DAOS
Vamos, primeiramente, construir a interface do Funcionario. Nela ns teremos as assinaturas dos mtodos de gerenciamento um novo funcionrio. As implementaes sero realizadas posteriormente. Para isso, crie uma nova interface e chame-a de FuncionarioDAO e adicione a ela as seguintes assinaturas de mtodos descritas na figura 23:
13
O mtodo carregarUm ir retornar um funcionrio que possua o nome especificado no parmetro. J o mtodo carregarTudoOrdenadoNome ir recuperar todos os funcionrios existentes no banco de dados, ordenados pelo atributo nome. Os mtodos gravar e excluir realizam as funes de insero e excluso para os objetos que forem definidos como seus parmetros. Como segundo passo, iremos construir a classe FuncionarioHibernateDAO. Para isso, construa uma nova classe e d este nome para ela. Veja o cdigo na figura 24:
14
Agora, vamos escrever os cdigos de cada um destes mtodos, veja nas figuras abaixo: a) Mtodo carregaUm, visto na figura 25:
As classes Session e Transaction controlam, respectivamente, a abertura e o fechamento de sesses de acesso ao banco de dados, e o incio e a concluso de transaes. Emprega-se a classe Criteria para definir-se critrios de busca de objetos. Esses critrios podem ser definidos utilizando a classe Expression. [BAUER & KING, 2005] No cdigo anterior, definido um critrio de busca de objetos da classe Funcionario, retornando somente aquele que possuir o atributo nome igual ao parmetro informado ao mtodo. b) Mtodo carregaTudoOrdenadoPorNome, visto na figura 26:
No mtodo acima retorna-se uma lista de objetos da classe Funcionario, ordenados pelo atributo nome. c) Mtodo gravar, visto na figura 27:
J neste mtodo, deve-se informar um objeto da classe Funcionario o qual ser persistido no banco de dados empregando-se o mtodo saveOrUpdate. d) Mtodo excluir, visto na figura 28: 15
Finalmente, no mtodo acima, um objeto da classe Funcionario excludo do banco de dados por meio do mtodo delete.
DE
CONFIGURAO
Como ltimo passo dever ser construdo o arquivo que permitir abrir uma sesso com o banco. Este arquivo uma classe que chama-se HibernateConfigurao, com os mtodos openSession e criaSessionFactory. O primeiro responsvel por verificar se j existe uma sessionFactory instanciada na aplicao. Se sim, ele retorna esta sesso para a aplicao que requisitar. O segundo mtodo faz o inverso, caso a session esteja instanciada, ele ser responsvel por permitir a instncia de uma nova session, baseando-se no arquivo hibernate.cfg.xml, definido anteriormente. Para isso construa uma nova classe e chame-a de HibernateConfigurao e complete-a de acordo com a figura 29, veja:
16
17
Agora, para persistir um novo Funcionrio, digite o cdigo da figura 32, veja:
18
19
CONCLUSO
pO presente artigo procurou demonstrar de forma prtica, a implementao de uma aplicao simples em Java utilizando a camada de persistncia Hibernate para o armazenamento e manipulao de objetos em um SGBD OR. Para isso, o artigo foi escrito sobre a forma de um tutorial, apresentando todos os passos necessrios para a construo deste tipo de aplicao comeando desde a escrita das classes POJO, passando pelo mapeamento objeto-relacional e a construo dos mtodos de persistncia que utilizam o Hibernate para a manipulao das informaes. Alm disso, seguiu-se uma arquitetura (padro) de desenvolvimento, atravs de um modelo proposto por Julio Ferman, na revista Java Magazine, e adaptado para a soluo deste artigo, procurando seguir uma forma de desenvolvimento que se aplique, de forma genrica, a todas as classes de qualquer sistema que venha a ser desenvolvido em Java e que faa uso do Hibernate. Com isso, o artigo mostra como organizar as classes de negcio existentes nas aplicaes com o objetivo de prepar-las para a persistncia em um banco de dados, a forma de construir uma aplicao seguindo uma arquitetura de desenvolvimento prpria para persistncia de objetos em bancos relacionais sem gerar cdigos desnecessrios, confusos e mal organizados e como aplicar os mtodos de gerencia (persistir, recuperar, dentre outros) em uma aplicao explorando ao mximo a produtividade da mesma sem que isso gere custos exagerados de processamentos para a mquina, tornando a aplicao leve e rpida, mesmo se tratando de mapeamento de informaes entre um banco relacional e uma aplicao orientada a objetos.
BIBLIOGRAFIA
BAUER, C. e KING, G. Hibernate em ao. Primeira Edio. 2005: Rio de Janeiro, Editora Cincia Moderna. EMILO, C. e SEVER, P. NetBeans IDE 4.1 Para desenvolvedores que utilizam a tecnologia Java. Primeira Edio. 2005: Rio de Janeiro, Editora Brasport. OLIVEIRA, Djalma P. R. de. Sistemas de Informaes gerenciais: estratgias, tticas operacionais. Stima Edio. So Paulo: Atlas, 2001. PRESSMAN, R. Engenharia de Software. Sexta Edio. McGraw-Hill, 2005. SILBERSCHATZ, Abraham, KORTH, Henry F. e SUDARSHA, S. Sistema de Banco de Dados. Terceira Edio. So Paulo: Makron Books, 1999. FAERMAN, Julio. Design Patterns Aplicados. Java Magazine, Rio de Janeiro, edio 20, p. 52-58, jan. 2005.
20