raphael barreto palhares de campos

Upload: denilsoncosta

Post on 09-Jul-2015

475 views

Category:

Documents


0 download

TRANSCRIPT

RAPHAEL BARRETO PALHARES DE CAMPOS

ANLISE COMPARATIVA DE FRAMEWORKS DE PERSISTNCIA

LAVRAS MG 2010

RAPHAEL BARRETO PALHARES DE CAMPOS

ANLISE COMPARATIVA DE FRAMEWORKS DE PERSISTNCIA

Monografia de graduao apresentada ao Departamento de Cincia da Computao da Universidade Federal de Lavras como parte das exigncias do curso de Cincia da Computao para obteno do ttulo de Bacharel em Cincia da Computao

Orientador Dr. Andr Vital Sade

LAVRAS - MG 2010

RAPHAEL BARRETO PALHARES DE CAMPOS

ANLISE COMPARATIVA DE FRAMEWORKS DE PERSISTNCIA

Monografia de graduao apresentada ao Departamento de Cincia da Computao da Universidade Federal de Lavras como parte das exigncias do curso de Cincia da Computao para obteno do ttulo de Bacharel em Cincia da Computao

APROVADA em ____ de _______________ de ______ Dra. Ana Paula Piovesan Melchiori DCC/UFLA Dr. Antnio Maria Pereira de Resende DCC/UFLA

________________________________________________ Dr. Andr Vital Sade Orientador

LAVRAS - MG 2010

Dedico A meus pais Joo Guilherme e Alice. A minha irm Marina. A minhas tias Denise e Cida. A minhas avs Nita e Aparecida.

AGRADECIMENTOS

A meu pai e minha me pelos exemplos de luta, dedicao e honestidade. s minhas tias Denise e Cida, pelo apoio incondicional prestado durante toda a minha vida e por serem tambm minhas mes. minha irm Marina, pela amizade, e tambm pelas conversas de msn na madrugada! =) Ao meu orientador e amigo Andr Sade, pela orientao e oportunidade de desenvolver este trabalho. Ao pessoal da Mitah Technologies pelo companheirismo e amizade, em especial ao Ricardo Victrio, pela ajuda prestada durante a implementao. Ao pessoal da Devex Tecnologia e Sistemas, por todos os anos de aprendizado e muito trabalho, e que muito contriburam para meu crescimento profissional e pessoal. s instituies FAPEMIG e CNPq pela oportunidade desenvolver trabalhos de iniciao cientfica durante boa parte da minha graduao. Aos meus amigos: o pessoal do metal de Ouro Branco, a turma de 2005/2 da Computao, o povo da minha banda (Os Internautas) e ao povo da Repblica Zona51. s grandes personalidades que sempre me inspiraram com suas idias: James Hetfield, Steve Harris, Bruce Dickinson, JRR Tolkien, Douglas Noel Adams, Charles Darwin, Stephen Hawking, Richard Dawkins, dentre vrios outros que poderia continuar listando durante um bom tempo.

RESUMO Em razo da impedncia existente entre o modelo Orientado a Objetos, utilizado no desenvolvimento de software, e o modelo Relacional dos Bancos de Dados, surgiram tcnicas de mapeamento objeto-relacional (ORM) que permitem uma melhor comunicao entre os dois modelos. Contudo, existem vrias especificaes e frameworks de mapeamento objeto-relacional que implementam as tcnicas de ORM, por isso se faz necessrio decidir qual implementao utilizar ao desenvolver um software. O presente trabalho tem como objetivo analisar e comparar algumas das solues existentes para a plataforma Java. Foram escolhidas as especificaes: Java Data Objects (JDO) e Java Persistence API (JPA), e os frameworks Data Nucleus e Hibernate. As comparaes foram feitas com base nas informaes coletadas durante a confeco do referencial terico e segundo critrios gerais para anlise de frameworks e especficos de mapeamento objeto-relacional existentes na literatura sobre o assunto. Ao final uma combinao de especificao e framework foi escolhida para ser utilizada no framework Iguassu, desenvolvido pela empresa Mitah Technologies em parceria com a Universidade Federal de Lavras. Palavras-chave: Frameworks de persistncia, Mapeamento Objeto Relacional, Anlise Comparativa, ORM, JDO, JPA, Hibernate, Data Nucleus

LISTA DE ILUSTRAES FIGURA 1 TIPOS DE RELACIONAMENTO ENTRE CLASSES NO UML .......... 16 FIGURA 2 IMPEDNCIA OBJETO RELACIONAL .............................................. 19 FIGURA 3 ARQUITETURA ORM GENRICA ..................................................... 21 FIGURA 4 ARQUITETURA DO BLUEBOX.......................................................... 25 FIGURA 5 ARQUITETURA DO DATA NUCLEUS .............................................. 30 FIGURA 6 ARQUITETURA DO HIBERNATE ...................................................... 32 FIGURA 7 DIAGRAMA DE CLASSES DA ENTIDADE PRODUTO .................... 41 FIGURA 8 DECLARAO DE CLASSE PARA GERAO DE ENTIDADES JDO E DATA NUCLEUS ........................................... 42 FIGURA 9 DECLARAO DE CLASSE PARA GERAO DE ENTIDADES JPA E HIBERNATE ................................................... 43 FIGURA 10 TRECHO DE DECLARAO DO ID NO DATA NUCLEUS ............ 44 FIGURA 11 TRECHO DE DECLARAO DO ID NO HIBERNATE ................... 44 FIGURA 12 ATRIBUTOS PRIMITIVOS DO DATANUCLEUS ............................ 45 FIGURA 13 ATRIBUTOS PRIMITIVOS NO HIBERNATE ................................... 46 FIGURA 14 ASSOCIAES NO DATANUCLEUS............................................... 47 FIGURA 15 ASSOCIAES NO HIBERNATE ..................................................... 49

LISTA DE TABELAS

TABELA 1 MTODOS DO PERSISTENCEMANAGER ....................................... 27 TABELA 2 MTODOS DO ENTITYMANAGER .................................................. 29 TABELA 3 CRITRIOS PARA ANLISE ............................................................. 37 TABELA 4 CONFIGURAO DA MQUINA UTILIZADA NOS TESTES ........ 38 TABELA 5 OPERAES CONSIDERADAS PARA MEDIDA DE DESEMPENHO ................................................................................ 40 TABELA 6 COMPARAO DE ACORDO COM OS CRITRIOS GERAIS DE ANLISE .................................................................................... 52 TABELA 7 COMPARAO DE ACORDO COM OS CRITRIOS ESPECFICOS ORM ......................................................................... 54 TABELA 8 RESULTADOS DAS MEDIDAS DE DESEMPENHO ......................... 55 TABELA 9 TEMPO DE EXECUO DE OPERAES DE PERSISTNCIA ...... 56 TABELA 10 RESULTADOS DA ANLISE COMPARATIVA .............................. 58

LISTA DE ABREVIATURAS

API Application Programming Interface HQL Hibernate Query Language JDO Java Data Objects JDOQL Java Data Objects Query Language JPA - Java Persistence API JPQL Java Persistence Query Language ORM Object Relational Mapping (Mapeamento Objeto Relacional) SOA Service-Oriented Architecture SQL Structured Query Language TI Tecnologia da Informao UML - Unified Modeling Language XMI XML Metadata Interchange XML eXtensible Markup Language

SUMRIO 1. 1.1. 1.2. 2. 2.1. 2.1.1. 2.2. 2.3. 2.4. 2.4.1. 2.4.2. 2.5. 2.5.1. 2.5.2. 3. 3.1. 3.1.1. 3.1.2. 3.2. 3.2.1. 3.2.2. 4. 4.1. 4.1.1. 4.2. 4.2.1. 4.2.2. 5. 5.1. 5.2. 5.3. 5.4. 6. 7. INTRODUO............................................................................................ 10 OBJETIVOS ................................................................................................ 11 ESTRUTURA DO TRABALHO .................................................................. 12 REFERENCIAL TERICO ......................................................................... 13 ORIENTAO A OBJETOS ....................................................................... 13 DIAGRAMAS DE CLASSES ...................................................................... 15 BANCO DE DADOS ................................................................................... 16 IMPEDNCIA OBJETO-RELACIONAL .................................................... 18 MAPEAMENTO OBJETO RELACIONAL ................................................. 19 SOBRE OS OBJETOS NO CONTEXTO DE PERSISTNCIA .................... 21 MAPEAMENTO DE CLASSES .................................................................. 22 OUTRAS TECNOLOGIAS UTILIZADAS .................................................. 23 A PLATAFORMA JAVA ............................................................................ 23 BLUEBOX ................................................................................................... 24 ESPECIFICAES E FRAMEWORKS ...................................................... 26 ESPECIFICAES DE PERSISTNCIA .................................................... 26 JAVA DATA OBJECTS (JDO) .................................................................... 26 JAVA PERSISTENCE API (JPA) ................................................................ 28 FRAMEWORKS DE PERSISTNCIA ........................................................ 29 DATA NUCLEUS........................................................................................ 29 HIBERNATE ............................................................................................... 31 METODOLOGIA......................................................................................... 34 CRITRIOS PARA COMPARAO .......................................................... 34 ANLISE DOS FRAMEWORKS ................................................................ 35 SOBRE OS TESTES DE DESEMPENHO ................................................... 38 DIAGRAMA DE CLASSES ........................................................................ 40 GERAO DE ENTIDADES COM O BLUEBOX...................................... 42 RESULTADOS ............................................................................................ 50 CRITRIOS GERAIS .................................................................................. 50 CRITRIOS DE MAPEAMENTO OBJETO-RELACIONAL ...................... 52 DESEMPENHO DOS FRAMEWORKS....................................................... 55 RESULTADOS DA COMPARAO.......................................................... 56 CONCLUSES ............................................................................................ 59 REFERNCIAS BIBLIOGRFICAS........................................................... 61

10 1. INTRODUO

A indstria de software uma rea que se encontra em crescimento acelerado, devido principalmente s demandas crescentes do mercado por solues inovadoras. A informao algo de extremo valor para a corporao moderna, os bancos, por exemplo, armazenam os dados financeiros de milhes de pessoas e empresas. A manuteno e o gerenciamento das informaes contidas em seus bancos de dados so um dos pilares da rea de Sistemas de Informao. As corporaes armazenam grandes volumes de informaes em Bancos de Dados Relacionais, e estes, surgidos por volta da dcada de 70, so baseados em fundamentos matemticos que garantem uma tima estruturao e confiabilidade aos dados armazenados. Em contrapartida, na dcada de 90, a indstria de software viu crescer o paradigma de orientao a objetos, que permitia uma maior abstrao aos desenvolvedores de software, e por conta disso diminua o tempo necessrio para a construo de sistemas, que por sua vez eram mais robustos e rentveis. At o final da dcada de 90, a maioria absoluta de empresas dentro da indstria de software j utilizava do paradigma de orientao a objetos, porm estas empresas desenvolviam software para corporaes que, como dito anteriormente, utilizava-se de bancos de dados relacionais para armazenar os dados. O Modelo Orientado a Objetos (OO) muito diferente do Modelo Entidade/Relacionamento (ER) utilizado pelos bancos de dados relacionais. Enquanto o primeiro baseado em tcnicas de Engenharia de Software, o outro fundamentado em princpios matemticos de relacionamentos entre tabelas. A esta diferena entre os modelos se d o nome de Impedncia Objeto-Relacional (AMBLER, 2003a)

11 Por causa das diferenas entre os modelos, os desenvolvedores tinham um trabalho maior na hora de extrair dados do modelo ER para o modelo OO, e na hora de armazenar os objetos nas tabelas do modelo ER, sendo necessrias vrias linhas de cdigo a mais para tal procedimento, que muitas vezes seriam replicadas em todo o sistema. Essas linhas de cdigo a mais diminuem consideravelmente a manutenibilidade e capacidade de extenso dos sistemas de software (BAUER; KING, 2007). Para resolver o problema da impedncia, surgiram tcnicas de mapeamento objeto-relacional (Object Relational Mapping ou ORM) que permitem a traduo dos dados de um modelo para o outro de maneira transparente para o desenvolvedor. Na plataforma de desenvolvimento Java, o mapeamento objetorelacional foi padronizado por meio de especificaes de persistncia, que estabelecem maneiras de realizar o mapeamento em Java. As especificaes fornecem as diretrizes para realizar os mapeamentos e estas so disponibilizadas na prpria API da especificao ou implementadas em frameworks de persistncia. Com o crescente aumento na utilizao de tcnicas de mapeamento objeto-relacional, surgiram vrias especificaes e frameworks para a plataforma Java, por isso determinar qual delas utilizar uma deciso crucial para empresas de Tecnologia da Informao.

1.1. Objetivos Este trabalho analisa e compara as solues para mapeamento objetorealacional disponibilizadas atravs dos frameworks DataNucleus com Java Data Object e Hibernate com Java Persistence API. As comparaes foram feitas tendo por base os dados coletados na confeco do referencial terico e seguindo

12 os critrios que so definidos no captulo de Metodologia. Aps a realizao das comparaes escolhida uma especificao/framework para ser utilizado no framework Iguassu.

1.2. Estrutura do Trabalho A organizao do texto como se segue: No Captulo 2 h uma reviso dos conceitos fundamentais de Orientao a Objetos, Banco de Dados, das tecnologias utilizadas e de Mapeamento ObjetoRelacional. No Captulo 3 so apresentadas as especificaes padro para persistncia e os frameworks de persistncia Data Nucleus e Hibernate. O Captulo 4 discorre a respeito da metodologia. O Captulo 5 apresenta os resultados obtidos. No Captulo 6 encontra-se a concluso.

13 2. REFERENCIAL TERICO

As especificaes e frameworks de persistncia so tecnologias desenvolvidas com base nos conceitos do mapeamento objeto-relacionamento, que por sua vez um conceito derivado de orientao a objetos e do modelo de entidade-relacional. Neste captulo sero abordados os conceitos bsicos de Orientao a Objetos, Banco de Dados Relacionais, Mapeamento Objeto-Relacional e das principais tecnologias utilizadas pelas especificaes e frameworks de persistncia que sero apresentados nos prximos captulos. 2.1. Orientao a Objetos

A orientao a objetos um paradigma de desenvolvimento de sistemas que abstrai a realidade a ser automatizada em termos de objetos que incorporam tanto informaes como procedimentos. (PINHEIRO, 2005). Segue alguns dos conceitos de orientao a objetos, retirados de Pothu (2008): Classe: tipo de organizao de dados que define conjuntos de objetos com as mesmas caractersticas e comportamentos. Objeto: a instncia de uma classe. Um objeto capaz de armazenar estados atravs de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Atributos: estrutura de dados que compem uma classe. Os valores dos atributos so as caractersticas de um determinado objeto. Mtodos: so as habilidades dos objetos. Em uma classe, um mtodo apenas uma definio, a execuo de um mtodo s ocorre quando ele invocado a partir de um objeto.

14 Mensagem: uma chamada a um objeto para invocar um de seus mtodos, ativando um comportamento descrito por sua classe. Tambm pode ser direcionada diretamente a uma classe (atravs de uma invocao a um mtodo esttico). Herana (ou generalizao): mecanismo pelo qual uma classe (subclasse) pode estender outra classe (super-classe), aproveitando seus comportamentos (mtodos) e variveis possveis (atributos). Associao o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associao simples "usa um" ou de um acoplamento "parte de". Encapsulamento consiste na separao de aspectos internos e externos de um objeto. Este mecanismo utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os mtodos que alteram estes estados. Abstrao a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando caractersticas menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe uma abstrao de entidades existentes no domnio do sistema de software. Polimorfismo: mecanismo que permite que referncias de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam.. Interface um contrato entre a classe e o mundo externo. Quando uma classe implementa uma interface, ela est comprometida a fornecer o comportamento publicado pela interface. Pacotes so referncias para organizao lgica de classes e interfaces.

15 2.1.1. Diagramas de Classes

Um diagrama de classes uma representao grfica de um modelo orientado a objetos que exibe classes (com atributos e mtodos) e os relacionamentos elas. Basicamente as classes podem se relacionar atravs de: associao (agregao, composio), dependncia ou herana. Macoratti (2009) define os seguintes conceitos sobre os relacionamentos: Associao: So relacionamentos que especificam que objetos de uma classe esto ligados a objetos de outras classes. Dependncia: So relacionamentos de utilizao no qual uma mudana na especificao de um elemento pode alterar a especificao do elemento dependente. A dependncia entre classes indica que os objetos de uma classe usam servios dos objetos de outra classe. Herana: Relacionamento entre um elemento mais geral e um mais especfico. Onde o elemento mais especfico herda as propriedades e mtodos do elemento mais geral. A relao de generalizao tambm conhecida como herana no modelo a objetos. Como a relao de dependncia, ela existe s entre as classes. Um objeto particular no um caso geral de um outro objeto, s conceitos (classes no modelo a objetos) so generalizao de outros conceitos. Agregao Regular: tipo de associao ( parte de , todo/parte) onde o objeto parte um atributo do todo ; onde os objetos partes somente so criados se o todo ao qual esto agregados seja criado. Pedidos composto por itens de pedidos.

16 Composio: Relacionamento entre um elemento (o todo) e outros elementos (as partes) onde as parte s podem pertencer ao perte todo e so criadas e destrudas com ele.

A figura 1 mostra como so representadas as associaes em diagramas UML.

Figura 1 Tipos de relacionamento entre classes no UML Fonte: MACORATTI, 2009

2.2. Banco de Dados

Um banco de dados um conjunto de informaes organizadas de maneira que permita facilidade de acesso e gerenciamento dos dados (POTHU, 2008). Os bancos de dados possuem um Sistema de Gerenciamento de Banco de Dados (SGBD) que tem como principal funo retirar do aplicativo cliente a do

17 responsabilidade pelo controle de acesso, manipulao e organizao de dados. Os fornecedores disponibilizam, atravs do SGBD, as interfaces necessrias para que os clientes possam acessar a base de dados. No caso dos bancos de dados relacionais a interface so as APIs ou drivers. Ento o SGBD formado do seguinte conjunto de funcionalidades: (POTHU, 2008) Uma linguagem para modelar o esquema das bases de dados. Estruturas de dados otimizadas para poder lidar com grandes volumes de dados armazenados. Uma linguagem que permita consultas e manipulao dos dados por parte do usurio (no caso SQL). Um mecanismo de transaes que garanta as propriedades ACID dos bancos de dados (atomicidade, consistncia, integridade e durabilidade).

O modelo de dados para se projetar os bancos de dados o Modelo Entidade/Relacionamento (ER). De acordo com Silberschatz et al (2010), o modelo entidade/relacionamento uma forma de representao do mundo real por meio de entidades e relacionamentos entre elas, propondo uma visualizao da realidade por meio de trs pontos de vista: Entidade, Atributo e Relacionamento. As entidades, segundo Pinheiro (2005), so descritas por meio de atributos. Desta forma, as instncias de uma entidade so identificadas por seus atributos e valores. Ainda de acordo com Pinheiro (2005), os relacionamentos podem ser definidos como um fato ou acontecimento que liga duas entidades existentes no mundo real. Os relacionamentos possuem como caractersticas obrigatoriedade (se obrigatrio ou no) e cardinalidade (um para um, um para muitos e muitos para muitos).

18 Para implementao do modelo ER no modelo Relacional que utilizado nos banco de dados, representamos as entidades como tabelas, e os atributos da entidade so as colunas da tabela. As instncias so os registros presentes na tabela da entidade, cada linha um registro e deve ser identificada de forma nica atravs de chave primria ou composta. Os relacionamentos podem ser mapeados com o uso de chaves estrangeiras, que referenciam um registro presente em outra tabela da base de dados.

Os bancos de dados devem possuir dados confiveis, por isso as operaes realizadas neles esto em contextos transacionais. Uma transao uma coleo de operaes que so realizadas sobre um conjunto de objetos (PINHEIRO, 2005), a utilizao de transaes permite que se garanta a consistncia dos dados aps a realizar operaes de insero, atualizao e remoo, de maneira que, se alguma operao dentre as operaes definidas para ser executado num escopo transacional falhar, todas as operaes realizadas at o momento sero desfeitas (rollback). Uma transao s confirmada (commit) se todas as operaes dentro de seu escopo forem executadas com sucesso.

2.3. Impedncia Objeto-Relacional Segundo Ambler (2003a), a impedncia objeto-relacional existe devido ao fato de que o modelo ER bem denido matematicamente com dados normalizados em tabelas enquanto o modelo OO denido com classes, herana e polimorsmo. A Figura 2 mostra a disparidade entre os dois modelos.

19

Figura 2 Impedncia Objeto Relacional Fonte: Barcia et al, 2008

Para se obter xito ao usar objetos e bancos relacionais, necessrio conhecer profundamente ambos os paradigmas, e suas diferenas para tomar decises baseadas nesses conhecimentos (BAUER; KING, 2007).

2.4. Mapeamento Objeto Relacional O mapeamento objeto-relacional (ORM) a base terica sobre a qual objeto relacional podemos mapear objetos em tabelas de bancos de dados relacionais, visando reduzir a impedncia existente entre os dois paradigmas durante o desenvolvimento de software. Quando se mapeia os dados do modelo orientado a objetos para o modelo relacional cria se o efeito de que o banco de dados seja cria-se orientado a objetos, de modo que o programador no precisa se preocupar com a disposio dos dados nas tabelas e se focar na manipulao de objetos e nos problemas de negcio (BAUER; KING; 2007). 2007) Desta forma, uma implementao ORM atua na transformao (reversvel) de dados de uma representao para outra de forma transparente

20 para o usurio, fornecendo uma camada de ligao que deve atender s seguintes proposies (BAUER; KING; 2007): Permitir operaes CRUD (create, retrieve, update, delete) bsicas em objetos de classes persistentes. Uma linguagem para especicar consultas (query language) que se referem s classes ou s propriedades das classes. Formas de especicao de mapeamento de classes (metadados) Checagem de sujeira (ou dirty checking) para determinar se um objeto foi modificado. Associao de recuperao preguiosa (lazy association fetching) como forma de otimizao para as consultas realizadas.

Um framework ORM deve ento, encapsular a interao entre o aplicativo e o banco de dados relacional, deixando o desenvolvedor livre para se concentrar nos problemas de negcio em questo (POTHU, 2008). A Figura 3 mostra uma arquitetura genrica para um framework de ORM, possvel enxergar a ligao estabelecida pelo framework entre a Aplicao e o Banco de Dados. Desta forma o framework de mapeamento objeto relacional atua na traduo dos objetos persistentes da aplicao para a linguagem do Banco de Dados.

21

Figura 3 Arquitetura ORM genrica

2.4.1. Sobre os Objetos no Contexto de Persistncia

Segundo Bauer e King (2007), o ato persistir objetos consiste em (2007) permitir que eles sobrevivam ao processo que os criou, armazenando armazenando-os no banco de dados (meio fsico) para que depois possam ser restaurados no estado em que estavam para uso em algum ponto no futuro. necessrio o estabelecimento de um ciclo de vida para os objetos de estabelecimento uma aplicao tendo em vista o contexto de persistncia em que estaro inseridos. Basicamente os objetos podero estar nos seguintes estados: Transiente: objeto ainda no presente no banco de dados Persistente: Persistente objeto que esteja no banco de dados e que possua algum tipo de correspondncia (chave) estabelecida entre os dois modelos.

22 2.4.2. Mapeamento de classes

Os principais tipos de mapeamentos de classes utilizados neste trabalho so: mapeamento de atributos primitivos, mapeamento de atributos complexos e mapeamento de herana. O mapeamento das classes nos frameworks ORM especificado atravs de metadados que em geral so escritos utilizando tecnologias como o XML ou Annotations. De acordo com Pinheiro (2005), em geral, a relao entre uma classe e uma tabela bem como propriedades e colunas feita de forma direta. No caso dos relacionamentos entre objetos podem ser representados no banco de dados por meio de chaves estrangeiras e restries de acordo com a cardinalidade dos relacionamentos. Para as hierarquias de classe, deve-se selecionar uma estratgia de acordo com o modelo orientado a objetos desejado. A representao de hierarquias de classes no suportada pelos bancos de dados relacionais, para se contornar este problema se torna necessrio mapear a hierarquia do modelo orientado a objetos para o modelo relacional. (PINHEIRO, 2005) Segundo Ambler (2003b) o mapeamento de herana no modelo relacional pode ser feito das seguintes maneiras: Tabela por hierarquia de classes (One Table Per Class Hierarchy): toda a hierarquia mapeada em uma nica tabela quem contm os atributos de todas as classes. A sub-classe em questo pode ser diferenciada por meio de uma coluna extra que a identifique. Tabela por classe (Table Per Class): cada classe possuir uma tabela prpria apenas seus atributos especficos, os atributos herdados so obtidos atravs de uma chave estrangeira para a tabela de sua superclasse.

23 Tabela por classe concreta (Table Per Concrete Class): cada classe concreta possuir uma tabela correspondente contendo todos os atributos prprios e herdados.

Com relao ao mapeamento de relacionamentos entre os objetos, de acordo com Pinheiro (2005), uma associao deve possuir as seguintes informaes: Relacionamento do Objeto Classe Origem Classe Destino Cardinalidade (1-1, 1-n, n-n) Regra de Leitura, Gravao e Incluso (varia de acordo com o tipo do relacionamento: agregao, composio, associao) Tabela que implementa o relacionamento no ambiente de banco de dados Coluna que implementa o relacionamento no ambiente de banco de dados Atributo da classe origem que implementa o relacionamento

2.5. Outras tecnologias utilizadas Nesta seo so explicadas as tecnologias Java e BlueBox.

2.5.1. A Plataforma Java

Dentre os vrios recursos oferecidos pela plataforma Java, podemos destacar alguns recursos fundamentais para a persistncia de dados e que sero

24 utilizados neste trabalho: as annotations e a interface para conexo a banco de dados, o Java Database Connectivity (JDBC). As annotations so uma maneira alternativa de se especificar metadados em Java e so representadas pelo smbolo @. O annotation uma informao que pode ser adicionada declarao de mtodos, atributos, que so interpretadas em tempo de execuo por bibliotecas e frameworks para os quais foram projetadas, no alterando diretamente a semntica da linguagem. O JDBC uma interface para programao de aplicativos (API) disponibilizada pela plataforma Java que possibilita a utilizao de bancos de dados relacionais nos softwares. Segundo a documentao do JDBC, a API oferece trs servios principais: estabelecimento de conexo com banco de dados, envio de sentenas na linguagem SQL, processamento de resultados e retorno de dados.

2.5.2. BlueBox

Segundo Castro (2010), o BlueBox uma ferramenta para gerao automtica de cdigo que utiliza um arquivo XMI como entrada de dados para obter informaes de um modelo UML. O cdigo gerado por intermdio da engine Velocity que processa os dados conforme as regras contidas nos templates Velocity, que informam como devem ser tratadas as informaes do Diagrama de Classes UML. A Figura 4 mostra a arquitetura do BlueBox.

25

Figura 4 Arquitetura do BlueBox Fonte CASTRO, 2010

26 3. ESPECIFICAES E FRAMEWORKS

Nas prximas sees sero apresentados as especificaes e frameworks de persistncia comparados neste trabalho.

3.1. Especificaes de Persistncia

As especicaes de persistncia so as diretivas aprovadas pela Java Community Process (JCP) e so utilizadas pelos frameworks para implementar ORM em Java. A literatura base para as especicaes podem ser encontradas nos respectivos sites de seus mantenedores: Apache no caso do JDO e Sun no caso do JPA. Nas sees seguintes sero apresentadas as duas especificaes padro em Java.

3.1.1. Java Data Objects (JDO)

Java Data Objects (JDO) uma especicao de persistncia que surgiu por volta do ano de 2002 na sua verso 1.0, tendo sido aprovada pela Java Community Proccess (JCP) no incio de 2005 j em sua verso 2.0 (sua verso mais atual a 2.1). A especicao dene uma interface para persistir objetos Java (tambm Plain Old Java Objects ou POJOs) em banco de dados, sendo esta indiferente quanto ao tipo do banco de dados utilizado (relacional, orientado a objetos ou mesmo arquivos XML, entre outros). As relaes entre as classes e as tabelas do modelo relacional so estabelecidas utilizando-se de metadados, que podem ser especicados por meio de annotations do Java ou arquivos esquemticos no formato XML.

27 Os tipos de transaes permitidas com o banco de dados so: pessimistas, otimistas, isoladas e sem transaes. Para carregamento de dados o JDO fornece suporte a queries SQL nativas e queries usando JDOQL (query language orientada objetos padro do JDO). Ainda com relao otimizaes para carregamento de dados, o JDO oferece a funcionalidade de FetchGroups. Os fetchGroups so utilizados de forma a determinar quais propriedades de uma entidade sero carregadas quando feita uma consulta ao banco de dados de forma a melhorar o desempenho ao retirar propriedades complexas que em geral necessitam de junes entre tabelas diferentes. O controle da persistncia dos objetos feito utilizando a

PersistenceManagerFactory e a PersistenceManager, ambas so encontradas no pacote javax.jdo. A PersistenceManagerFactory permite acesso a outras PersistenceManager e aos bancos de dados, sendo em geral atribuda uma instncia diferente dela para cada banco de dados. O PersistenceManager fornece mtodos para gerenciar a persistncia de objetos, alterando o ciclo de vida deles. Os mtodos so detalhados na Tabela 1.

Operao

Mtodo PersistenceManager

do

Persistir objeto Atualizar objeto Remover objeto Obter objeto

makePersistent() makePersistent() deletePersistent() getObjectById(), getExtent()

Tabela 1 Mtodos do PersistenceManager

28 3.1.2. Java Persistence API (JPA)

O Java Persistence API (JPA) uma especicao de persistncia padro aprovada pela JCP em meados de 2006 como parte da especicao EJB3 (Enterprise Java Beans 3). O JPA, diferentemente da especicao JDO, oferece suporte apenas a banco de dados relacionais; porm tambm utiliza de interfaces padro, permitindo aos desenvolvedores a trocar de implementaes de persistncia sem precisar fazer grandes alteraes no cdigo. Para o mapeamento das entidades, o JPA utiliza-se de metadados ou annotations. Com relao a transaes, o JPA permite apenas o uso de transaes otimistas ou ento sem nenhuma transao que o modo padro sobre o qual ele opera. Para carregamento dos dados, o JPA fornece suporte a queries SQL nativas, fornece JPQL e a consulta do tipo Criteria por meio de uma API. A JPQL uma linguagem de consulta orientada objetos com suporte a funes do ANSI SQL. A API de Criteria totalmente orientada a objetos, e permite criao de objetos exemplo, insero de expresses e utilizao de funes do SQL sem a necessidade de criao de uma query especfica por parte do usurio. Os objetos que controlam o funcionamento do JPA, presentes no pacote javax.persistence, so a EntityManagerFactory e a EntityManager. Da mesma forma que a PersistenceManagerFactory do JDO, a EntityManagerFactory permite acesso EntityManager e aos bancos de dados, sendo em geral atribuda uma instncia diferente dela para cada banco de dados. O EntityManager assim como os PersistenceManager do JDO fornece mtodos para controlar a persistncia dos objetos, alterando o ciclo de vida destes. A Tabela 2 mostra os principais mtodos do EntityManager.

29

Operao Persistir objeto Atualizar objeto Remover objeto Obter objeto

Mtodo do EntityManager persist(), merge() update(), merge() remove() find()Tabela 2 Mtodos do EntityManager

3.2. Frameworks de Persistncia Nas prximas sees sero abordados os frameworks estudados neste trabalho, o Data Nucleus e o Hibernate.

3.2.1. Data Nucleus O DataNucleus um framework de persistncia objeto-relacional que anteriormente era conhecido como JPOX, desenvolvido pela comunidade de software livre e disponibilizado sem custos para ser utilizado no

desenvolvimento de aplicaes. um dos frameworks ORM mais flexveis dentre os disponveis no mercado devido ao suporte s especificaes de persistncia JDO e JPA, bancos de dados e linguagens de consulta diferentes como pode ser visto na Fgura 5. (DATANUCLEUS, 2008) Com relao s especicaes o DataNucleus fornece suporte ao JDO e JPA (j abordadas neste trabalho). Sendo que suporta as verses 1.0, 2.0, 2.1 e 2.2 do JDO, a verso 1.0 do JPA alm de algumas funcionalidades que estaro presentes na verso 2.0 da especicao (DATANUCLEUS, 2009). O DataNucleus tambm conhecido como a implementao de referncia para o JDO.

30 O DataNucleus fornece suporte a variados tipos de banco de dados, dentre eles: Bancos Relacionais (RDBMS): Oracle, MySQL, Postgres, entre outros Banco Orientado a objeto (OODBMS): db4o Outros: Google Big Table, HBase, Arquivos XML, Excel, planilhas OpenDocument

Figura 5 Arquitetura do Data Nucleus Fonte: DATANUCLEUS, 2008

Alm do suporte ao JDO e JPA, e a vrios tipos de bancos de dados, o DataNucleus fornece mecanismo de bytecode-enhancing para ps-compilao das classes persistveis de modo a fornecer o mecanismo de persistncia transparente. Na Figura 5, que mostra a arquitetura do DataNucleus (antigo JPOX), podemos identificar os seguintes mdulos do framework:

31 Engine de persistncia: a engine de persistncia utilizada pode ser baseada nos padres JDO ou JPA Suporte a tipos: tipos do Java5, Dados Espaciais, etc Gerenciamento de Cache: Plugins como EhCache, OSCache, SwarmCache Manipulao de banco de dados utilizando JDOQL, SQL e JPQL

3.2.2. Hibernate

O framework de persistncia objeto-relacional Hibernate, assim como o Data Nucleus tambm desenvolvido pela comunidade de software livre para as plataformas Java e .NET, sendo disponibilizado gratuitamente para seus utilizadores sob a licena LGPL (Lesser GPL). Diferentemente do Data Nucleus, o Hibernate implementa apenas a especicao JPA e permite conexo apenas com bancos de dados relacionais (RDBMS). O Hibernate fornece a opo de bytecode-enhancing para pscompilao das classes persistveis atravs da ferramenta CGLib, mas isto no obrigatrio como no JDO/DataNucleus. Por padro o Hibernate utiliza do mecanismo de Reflection da plataforma Java para estender as classes do usurio injetando os mtodos necessrios aos objetos persistentes, mas tudo isto feito de forma transparente. O principal mdulo do Hibernate o Hibernate Core, e todos os outros mdulos o utilizam como base para suas implementaes. Este mdulo pode ser utilizado por si s, de forma independente de outros frameworks sob qualquer servidor de aplicaes JavaEE/J2EE, sendo necessrio apenas congurar sua fonte de dados.

32

Figura 6 Arquitetura do Hibernate Fonte: GAVIN ET AL, 2009

A Figura 6 mostra a arquitetura do Hibernate, nela podemos ver as seguintes divises de funes: SessionFactory: SessionFactory: a fabrica de sesses do Hibernate, instanciada apenas uma fbrica para cada banco de dados utilizado, mas possvel instanciar outras SessionFactory para utilizao de bancos de dados diferentes em uma me mesma aplicao. Session: Session: responsvel pela comunicao com o banco de dados, fornece as operaes CRUD, e APIs e linguagens de consulta como a Criteria, JPQL, HQL.

33 Transaction: a interface opcional para controle das transaes no Hibernate. opcional porque a aplicao pode utilizar o framework sem transaes. JNDI, JDBC e JTA: APIs para acesso a banco de dados

34 4. METODOLOGIA

A pesquisa realizada caracteriza-se por ser de natureza aplicada ou tecnolgica, pois ela parte do estudo de teoria de Orientao a Objetos, Banco de Dados e Mapeamento Objeto Relacional para fornecer uma anlise de frameworks que so fundamentados sobre estes conceitos. Com relao aos objetivos este trabalho pode ser definido como uma pesquisa descritiva, pois se baseia na observao, registro e anlise dos dados coletados por meio de levantamento bibliogrfico e testes realizados em um software. No que diz respeito aos procedimentos a pesquisa pode ser caracterizada como um estudo de caso, porque foram escolhidas as solues de ORM a ser utilizadas num software para realizao de testes. Pelo fato de que a utilizao dos frameworks ter sido feita num software, trata-se de uma pesquisa realizada em laboratrio. A prxima seo explica os critrios utilizados, como foi feita a implementao e a maneira como os testes foram conduzidos.

4.1. Critrios para comparao

Para poder comparar os frameworks de persistncia analisados nestre trabalho precisamos definir quais critrios so utilizados. A definio dos critrios foi feita tendo por base uma pesquisa bibliogrfica sobre o tema, tendo como principais referncias os trabalhos de Bauer e King (2007) e Pothu (2008).

35 4.1.1. Anlise dos Frameworks

Segundo Pothu (2008) podemos dividir os critrios em duas sees: critrios gerais para anlise de frameworks e critrios especficos de ORM. Dentre os critrios gerais foram selecionados os seguintes: 1. Desempenho 2. Existncia de boa documentao, fruns e suporte. 3. Maturidade e longevidade do projeto

Dentre os critrios especficos para mapeamento objeto-relacional que foram estabelecidos por Pothu (2008) foram selecionados os seguintes: 1. Mapeamento de classes: Suporte a tipos, Herana, Relacionamentos. 2. Bancos de Dados suportados. 3. Gerao de esquema no banco de dados.

No trabalho de Bauer e King (2007) so definidas algumas questes a que os frameworks devem atender, questes que por sua vez so claramente relacionadas aos critrios especficos de mapeamento objeto-relacional estabelecidos por Pothu (2008). Foram selecionadas as seguintes questes: 1. Como so as classes persistentes? 2. Como o metadado definido? 3. Como so relacionadas igualdade e identidade do objeto com identidades do banco de dados (chave primria)? 4. Como o tratamento dos estados dos objetos no contexto de persistncia? 5. Quais as facilidades para consultas? 6. Como recuperamos eficientemente dados com associaes? 7. Como so tratadas as transaes, concorrncias?

36 8. H gerenciamento de cache? A Tabela 3 fornece a descrio para cada um dos critrios utilizados neste trabalho.

Critrios Gerais Nome Documentao para discusso e Descrio fruns Pesquisa feita nos sites dos projetos

Maturidade e longevidade Pesquisa feita na internet, em do projeto site de anlise de projetos de software livre Desempenho Critrios ORM Nome Forma persistentes das Descrio classes Anlise da a Transparncia do framework e formas de (Descrito na Seo 4.2)

gerao/utilizao das classes Definio de metadados Quais so as abordagens

utilizadas para definio de metadados Identificao de objetos nas Verificao tabelas de banco de dados mapeadas as de como instncias so de

determinadas classes para linhas particulares de tabelas Mapeamento de classes Avaliao das estratgias para mapeamento de tipos,

hierarquias, associaes

37 Estados dos objetos no Avaliao da forma como os frameworks lidam com objetos persistentes/transientes Facilidades para consultas Anlise das linguagens e APIs de consulta fornecidas pelos frameworks Recuperao eficiente para Verificao de estratgias para dados com associaes recuperao eficiente de dados de opes

contexto de persistncia

Controle de transaes e Verificao concorrncia

disponveis para tratamento de transaes e concorrncia

Gerenciamento de cache

Verificao

de

opo

de

gerncia de cache Bancos de dados suportados Verificao de quais bancos de dados cada framework suporta Gerao de esquema de Verificao se o framework banco de dados a partir das oferece gerao de esquemas de entidades banco de dadosTabela 3 Critrios para anlise

A partir das respostas aos critrios listados na Tabela 3 possvel contrapor as solues propostas pelos frameworks a fim de se determinar qual deles a melhor opo para ser utilizado. As respostas para os critrios estabelecidos se encontram no Captulo 5.

38 4.2. Sobre os Testes de desempenho

Os testes de desempenho foram realizados no Laboratrio de Pesquisa 1 do Departamento de Cincia da Computao da Universidade Federal de Lavras. O computador utilizado para execuo os testes possui a configurao exibida na Tabela 4.

Processador Memria RAM Sistema Operacional IDE Java Verso Java Banco de Dados (SGBD)

Intel Core 2 2.4Ghz 2GB DDR2 Windows XP Professional Eclipse GanyMede JDK 1.6 PostgreSQL 8.3

Tabela 4 Configurao da mquina utilizada nos testes

A medida coletada foi o tempo gasto para execuo das seguintes operaes: Gerao do esquema do banco de dados. Tempo de inicializao do sistema. Tempo para execuo de um teste de entidade.

As operaes foram realizadas na plataforma Trace-On Honey, tambm conhecido como Laborapix (RIBEIRO JR. et al; 2007; 2008; 2009; 2010), desenvolvido pela Mitah Technologies em parceria com a UFLA. O sistema possui cerca de 250 entidades que possuem relacionamentos de vrias cardinalidades e tipos, alm de possuir heranas, com uso de classes abstratas e interfaces.

39 O teste de entidade um teste padronizado no sistema

Laborapix/Iguassu, e tem como objetivo principal validar as entidades do sistema que so persistentes. Este teste foi escolhido por contemplar as operaes CRUD necessrias para avaliao dos frameworks. As operaes bsicas de persistncia (CRUD) implementadas no sistema Laborapix/Iguassu so definidas como se segue: Criao de Objetos ou Create: Persistncia de um objeto transiente. Recuperao de objetos de uma classe ou GetAll: Recupera todos os objetos de uma determinada classe. No caso do sistema escolhido para testes, existe uma regra para de carregamento que influencia na definio dos fetchgroups do JDO ou na determinao do campo com lazy ou eager loading no caso do GetAll sero carregados apenas atributos marcados com a tag isLookup. Recuperao de um objeto atravs de chave primria ou GetById: Recupera um objeto utilizando buscando por chave primria. Na regra do sistema, a consulta do GetById retorna todas as associaes de um objeto, sendo que associaes de composio devero estar completas e as de associao comum ou agregao devero possuir apenas os atributos primitivos. Atualizao de um objeto (Update): Atualizao de um objeto desligado. Remoo de Objetos (Delete): Remove um objeto do banco de dados.

Como se pode notar o modelo de testes contempla todas as operaes bsicas de persistncia (CRUD). Desta forma, podemos afirmar que o

40 framework de persistncia que mais rpido executa o teste de entidade o que possui o melhor desempenho. Na Tabela 5 so listadas as operaes consideradas para medir o desempenho dos frameworks.

Medidas de desempenho Operaes Gerao do esquema Descrio do Tempo gasto para gerar o esquema do banco de dados para todas as entidades do sistema Inicializao Tempo gasto para inicializar o sistema. Considerando

banco de dados

tambm o tempo gasto para fazer instrumentao do

cdigo fonte Desempenho Tempo total gasto para execuo de operaes relacionadas persistncia de uma entidade.Tabela 5 Operaes consideradas para medida de desempenho

4.2.1. Diagrama de classes

O diagrama de classes do sistema Laborapix muito extenso, por isso foi selecionada uma de suas entidades para que fossem realizados os testes. No caso, foi selecionada a entidade Produto, a Figura 7 mostra o diagrama de classes resumido da entidade.

41

Figura 7 Diagrama de classes da entidade Produto

42 4.2.2. Gerao de Entidades com o BlueBox

As entidades no sistema testado so modeladas como POJOs em diagramas UML. A gerao do cdigo fonte em Java para as entidades feita atravs da ferramenta BlueBox. Para que o BlueBox possa gerar o cdigo fonte necessria a criao de um template que especifique as regras para gerao do POJOs. O template das entidades do BlueBox, possuem as regras de persistncia nos trechos de declarao das classes e na declarao dos atributos das classes. Na parte de declarao da classe necessrio marcar a classe como persistente e selecionar uma estratgia para herana. J a parte de declarao dos atributos das classes pode ser separada em: declarao da chave primria (ID), declarao de atributos primitivos e declarao de atributos complexos. Exemplos para declarao de classes para o JDO Data Nucleus e para o JPA Hibernate nos templates do BlueBox so mostrados nas Figuras 8 e 9, respectivamente.

Figura 8 Declarao de classe para gerao de entidades JDO e Data Nucleus

43

Figura 9 Declarao de classe para gerao de entidades JPA e Hibernate

Com relao seleo da estratgia de herana, foi selecionada as implementaes dos frameworks para a estratgia de One Table Per Class explicada na seo 2.4.2, que segundo Ambler (2003b) a que suporta melhor a utilizao de polimorfismo, oferece melhor visualizao no modelo relacional e por necessitar de poucas modificaes nas tabelas se for necessrio alterar a hierarquia. No caso do JPA foi usada a annotation InheritanceType.JOINED e no caso do JDO foi utilizada a annotation NEW_TABLE que implementam One Table per Class. possvel ver a seleo da estratgia de herana nas Figuras 8 e 9. A declarao da chave primria nos dois casos parecida, preciso informar que o campo uma chave primria para a classe, alterando o atributo primaryKey da annotation @Persistent para true no caso do DataNucleus, e utilizando a annotation @Id para o Hibernate. Com relao estratgia para gerar a chave primria, no caso do DataNucleus foi para o Hibernate foi utilizada a utilizada a

idGeneratorStrategy.INCREMENT,

GenerationType.TABLE. Ambas as implementaes geram as chaves primrias incrementais. As Figuras 10 e 11 mostram a declarao da chave primria para o Data Nucleus e Hibernate, respectivamente.

44

Figura 10 Trecho de declarao do ID no Data Nucleus

Figura 11 Trecho de declarao do ID no Hibernate

Na parte de declarao dos atributos primitivos no necessrio fornecer anotaes para os campos no Hibernate, que ele j faz o mapeamento do campo para um atributo em uma tabela com o mesmo nome e representao semelhante no banco de dados. Com relao ao Data Nucleus necessrio utilizar a annotation @Collumn para especificar o nome que o atributo ter na tabela da entidade. preciso tambm tratar os campos transientes de uma classe, com o BlueBox isto feito verificando se $attribute.ownerScope no do tipo instance (se um atributo esttico), se isso acontecer o campo deve ser

45 marcado com @Transient no Hibernate e @NotPersistent no DataNucleus. As Figuras 12 e 13 mostram a declarao dos atributos primitivos.

Figura 12 Atributos primitivos do DataNucleus

46

Figura 13 Atributos primitivos no Hibernate

Com relao ao mapeamento de associaes, foi necessrio verificar as seguintes informaes: objeto do relacionamento, cardinalidade, tipo de associao. No DataNucleus as associaes foram mapeadas com as anotaes @Element e @Join, que utilizam de tabela auxiliar para implementar os relacionamentos. No Hibernate foi necessrio testar a multiplicidade do relacionamento para determinar qual anotao utilizar (no caso 1-1 @OneToOne, 1-n @OneToMany, n-1 @ManyToOne e n-n @ManyToMany). Ainda com relao s associaes, necessrio determinar o tipo do relacionamento para definir operaes que sero cascateadas. O BlueBox obtm informaes sobre os relacionamentos por meio de teste da propriedade aggregation existente no atributo. A propriedade aggregation poder ter os valores: none se for uma associao simples, aggregate se for uma agregao e

47 composite se for uma composio. De posse dessas informaes podemos definir as regras de cascateamento. No Data Nucleus, para mapear o tipo dos relacionamentos necessrio alterar os atributos deleteAction e depentent da anotao @Element. O atributo deleteAction controla a deleo de objetos associados de acordo com o tipo da associao, e o atributo dependent serve para determinar se as alteraes feitas aos objeto das associaes sero propagadas. Se for uma associao simples ou agregao, o atributo deleteAction ser setado com ForeignKeyAction.NONE que determina que os objetos associados no sero removidos caso o detentor do relacionamento o seja, j o atributo dependent ser setado com false, porque as alteraes em objetos associados no devero ser cascateadas. Se for uma composio, o atributo deleteAction ser setado com

ForeignKeyAction.CASCADE que determina que os objetos associados no sero removidos caso o detentor do relacionamento o seja, j o atributo dependent ser setado com true, porque as alteraes em objetos associados sempre so propagadas neste caso. O cdigo do template do BlueBox para gerar estas associaes se encontra na Figura 14.

Figura 14 Associaes no DataNucleus

48

Para definio das regras de mapeamento de acordo com o tipo da associao no Hibernate, precisamos alterar o tipo de cascateamento de operaes, e isto feito definindo os mtodos que sero executados em cascata com a anotao @Cascade. Para associaes de agregao e associao simples no necessrio definir cascateamento, pois o padro do Hibernate para no executar operaes em cascata. J no caso de composies foi definido cascateamento de operaes de criao (com CascadeType.SAVE_UPDATE), atualizao (com CascadeType.SAVE_UPDATE) e remoo (com

CascadeType.DELETE_ORPHAN). A Figura 15 exibe o trecho de cdigo do template do BlueBox para gerar as associaes das entidades com o mapeamento do JPA e Hibernate.

49

Figura 15 Associaes no Hibernate

50 5. RESULTADOS

A anlise comparativa dos frameworks de persistncia Data Nucleus com Java Data Objects (JDO) e Hibernate com Java Persistence API (JPA) foi feita com base nos critrios de comparao descritos na Tabela 3 do captulo anterior. Nas prximas sees so relatadas as comparaes dos frameworks de acordo com os Critrios Gerais e Critrios Especficos de Mapeamento ObjetoRelacional, por fim h uma listagem que permite determinar qual framework foi selecionado como o melhor com relao a cada um dos critrios.

5.1. Critrios Gerais A comparao dos critrios gerais, que foram definidos na Seo 4.1 est listada na Tabela 6.

51

Critrios Gerais Critrio Documentao e fruns para discusso Data Nucleus Possui boa documentao no site. Possui frum, porm pouco ativo. Hibernate Possui boa documentao no site do projeto. Possui frum bastante ativo. Maturidade e Segundo o site de anlise Segundo o site de anlise longevidade do projeto de software livre Ohloh de software livre Ohloh (www.ohloh.net) DataNucleus o (www.ohloh.net) o

encontra-se Hibernate um projeto um cdigo bem

em estado de decrscimo com de atividades

de estabelecido

(maduro), de de

desenvolvimento ano a ano. com Em grande contrapartida oportunidade para

aumento

uma atividades

de desenvolvimento a cada o ano, alm de possuir uma

crescimento

DataNucleus devido ao grande e ativa equipe de sua utilizao no DataStore desenvolvimento. Alm

da Google AppEngine, por disso, sua evoluo est ser compatvel com o acontecendo juntamente

formato Big Table.

com a especificao JPA e o Java, que mantida pela Sun Microsystems

52 Desempenho Comparao na seo 5.3 Comparao na seo 5.3

Tabela 6 Comparao de acordo com os critrios gerais de anlise

5.2. Critrios de mapeamento objeto-relacional A comparao segundo os critrios ORM definidos na Seo 4.1 est listada na Tabela 7.

Critrios ORM Critrio Forma classes persistentes Data Nucleus das Oferece Hibernate

funcionalidade Utiliza o mecanismo de de a Java para

de bytecode enhancing reflection para permitir persistncia adicionar transparente s classes.

persistncia Tambm com

transparente. oferece

integrao de que

ferramentas enhancing

bytecode tambm

permite a transparncia. Definio metadados de Metadados podem ser Metadados definidos via XML ou definidos annotations. Identificao Permite utilizao annotations de Permite utilizao de chaves podem via XML ser ou

de objetos nas chaves tabelas banco dados Mapeamento de classes

primrias primrias nicas/compostas e e vrias estratgias de

de nicas/compostas de vrias estratgias

de gerao de identidade.

gerao de identidade. Permite mapeamento de Permite mapeamento de

tipos primitivos de Java, tipos primitivos de Java,

53 hierarquia padro de ORM classes hierarquia de classes padro e ORM e associaes 1-1, 1-

associaes 1-1, 1-N, N- N, N-1, M-N, unidirecionais 1, M-N, unidirecionais e e bidirecionais. bidirecionais. Estados objetos contexto persistncia dos Fornece no comuns os de estados Estados comuns de objetos objetos persistentes/transientes. Possui checagem de sujeira

de persistentes/transientes. Possui checagem

de (dirty-checking) e o mtodo merge() que muito usado em ambientes de

sujeira (dirty-checking).

desenvolvimento orientado a servios (SOA) em que no se mantm uma

referncia objeto

fixa ao mesmo em memria,

precisando reinstanci-lo a cada nova requisio. Facilidades para consultas Permite execuo de Permite execuo de

consultas em SQL e consultas em SQL, JPQL JDOQL (padro JDO). (padro JPA), HQL (padro Hibernate). Alm de

oferecer a API Criteria. Recuperao eficiente dados associaes Permite uso de Oferece estratgias de

para subconsultas no JDOQL. SELECT, SUBSELECT e com No permite alterao de JOIN para as associaes estratgias em chamadas em consultas de get. a mtodos getByExtent() Tambm oferece

54 e getById(). subconsultas JPQL Controle transaes concorrncia de Possui controle de Possui controle de transao em HQL,

e transao com suporte a com suporte a concorrncia, concorrncia, controlados controlados com recursos de com locking e versionamento.

recursos de locking e versionamento. Gerenciamento Permite uso da cache Permite uso de cache nativa de cache nativa do DataNucleus e do Hibernate e de cache de cache disponibilizado disponibilizado por plugins por plugins (ex.: (ex.: EhCache).

EhCache). Bancos dados suportados de Suporta uma grande Apenas Bancos de Dados

variedade de bancos de Relacionais dados: orientado a relacional, objetos,

planilhas, entre outros. Gerao esquema banco de Oferece ferramentas para Oferece ferramentas para de gerao de esquema de gerao de banco de dados. de esquema de

banco de dados.

dados a partir das entidadesTabela 7 Comparao de acordo com os critrios especficos ORM

55 5.3. Desempenho dos frameworks

Os resultados para o teste de desempenho dos frameworks so listados na Tabela 8

Medidas de desempenho Operaes Gerao do Data Nucleus 25 segundos Hibernate 19 segundos

esquema do banco de dados Inicializao Execuo de operaes . (Tempo Total)Tabela 8 Resultados das medidas de desempenho

8,68 segundos 9,4 segundos

6,762segundos 6,754 segundos

A medida de execuo de operaes se refere ao tempo total gasto para execuo das operaes executadas no sistema Laborapix utilizando os dois frameworks comparados. O tempo de execuo para cada operao em separado listado na Tabela 9.

56

Tempo de execuo Operaes Create GetByID GetByExample GetAll Delete Update Data Nucleus 104 milisegundos 83.3 milisegundos 102 milisegundos 300 milisegundos 179 milisegundos 172 milisegundos Hibernate 177 milisegundos 75.5 milisegundos 15 milisegundos 125 milisegundos 266 milisegundos 16 milisegundos

Tabela 9 Tempo de execuo de operaes de persistncia

5.4. Resultados da comparao

Para escolher um dos frameworks necessrio analisar as respostas dadas a cada critrio na seo anterior. Na Tabela 10 esto listadas as escolhas de frameworks com as justificativas para deciso de acordo com os resultados da anlise.

57

Critrios Gerais Nome Framework Escolhido

Documentao e fruns para Hibernate. Por possuir um discusso frum mais ativo.

Maturidade e longevidade do Hibernate. Porque possui um projeto projeto mais maduro e com maiores evoluir. Desempenho Hibernate. Por sido superior em todos os testes de desempenho. Critrios ORM Nome Forma das classes persistentes Framework Escolhido Hibernate. Por permitir mais opes para transparncia. Definio de metadados Ambas fornecem possibilidades de

alteranativas equivalentes. Identificao de objetos nas Ambas tabelas de banco de dados Mapeamento de classes fornecem

alteranativas equivalentes. Ambas fornecem

alteranativas equivalentes. Estados dos objetos no Hibernate. Pelo fato do

contexto de persistncia

mtodo merge trazer muitas vantagens ao desenvolvedor.

Facilidades para consultas

Hibernate. facilidades

Por como

fornecer a API

58 Criteria. Recuperao eficiente para Hibernate. dados com associaes Permite mais no

opes para otimizao carregamento.

Controle

de

transaes

e Ambas

fornecem

concorrncia Gerenciamento de cache

alteranativas equivalentes. Ambas fornecem

alteranativas equivalentes. Bancos de dados suportados Data Nucleus. Fornece

grande variedade de bancos de dados. Gerao de esquema de banco Ambas de dados a partir fornecem

das alteranativas equivalentes.

entidadesTabela 10 Resultados da anlise comparativa

Com base nos resultados listados e justificados na Tabela 10, o conjunto especificao/framework escolhido foi o Hibernate com JPA.

59 6. CONCLUSES Ao analisar os frameworks Data Nucleus e Hibernate, foi possvel notar que ambas as solues so muito parecidas, sendo que os critrios que levou a selecionar uma delas so recursos adicionais simples, mas que muito auxiliam ao desenvolvedor. O Hibernate com a especificao JPA apresenta alguns recursos que muito auxiliaram durante a fase de implementao do software utilizado no estudo de caso, como a API de Criteria, estratgias adicionais para carregamento associaes, entre outros. O DataNucleus no foi escolhido na anlise presente neste trabalho, mas no deve ser totalmente descartado porque foi equivalente ao Hibernate em vrios aspectos, alm de oferecer o suporte a variados tipos de bancos de dados que podem vir a ser solues concorrentes aos bancos de dados relacionais no futuro. O declnio de atividade no desenvolvimento do Data Nucleus algo que afeta muito este framework, mas, em um cenrio em que exista a necessidade de utilizar bancos de dados diferentes dos relacionais, este framework pode se tornar uma opo vivel. No cenrio atual, em que bancos de dados relacionais so os mais utilizados, o Hibernate se apresenta superior ao Data Nucleus, principalmente levando-se em conta todos os recursos adicionais que apresentados, pode-se dizer que estes foram determinantes para decidir a respeito da utilizao deste framework no sistema Laborapix/Iguassu. Alm disso, outros fatores relevantes foram o desempenho apresentado pelo Hibernate, que em todos os casos testados foi superior ao Data Nucleus e as perspectivas apresentadas pelo projeto do Hibernate, que, ao contrrio do Java Data Objects e do Data Nucleus encontra-se em franco crescimento tanto em nmero de utilizadores quanto na quantidade de evoluo da implementao e da qualidade dos recursos oferecidos.

60 Os resultados foram obtidos durante o estgio na empresa Mitah Technologies, conveniada Universidade Federal de Lavras MG, e atualmente todos os colaboradores esto desenvolvendo o software Laborapix utilizando como framework de persistncia o Hibernate.

61 7. REFERNCIAS BIBLIOGRFICAS

Ambler, S.W. The Object-Relational ImpedanceMismatch, Ambysoft Inc., 2003a, Capturado em Agosto de 2009. On-Line. Disponvel na Internet no endereo http://www.agiledata.org/essays/impedanceMismatch.html

Ambler, S. W. Mapping Objects to Relational Databases: O/R Mapping In Detail, Ambysoft Inc., 2003b, Capturado em Agosto de 2009. OnLine. Disponvel na Internet no endereo

http://www.agiledata.org/essays/mappingObjects.html

Pothu, S. A Comparative Analysis of Object-relational mappings for Java, MSc. Thesis, University of Applied Sciences at Braunschweig/Wolfenbuettel, 2008

Bauer, C.; King, G. Java Persistence com Hibernate, 1 Edio, Editora Cincia Moderna Ltda.,2007.

Datanucleus Team. Data Nucleus Project Documentation v.1.0.0.m4, DataNucleus Access Plataform, 2008, Capturado em Agosto de 2009. OnLine. Disponvel na Internet no endereo http://www.datanucleus.org/

King, G.; Bauer, C.; Andersen, M. R.; Bernard, E.; Ebersole, E.; Hibernate Reference Documentation 3.3.2.GA, JBoss, 2009, Capturado em Agosto de 2009. OnLine. Disponvel na Internet no endereo http://www.hibernate.org/

62 Barcia, R.; Hambrick, G.; Brown, K.; Peterson, R.; Bhogal, K. S. Persistence in the Enterprise: A Guide to Persistence Technologies, 1 Edio, IBM Press, 2008.

Biswas, R.; Ort, E. The Java Persistence API - A Simpler Programming Model for Entity Persistence, Capturado em Agosto de 2009. OnLine. Disponvel na Internet no endereo

http://java.sun.com/developer/technicalArticles/J2EE/jpa/

Sun Microsystems, Documentao do JDBC, Capturado em Outubro de 2009. Online. Disponvel na Internet no endereo

http://java.sun.com/products/jdbc/overview.html

Silberschatz, A.; Korth, H. F.; Sudarshan, S.; Database System Concepts, 6 Edio, McGraw-Hill, 2010

Apache JDO. Documentao do Java Data Objects, Capturado em Outubro de 2009. OnLine. Disponvel na Internet no endereo http://db.apache.org/jdo/

Jendrock, E.; The Java EE 5 Tutorial, Capturado em Agosto de 2009. OnLine. Disponvel na Internet no endereo

http://java.sun.com/javaee/5/docs/tutorial/doc/?wp406143&PersistenceIntro.htm l#wp78460

Mahmoud, Q. H.; Getting Started With Java Data Objects (JDO): A Standard Mechanism for Persisting Plain Java Technology Objects, 2005, Capturado em Novembro de 2009. OnLine. Disponvel na Internet no endereo http://java.sun.com/developer/technicalArticles/J2SE/jdo/

63 Ezzio, D.; Using and Understanding Java Data Objects, Capturado em Fevereiro de 2010. OnLine. Disponvel na Internet no endereo http://javajdo.info/Apress-Using.and.Understanding.Java.Data.Objects/tindex.htm

Macoratti, J. C..; UML - Diagrama de Classes e Objetos, Capturado em Fevereiro de 2010. OnLine. Disponvel na Internet no endereo

http://www.macoratti.net/net_uml1.htmPinheiro, J. F. V.; Um Framework para Persistncia de objetos em Banco de Dados Relacionais; Msc. Thesis; Universidade Federal Fluminense, 2005

Castro, Lucas de Luca. Procedimentos de Modelagem e uma Ferramenta de Gerao Automtica de Cdigo. 2010. 59f. Monografia (Curso de Cincia da Computao) Universidade Federal de Lavras, Lavras, 2010.

Ribeiro Jr., J. C., Victorio, R. A. S. S., Sade, A. V., Marcucci, M. C., ET AL. Sistema de rastreabilidade aplicado s atividades de produo rural, industrializao n.PI0701450-3 e comercializao de produtos (2008), apcolas, Patente:

(2007),

PCT-BR2008-00112

MX/A/2009/011274

(2009), US 12/596,612 (2010).