1 UNIVERSIDADE FEDERAL DE SANTA CATARINA - UFSC Desenvolvimento da Camada de Persistência do Projeto SIAP-F Trabalho de Conclusão de Curso apresentado ao Curso de Bacharelado em Sistemas de Informação da Universidade Federal de Santa Catarina como requisito parcial para obtenção do grau de bacharel em Sistemas de Informação Orientador: Prof. Leandro J. Komosinski, Dr. Florianópolis 2005 HENRIQUE SCHAEFER VITOR FERREIRA ISAIA 2 Framework para um Sistema de Acompanhamento de Pedidos - SIAP-F Florianópolis, 31 de Maio de 2005. BANCA EXAMINADORA ______________________________ Prof. Leandro J. Komosinski Universidade Federal de Santa Catarina Orientador _______________________________ ______________________________ Prof. Frank Augusto Siqueira Prof. Aline de França Abreu Universidade Federal de Santa Catarina Universidade Federal de Santa Catarina SUMÁRIO 1. Introdução ............................................................................................................ 6 1.1. Objetivos do Trabalho ...................................................................................... 6 1.1.1. Objetivo Geral ................................................................................................ 7 1.1.2. Objetivos Específicos..................................................................................... 7 3 1.3. Justificativa do Trabalho ................................................................................... 7 1.4. SIAP-F Visão geral ........................................................................................... 8 1.4.1 O Padrão MVC ............................................................................................... 8 1.4.2 A Estrutura ...................................................................................................... 9 2. Estado da Arte ................................................................................................... 12 2.1. Soluções existentes no mercado .................................................................... 12 3. Solução Proposta............................................................................................... 20 3.1. Pizzaria........................................................................................................... 20 3.2. Análise Orientada a Objetos........................................................................... 21 5. A Estrutura da camada de persistência ............................................................. 22 5.1 Abordagem Entidade Relacionamento ............................................................ 22 5.2 Definição das Classes da camada de Persistência ......................................... 22 5.3 A Tecnologia Hibernate ................................................................................... 24 6. Tecnologias Auxiliares ....................................................................................... 26 6.1 Log4j ............................................................................................................... 26 6.2 Ant ................................................................................................................... 26 6.3 CVS ................................................................................................................. 27 6.4 Jakarta Tomcat ................................................................................................ 27 7. Conclusão .......................................................................................................... 29 7. Bibliografia ......................................................................................................... 30 Lista de Siglas. XML: eXtensible Markup Language J2EE: Java 2 Platform, Enterprise Edition J2SE: Java 2 Platform, Standard Edition SGBD: Sistema gerenciador de Banco de Dados HTTP: HyperText Markup Language MVC: Model, View e Controller JVM: Java Virtual Machine HQL: Hibernate query language 4 Resumo No presente trabalho apresenta-se uma solução de camada de persistência objetorelacional em Java, para o framework de acompanhamento de pedidos SIAP-F. O framework foi projetado para atender desde pequenos negócios até grandes linhas de montagens, fornecendo informações de cada etapa do pedido, para acompanhamento via web. Foi utilizada a arquitetura de 3 camadas (apresentação, lógica e persistência), para que a identificação dos papéis dentro do framework ficasse totalmente clara. PALAVRAS-CHAVE: PERSISTÊNCIA DE DADOS, JAVA, HIBERNATE, ACOMPANHAMENTO DE PEDIDOS.1. INTRODUÇÃO Em várias organizações a relação entre cliente e empresa o processo de compra de um produto ou serviço passa pelo ciclo escolher o produto ou serviço a ser comprado, fazer o pedido, aguardar o pedido ou serviço ficar pronto e, finalmente, receber o produto ou serviço. Para o cliente, uma vez feito o pedido, é importante saber como está andando o seu pedido, ou seja, em que etapa da produção está e, principalmente, quando ele será entregue. Para a empresa é importante ter acesso a todas as informações relacionadas ao processo produtivo, em todas as suas etapas. Pode-se, com isso, produzir diversas estatísticas sobre a cadeia produtiva. Por exemplo, podem-se identificar gargalos de produção. 5 De posse de todas as informações é possível melhorar a qualidade no atendimento ao cliente, fornecendo-lhe informações confiáveis sobre quando o produto ou serviço será entregue. 1.1. Objetivos do Trabalho 1.1.1. Objetivo Geral O objetivo deste trabalho é o desenvolvimento da Camada de Persistência do Projeto SIAP-F, um framework que servirá para agilizar o desenvolvimento de sistemas de informação que permitam o acompanhamento de pedidos. A intenção é capturar e implementar os requisitos comuns a grande maioria dos sistema de acompanhamento de pedidos no que diz respeito a pesistência dos dados, fazendo com que o desenvolvimento de novos sistemas com esse fim sejam agilizados. 1.1.2. Objetivos Específicos - Estudar o Pattern MVC; - Estudar Hibernate; - Desenvolver duas aplicações como modelo para o framework; - Desenvolver um framework para sistemas de acompanhamento de pedidos; 6 1.3. Justificativa do Trabalho No período pré-Internet, o cliente fazia o acompanhamento dos seus pedidos via inspeção in loco quando possível ou, o mais comum, via telefone. Com a disseminação da Internet este acompanhamento pode ser feito a partir de qualquer dispositivo (computador, telefone celular, PDA, etc.) que tenha acesso à Internet. O desenvolvimento de um sistema próprio ou a compra e personalização de um sistema existente apresentam problemas. O desenvolvimento de sistemas próprios são inviáveis pois seu tempo de construção e, consequentemente, custo são grandes. Por outro lado, os sistemas existentes no mercado são destinados à grandes empresas. Consequentemente seu custo de personalização e implantação muitas vezes os torna inviáveis para pequenas e médias empresas. Uma solução para os problemas levantados é a construção de sistemas de acompanhamento de pedidos a partir de um framework concebido para este tipo de problema. 1.4. SIAP-F Visão geral 1.4.1 O Padrão MVC O padrão MVC foi originado do SmallTalk, e consiste em três elementos: o Modelo, a Visão e o Controlador, conforme descrito abaixo (CAVANESS, 2002): 7 manipulado e apresentado ao usuário. o dos objetos de dados. o Controlador: Define a maneira que a interface com o usuário reage às entradas de um usuário. É o objeto que manipula o Modelo. Os benefícios trazidos pela utilização do MVC são os seguintes (CAVANESS, 2002): o Confiabilidade: As camadas de apresentação e de transação têm uma clara delimitação, o que permite mudar a aparência da aplicação sem recompilar o código do modelo ou do controlador. Isto permite que alterações na aparência não afetem a estabilidade do código responsável pela execução de transações. o Reutilização elevada e adaptabilidade: O MVC permite o uso de múltiplos tipos de visão, todas acessando o mesmo código no servidor. o Baixo custo de desenvolvimento e ciclo de vida minimizado: O MVC torna possível possuir programadores de lógica da aplicação e designers responsáveis por manter as interfaces com o usuário, aumentando assim a produtividade e a qualidade do produto final promovida pela especialização das atividades. o Desenvolvimento rápido: o tempo de desenvolvimento pode ser reduzido substancialmente porque os programadores do controlador podem focar apenas em transações, e os designers podem manter seu foco apenas na apresentação. 8 1.4.2 A Estrutura O projeto SIAP-F é composto por três equipes, assim cada equipe implementa uma camada segundo o padrão MVC. A visão ou apresentação é implementada pelo colega Renê Fischer e inicialmente será desenvolvida para a WEB sendo acessada pelo navegador, observa-se, no entanto que poderá ser desenvolvida a camada de apresentação tanto para desktop, palm, celulares e outros, assim que for criada a demanda sem interferir em nada no funcionamento das demais camadas que não sofrerão nenhuma alteração. A camada lógica é implementada pelos colegas IIsac Ramos Luz e David Gerson Ramos de Andrade e é nela que é feito todo o controle do fluxo de dados, a comunicação entre a camada de apresentação e a da persistência. Ela é desenvolvida de modo que toda e qualquer modificação nas demais camadas não afetem o seu funcionamento. A camada de persistência é implementada pelo nosso grupo e representa o domínio do problema. O modelo serve para duas principais finalidades: (WALNES): – Expor os dados encapsulados pela aplicação, assim como uma lista de produtos do inventario. 9 – Permitir que a lógica do negócio seja executada no modelo, assim como a compra de um produto. Compreende todos os objetos de negócio onde se implementa a lógica de negócio (o "how it's done") e onde se deve suportar todos os requisitos e funcionalidades do sistema. Define o banco de dados a ser utilizado para persistir as informações do sistema, que até o momento o escolhido foi o MySQL. Para utilização da camada de persistência estamos utilizando o hibernate que até o momento é a forma mais apropriada para a implementação, dadas a suas vantagens e também ao nosso escopo. 1.6. Metodologia Como metodologia foi definida o desenvolvimento e duas aplicações, bem distintas, principalmente na quantidade de etapas do pedido, para que pudéssemos observar o que de comum existe entre essas diferentes aplicações que possam fazer parte do framework. A primeira aplicação implementa um sistema mais simples de acompanhamento de pedidos, com poucas etapas. Foi desenvolvido um sistema para uma pizzaria, que é composto por 3 etapas para os clientes (pedido efetuado, montando pizza e em entrega) e em 6 etapas para a própria pizzaria. 1 0 o A segunda aplicação será realiza posteriormente, quanto também será montado framework após a análise e constatação das similaridades das duas aplicações. O framework será desenvolvido conforme os fatos comuns que serão observados nas duas aplicações e será utilizado XML para a configuração do framework. 1.5 Arquitetura A arquitetura do projeto SIAP-F é mostrada na figura abaixo, sendo que neste trabalho trabalharesmos a Camada Persistência. 1 1 1 2 2. ESTADO DA ARTE Paralelamente ao desenvolvimento, foram realizadas uma série de buscas de bibliografias e tecnologias com o intuito de auxiliar o desenvolvimento da camada lógica – denomidada também como Servidor. Com o resultado de tais pesquisas concluiu-se que é necessário um denso estudo nas principais tecnologias de software de 3 camadas. Entre tais tecnologias são citadas: o Framework Spring, a IDE de desenvolvimento Eclipse com os plugins para auxílio de implementação, JavaBeans, alguns Design Patterns como: DTO (Data Transfer Object); Session Façade; a metalinguagem de marcação XML e a tecnologia JSP baseada em Servlets (o servidor deve estar preparado para atender requisições a partir do browser). Estaremos detalhando estas tecnologias a seguir, descrevendo as funcionalidades utilizadas no desenvolvimento deste projeto. 2.1. Soluções existentes no mercado Foi realizada extensa pesquisa na internet em busca de soluções existentes no mercado, gratuita ou não, que se assemelhasse em contexto, problema e proposta de solução, ao modelo SIAP-F. Esta pesquisa, até o presente momento, não retornou resultados que pudessem indicar a existência de tais itens. Em contrapartida algumas soluções comuns foram encontradas relacionadas à área de acompanhamento de pedidos. Entre as quais podemos citar: 1 1- 3 O acompanhamento tradicional de um site bem conhecido: Submarino. O acompanhamento é diferenciado de acordo com o tipo de produto adquirido. Mostramos nas figuras a seguir o acompanhamento mais completo, que seria de Livros, CDs e DVDs. (https://www.submarino.com.br/orderstatus.asp). Figura 1 – Tela de Consulta de Pedidos do Submarino 1 4 Figura 2 – Destaque dos Pedidos selecionados Nos dois campos circulador na figura 2 podemos ter maiores informações. Através do STATUS é possível ter um breve relato da última ação tomada. Já através do ACOMPANHE A ENTREGA pode-se ter detalhadamente o caminho percorrido pelo produto desde sua origem até o seu destino final. 1 5 Figura 3 – STATUS - Detalhe do Pedido solicitado 1 6 Figura 4 – ACOMPANHE A ENTREGA: Parceria com os Correios 2- Um kit de loja virtual para quem deseja disponibilizar seus produtos, oferecido pela empresa Internet oficial.com.br/222/e-commerce.htm). Oficial (http://www.internet- 1 7 Figura 1 – Modelo do kit oferecido pela Internet Oficial 3- Kit de loja virtual configurável oferecido pela empresa Haven Hosting (http://www.haven.com.br/loja.html). 1 8 Figura 2- Modelo do kit oferecido pela empresa Haven Hosting 4- Empresa DigiPix (www.digipix.com.br/duvidas.html) que oferece a possibilidade de fazer acompanhamento de pedidos fotográficos feitos através de seu site. E a possbilidade do cliente inserir em sua própria página um link para pedidos terceirizados de soluções fotográficas. 1 9 Figura 3 – Página de logon para pedido e acompanhamento de pedidos fotográficos. 3. SOLUÇÃO PROPOSTA Para facilitar o desenvolvimento do framework foi modelada e desenvolvida uma pequena aplicação de exemplo: Sistema de acompanhamento de pedidos para uma pizzaria. Desta forma foi possível identificar entidades que possivelmente farão parte do framework final. 3.1. Pizzaria O sistema de acompanhamento de pedidos para a pizzaria trata o típico caso de um pedido de uma pizza, que é: 2 O cliente telefona para a pizzaria identificando-se com seu número de telefone. 0Com esta informação o atendente verifica no sistema se o cliente já está cadastrado. Se o mesmo não estiver, então é realizado o seu cadastramento no sistema, que inclui nome e telefone. Após a identificação do cliente o atendente registra o pedido no sistema incluindo qual pizza o cliente deseja, sendo que o pedido poderá somente conter um produto(pizza) por vez. Registrado o pedido, o número do mesmo é passado ao cliente para futuro acompanhamento, onde poderá ser observada a etapa atual do pedido. Nesta consulta também será possível verificar o tempo restante estimado para a entrega. Para que o sistema possa ser operado, previamente é necessária a inclusão dos produtos (pizzas) no banco de dados através do sistema, assim como as etapas que os compõem. O produto(pizza) possui três etapas na sua produção, as quais são cadastradas juntamente com o produto. Estas etapas possuem nome e duração, os quais são informados no seu cadastramento. 3.2. Análise Orientada a Objetos Com base no texto acima identificamos como grandes candidatas para uso no framework as entidades Cliente, Pedido, Produto e Etapa que estão melhor apresentadas abaixo: 2 1 ATÉ O PRESENTE MOMENTO, ESTA É FOI A ANÁLISE OO REALIZADA PARA O FRAMEWORK. NO PRÓXIMO TRABALHO, EM PROJETOS II, SERÁ FEITA UMA ANÁLISE MAIS COMPLETA, ALÉM DO PROJETO E DESENVOLVIMENTO.5. A ESTRUTURA DA CAMADA DE PERSISTÊNCIA 5.1 Abordagem Entidade Relacionamento 2 2 O armazenamento dos dados da camada de persistência é feito em um banco de dados relacional. Com isso, a técnica de modelagem dos dados que foi utilizada é a abordagem entidade-relacionamento. Uma entidade representa um conjunto de objetos da realidade modelada. Tais entidades possuem relacionamentos entre si, que segundo o mesmo autor significam a associação entre objetos (entidades) de um banco de dados. 5.2 Padrões de Projetos Utilizados Foram utilizados neste trabalho os seguintes padrões de projeto: o DAO: Data Access Object. De acordo com a Sun (responsável pela tecnologia JAVA), o padrão DAO adapta uma API específica de acesso a banco de dados a uma interface genérica de acesso para o cliente. O padrão DAO permite a mudança do mecanismo de acesso ao banco de dados sem implicar em alterações no código que usa os dados. No projeto SIAP-F, as classes que seguem o padrão DAO são aquelas que fazem uso das bibliotecas do Hibernate, a ser detalhado adiante. o POJO: Plain Old Java Object. Trata-se de objetos Java comum, sem nenhuma lógica dentro de seu código. Possuem apenas atributos e seus respectivos médotos de acesso (getters e setters). No projeto SIAP-F, as classes POJO são aquelas que estão associadas à tabelas, para a utilização do Hibernate. A estrutura de cada classe corresponde à estrutura da tabela em que a classe está associada. 2 3 o Facade: Fachada. É a “porta de entrada” da camada de persistência. Possui todos os métodos relevantes à camada lógica. Cada método está associado ao objeto responsável pelo verdadeiro processamento a ser feito, devolvendo ou não um resultado. É importante ressaltar que não há nenhuma outra implementação da fachada que não seja a chamada de métodos de outros objetos. No projeto SIAP-F existe um único facade, chamado de PersistenceFacade, que implementa a interface IPersistenceFacade. o Static Factory: Classe com um ou mais métodos que devolvem instâncias de um objeto. O retorno destes métodos é um objeto instanciado que implementa determinada interface, a ser utilizada pelo cliente que utiliza a factory. No projeto SIAP-F existe uma única factory, chamada de PersistenceFactory, que devolve objetos que implementem a interface IpersistenceFacade. 5.3 Classes Definidas Os próximos tópicos colocam as classes que foram criadas no desenvolvimento da persistência. 5.3.1 PersistenceFactory Sua função é de instanciar a classe que será usada pela lógica no acesso aos serviços oferecidos pela persistência. Retorna uma instância da classe PersistenceFacade. Utiliza o padrão Static Factory. 2 5.3.2 IPersistenceFacade 4 Interface que define os serviços oferecidos pela camada persistência. Utiliza o padrão Facade. 5.3.3 PersistenceFacade Classe que implementa a interface IpersistenceFacade 5.3.4 BasePOJO Sua única função é servir de filtro no BaseDAO, para que os métodos insert, delete e uptade só aceitem como parâmetros objetos que estendam esta classe. 5.3.5 CustomerPOJO Estende a classe BasePOJO e representa a persistência de um Cliente. Utiliza o padrão POJO. Seus atributos são: id (identificador), name (nome do Cliente) e phoneNumber (número do telefone do Cliente). 5.3.6 OrderPOJO Estende a classe BasePOJO e representa a persistência de um Pedido. Utiliza o padrão POJO. Seus atributos são id (identificador), customerPOJO (Cliente que fez este pedido), productPOJO (produto escolhido para este pedido) e stagePOJO (etapa atual em que o pedido se encontra). 5.3.7 ProductPOJO Estende a classe BasePOJO e representa a persistência de um Produto. Utiliza o padrão POJO. Seus atributos são id (identificador), name (nome do produto) e description (descrição do produto). 2 5 5.3.8 StagePOJO Estende a classe BasePOJO e representa a persistência de uma Etapa. Utiliza o padrão POJO. Seus atributos são id (identificador), name (seu nome), durationTime (duração em minutos da etapa), sequence (a ordem desta etapa) e relatedProduct (indica de qual produto esta etapa está associada). 5.3.9 IBaseDAO Interface que define os métodos para operações com o banco de dados, como inserção, remoção e consulta, entre outros. Utiliza o padrão DAO. 5.3.10 BaseDAO Classe que implementa a interface IBaseDAO. 5.3.11 IPersistenceController Interface que define os serviços de processamento existentes na camada de persistência, como conversão de DTOs para POJOs, formatação de dados, entre outros. 5.3.12 PersistenceController Classe que implementa a interface IPersistenceController 5.4 A Tecnologia Hibernate 2 6 Hibernate é um framework que implementa persistência objeto / relacional para Java. Permite desenvolver classes persistentes em Java, utilizando-se de heranças, associações, entre outros. Além disso, Hibernate também possui a HQL - Hibernate Query Language - que não é nada mais que uma extensão a linguagem SQL normal, adicionando extensões orientadas a objeto. Hibernate está sobre a licença LGPL, o que significa que ele é um software livre que pode ser utilizado juntamente com softwares comerciais. Hibernate lê mapeamentos de arquivos xml. Assim, cada tabela de um sistema possui um arquivo xml que mapeia seus campos para um JavaBean. Para iniciar o uso do Hibernate, é necessário criar uma sessão hibernate, que é gerada através da classe SessionFactory. Essa classe lê os mapeamentos xml e gera a sessão. A partir dessa sessão, é possível gerenciar os dados dos bancos de dados. 5.4.1 Vantagens Uma grande vantagem trazida ao mapear bancos de dados relacionais para classes Java, é a de que o programador não precisa ficar alternando da visão orientada a objeto para a relacional toda vez que ele vai acessar o banco de dados, pois toda a maneira de pensar sobre o banco de dados torna-se orientada a objeto. Hibernate também possui grandes facilidades para realizar queries e buscas - um de seus métodos simples busca um objeto inteiro da base de dados. Por esses e outros motivos, ele reduz de uma maneira significativa o tempo de desenvolvimento. 2 7 Para alterar-se a base de dados, somente é necessário alterar qual o tipo do banco utilizado no arquivo de configuração do hibernate, e automaticamente todas as queries passarão a ser realizadas para o banco de dados escolhido. 6. TECNOLOGIAS AUXILIARES 6.1 Log4j O Log4j faz parte do Projeto Jakarta, e é uma ferramenta muito útil para depuração e tratamento de exceções e/ou erros. Essa tecnologia fornece um mecanismo para controlar declarativamente as mensagens de log, de forma que os códigos de produção e de testes sejam os mesmos, e a sobrecarga de processamento seja mínima quando o log estiver em sua configuração mínima de detalhamento. Ele é responsável por cuidar de qualquer tipo de mensagem, desde alertas a mensagens de erro. (SHENOY e MALLYA, 2004). Vantagens sobre o gerenciamento de erros pelo contêiner: - Os erros do contêiner são gravados no console, entretanto procurar no console por uma exceção não é adequado em um sistema que estiver em produção. - Mesmo se o log do console for redirecionado para um arquivo de saída, ainda assim o arquivo pode ser sobrescrito quando o servidor for reiniciado. - É mais vantajoso utilizar a ferramenta Log4j do que usar os comandos para escrever mensagens destinadas a depuração durante a fase de testes. Esta 2 8 do outra opção implica que seja necessário apagar as mensagens antes programa ser utilizado em um ambiente de produção, o que não garante que o código seja o mesmo código de testes. 6.2 Ant O Ant é uma ferramenta para automação de construção de aplicações independente de plataforma. O Ant é um projeto de código aberto, que faz parte do projeto jakarta . O ANT pode, por exemplo, atualizar localização das classes, compilar o código separando os binários do código fonte em pastas distintas, gerar arquivos de distribuição, gerar documentação do projeto, efetuar testes de unidade no código, configurar e executar a aplicação. A automação de tarefas não é novidade, entretanto o que faz o Ant ser poderoso é o fato de ser independente de sistema operacional. Além disso, é independente de ambiente de desenvolvimento sendo que a maior parte destes ambientes já trabalha com o Ant. Uma de suas principais vantagens é que seu arquivo de configuração em XML torna-o fácil de aprender. (CAVANESS, 2002) 6.3 CVS 'Concurrent Versioning System', provê a habilidade para realizar mudanças incrementais sobre arquivos, e pode ser usado por vários desenvolvedores ao mesmo tempo. Assim, após realizar uma alteração em um arquivo, o desenvolvedor o envia 2 para o CVS (através da IDE de desenvolvimento) e o CVS trata de fazer um merge9 das alterações realizadas com o arquivo atual no servidor, criando um log das alterações. Assim, caso haja algum problema, ou alguém tenha sobrescrito a alteração de outra pessoa, esses dados são facilmente recuperados. 6.4 Jakarta Tomcat Servidor WEB da Apache Software Foundation que implementa containers para Java Servlets e Java Server Pages (JSP's). Na sua última versão estável (5.5.9), implementa as especificações de servlet 2.4 e JSP 2.0. Essas especificações são desenvolvidas pela Sun através do Java Community Process. O SERVIDOR TOMCAT ESTÁ SENDO UTILIZADO COMO PADRÃO PARA O DESENVOLVIMENTO DAS PÁGINAS PARA APLICAÇÕES JAVA QUE NÃO UTILIZAM EJB. TAMBÉM É DISTRIBUÍDO SOPRE A LICENÇA APACHE.7. CONCLUSÃO Observamos que não existe, até o presente momento, nenhum framework de acompanhamento de pedidos que seja semelhante ao SIAP-F. Para o desenvolvimento, foram eleitas as tecnologias como Java, Hibernate, IDE Eclipse, entre outras. Com base na aplicação exemplo Sistema de Acompanhamento de Pedidos para uma Pizzaria foi realizada uma primeira análise orientada à objetos, para identificação das possíveis entidades que irão compor o framework SIAP-F. 3 0 7. BIBLIOGRAFIA [1] LARMAN, Craig – Utilizando UML e Padrões – Uma introdução à análise e ao projeto orientado à objetos. Bookman, 2000. [2] ALUR, Deepak; MALK, Dans; CRUPI, Johns – Core J2EE Patterns – Best Practices and Design Strategies. Patience Hall PTR, 2nd Edition, 2003. [3] JBOSS GROUP – The Hibernate Tutorial http://www.hibernate.org (acesso: maio de 2005). [4] MARTIN, Robert C. - Principles, Patterns, and Practices: The Factory Pattern http://today.java.net/pub/a/today/2005/03/09/factory.html (acesso: maio de 2005). [5] SUN MICROSYSTEMS - Design Patterns: Data Access Object http://java.sun.com/blueprints/patterns/DAO.html (acesso: maio de 2005).