Daniel Bruno Fernandes Conrado Implementação Da
Total Page:16
File Type:pdf, Size:1020Kb
FUNDAÇÃO DE ENSINO “EURÍPIDES SOARES DA ROCHA” CENTRO UNIVERSITÁRIO EURÍPIDES DE MARÍLIA – UNIVEM CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO DANIEL BRUNO FERNANDES CONRADO IMPLEMENTAÇÃO DA PERSISTÊNCIA UTILIZANDO JPA E ASPECTJ MARÍLIA 2009 DANIEL BRUNO FERNANDES CONRADO IMPLEMENTAÇÃO DA PERSISTÊNCIA UTILIZANDO JPA E ASPECTJ Trabalho de Conclusão de Curso apresentado ao Curso de Bacharelado em Ciência da Computação da Fundação de Ensino “Eurípides Soares da Rocha”, mantenedora do Centro Universitário Eurípides de Marília – UNIVEM, como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Prof. Ms. PAULO AUGUSTO NARDI MARÍLIA 2009 Conrado, Daniel Bruno Fernandes Implementação da persistência utilizando JPA e AspectJ / Daniel Bruno Fernandes Conrado; orientador: Paulo Augusto Nardi. Marília, SP: [s.n.], 2009. 71 f. Trabalho de Curso (Graduação em Ciência da Computação) – Curso de Ciência da Computação, Fundação de Ensino “Eurípides Soares da Rocha”, mantenedora do Centro Universitário Eurípides de Marília – UNIVEM, Marília, 2009. 1. Programação Orientada a Objetos 2. Programação Orientada a Aspectos 3. Persistência 4. ORM 5. Java Persistence API 6. AspectJ CDD: 005.1 Aos meus irmãos, Juninho e Bruna. AGRADECIMENTOS Agradeço a Deus por dar sentido a minha vida, por todos os favores imerecidos que tenho recebido e pelas pessoas que fizeram e fazem parte da minha história. À minha querida esposa, Yumi ( ゆ み ), pelo amor, carinho, compreensão, apoio, e por simplesmente ser. Você é tudo na minha vida. あいしてる. À minha mãe, Dinha, por ter me ensinado a arte de aprender a viver e a cantar. Ao meu padrasto, Ronaldo, e ao meu pai, Dalton. Aos meus sogros, Gilson e Esther, por todos os conselhos, todo o apoio e carinho que me deram. Aos meus amigos Tsen e Steve, por terem acreditado em mim, me dado forças para continuar e motivos para não desistir. Ao meu orientador, Paulo Augusto Nardi, pelo auxílio, amizade e por todo conhecimento passado. Ao professor Elvis Fusco pelo apoio e amizade. Ao meu amigo Abraão, pelas loucuras e ideias malucas. Ao meu amigo Bicudo, pelos confrontos ideológicos, por ter sido meu padrinho de casamento e por ter chegado mais de doze horas atrasado na cerimônia. Ao pastor Gilberto Stéfano pelo exemplo de vida. À Igreja Batista da Fé, pelo companheirismo. À turma do LAS (Laboratório de Arquitetura de Sistemas), Antonio, Bruno, Denison e Ernesto por tornar agradáveis estes últimos dias de trabalho. A todos os alunos da minha classe. Aos demais professores, pelo conhecimento passado. Ao pessoal da copa da UNIVEM, pelo café com simpatia. “Não acumuleis para vós outros tesouros sobre a terra, onde a traça e a ferrugem corroem e onde ladrões escavam e roubam; mas ajuntai para vós outros tesouros no céu, onde traça nem ferrugem corrói, e onde ladrões não escavam, nem roubam; porque, onde está o teu tesouro, aí estará também o teu coração.” Mateus cap. 6, v. 19-21. CONRADO, Daniel Bruno Fernandes. Implementação da persistência utilizando JPA e ASPECTJ. 2009. 71 f. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação) – Centro Universitário Eurípides de Marília, Fundação de Ensino “Eurípides Soares da Rocha”, Marília, 2009. RESUMO Grande parte das aplicações comerciais atuais são desenvolvidas utilizando a programação orientada a objetos e realizam a persistência em bancos de dados relacionais. Porém, existem características do modelo relacional e do modelo orientado a objeto que levam a uma incompatibilidade entre estes dois modelos. A técnica de mapeamento objeto-relacional foi desenvolvida para reduzir tal incompatibilidade, contribuindo para a comunicação entre objetos e tabelas. Uma implementação desta técnica, utilizada na indústria de software, é o framework Java Persistence API. Com a utilização deste framework, porém, há um entrelaçamento entre o código funcional e o de persistência e ainda o espalhamento deste último por toda a aplicação. Isto acontece porque há uma carência por parte da programação orientada a objetos de abstrações adequadas para a modularização de códigos relativos a utilização do framework. Devido a esta carência, surgiu a programação orientada a aspectos, a qual provê novas abstrações capazes de modularizar tais códigos, e o framework AspectJ, que estende a linguagem Java com tais abstrações. Este trabalho tem como objetivo propôr uma implementação orientada a aspectos do uso do framework JPA em uma aplicação, de tal forma que não haja entrelaçamento e espalhamento do código relativo a este framework. Palavras-chave: Programação Orientada a Objetos. Programação Orientada a Aspectos. Persistência. ORM. Java Persistence API. AspectJ. CONRADO, Daniel Bruno Fernandes. Proposta de implementação da persistência utilizando JPA e ASPECTJ. 2009. 71 f. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação) – Centro Universitário Eurípides de Marília, Fundação de Ensino “Eurípides Soares da Rocha”, Marília, 2009. ABSTRACT Most current commercial applications have been developed using object-oriented programming and perform persistence in relational databases. However, there are features of the relational model and object-oriented model leading to a impedance mismatch between them. The object-relational mapping technique was developed to reduce this impedance mismatch, contributing to the communication between objects and tables. A widely used implementation of this technique in the software industry is the Java Persistence API. By using this framework, however, there is an interrelationship between the functional code and the persistence code, and further the spread of the latter throughout the application. This is due to the lack of abstractions suitable for modularization of this code by object-oriented programming. Because of this lack that the aspect-oriented programming emerged, which provides new abstractions capable of modularize such codes, and the AspectJ framework, which extends the Java language with such abstractions. This monograph aims to propose an aspect-oriented implementation of the use of the JPA framework in an application, so there is no interlacing and spreading code for this framework. Keywords: Object-Oriented Programming. Aspect-Oriented Programming. Persistence. ORM. Java Persistence API. AspectJ. LISTA DE FIGURAS Figura 1 – Possível implementação em Java da classe Conta............................................................16 Figura 2 – Classe Conta modelada com a UML.................................................................................17 Figura 3 – Fragmento do código em Java da classe Funcionário que implementa a associação trabalhaPara........................................................................................................................................18 Figura 4 – Associação trabalhaPara modelada com referências e sem referências. A parte (b) é a forma correta......................................................................................................................................18 Figura 5 – Associação possui entre as classes Venda e ItemVenda....................................................19 Figura 6 – Computador é agregado por monitor, teclado, mouse e CPU...........................................20 Figura 7 – A classe pedido é composta pela classe item....................................................................20 Figura 8 – Exemplo de multiplicidade...............................................................................................21 Figura 9 – Exemplo das anotações ordered e sequence......................................................................22 Figura 10 – Hierarquia da classe Peça................................................................................................23 Figura 11 – Classe Fluxos.java e saída gerada...................................................................................25 Figura 12 – Tabela de funcionários....................................................................................................27 Figura 13 – Exemplo de DER............................................................................................................29 Figura 14 – Conversão de DER para tabelas......................................................................................30 Figura 15 – Abordagem de uma tabela para uma hierarquia..............................................................35 Figura 16 – Abordagem de uma tabela para cada classe concreta......................................................35 Figura 17 – Abordagem de uma tabela para cada classe....................................................................36 Figura 18 – Abordagem de classes para uma estrutura genérica de tabelas.......................................37 Figura 19 – Implementação em Java do relacionamento um para muitos entre as classes Carro e Pneu....................................................................................................................................................38 Figura 20 – Implementação em Java de um relacionamento muitos para muitos com atributos.......39 Figura 21 – Mapeamento de um relacionamento um para um...........................................................40 Figura 22 – Relacionamento muitos para muitos mapeados em tabelas............................................40 Figura 23 – Classe Funcionario e respectiva tabela...........................................................................42 Figura 24 – Exemplo de mapeamento JOINED.................................................................................43