Conjunto com bancos de dados relacionais

Resumo. A programação orientada a objetos é utilizada há muito tempo em conjunto com bancos de dados relacionais, que é considerado o padrão adotado pelo mercado há anos. Entretanto, a passagem de dados de um objeto para uma tabela de um banco de dados relacional, do ponto de vista conceitual, costuma ser incompatível devido as adaptações realizadas no modelo relacional para implementar integridades referenciais, facilitar consultas, etc. Por isso, outras tecnologias foram desenvolvidas para tornar a persistência de objetos em bancos de dados relacional mais natural. Neste trabalho, são apresentadas duas tecnologias com este objetivo: DB4O, que utiliza um banco de dados orientado a objetos, armazenando diretamente a instância da classe no banco de dados e o framework JPA, que mapeia os objetos e seus atributos para suas respectivas tabelas no banco de dados relacional. A ferramenta Eclipse e o banco de dados MySQL foram utilizados para a implementação das aplicações neste trabalho.

Palavras-chave: JPA, DB4O, Banco de Dados não convencional, Mapeamento Objeto-Relacional, Banco de Dados Orientado a Objeto, MySQL.

1 Introdução

1.1 Motivação

O crescente avanço do paradigma de programação orientado a objetos tornou necessário o estudo acerca de novas formas de persistir os dados de um sistema, pois o modelo relacional não é diretamente compatível com o paradigma, visto que não foi feito pensando para orientação a objetos.

Existem duas abordagens que são o objeto de estudo deste trabalho para tratar persistência de dados: bancos de dados orientados a objetos e mapeamento objeto-relacional.

Bancos de dados orientados a objetos suportam o armazenamento de objetos complexos, mantendo sua estrutura, ao contrário dos bancos relacionais que desconhecem o conceito de objeto. Objetos são abstrações do mundo real e a manipulação destes é mais simples de entender quando comparado às abstrações de um banco de dados relacional. Embora não seja muito utilizado comercialmente, bancos de dados orientados a objeto vêm evoluindo bastante, permitindo aplicações cada vez mais robustas e atuando principalmente nas áreas de manipulação de objetos complexos como espaciais, som e vídeo.

O mapeamento objeto-relacional justamente serve para mapear os objetos em tabelas de um banco de dados relacional, utilizando todas as vantagens desse banco de dados e sendo transparente para o usuário. Isto facilita o trabalho do desenvolvedor e permite uma melhor visualização da relação entre os objetos e as relações do banco reacional.

Este trabalho é resultado da primeira parte da disciplina ministrada pelo professor Sean W. M. Siqueira no primeiro semestre de 2009. A disciplina trata de bancos de dados não convencionais, e faz parte do currículo de Bacharelado em Sistemas de Informação da Unirio (Universidade Federal do Estado do Rio de Janeiro) como disciplina optativa da linha de Banco de Dados.

1.2 Objetivo

O objetivo deste trabalho é apresentar duas tecnologias voltadas para o desenvolvimento orientado a objeto (DB4O e JPA) e como realizar suas respectivas implementações que testam a persistência em um banco de dados orientado a objeto, mais especificamente o DB4O, e a persistência utilizando o mapeamento objeto-relacional, através do framework JPA.

Após a demonstração destas duas implementações, foi realizada uma comparação entre as duas abordagens, incluindo a abordagem de desenvolvimento tradicional.

1.3 Modelo de classes

Para a aplicação, desenvolvemos o seguinte modelo de classes:

1.4 Estrutura do Relatório

O relatório está estruturado em elementos pré-textuais, 5 (cinco) capítulos, e elementos pós-textuais. Na primeira parte há itens como sumário e índices. Em seguida, estão os capítulos que estão brevemente descritos a seguir, e, por fim, os elementos pós-textuais.

  • capítulo 1 explica a motivação e o objetivo para este trabalho.
  • capítulo 2 apresenta o passo-a-passo para a implementação de uma aplicação utilizando a tecnologia DB4O.
  • capítulo 4 apresenta o passo-a-passo para desenvolvimento de uma aplicação utilizando o framework JPA.
  • capítulo 4 apresenta as conclusões do presente trabalho, comparando as tecnologias envolvidas.
  • capítulo 5 apresenta as referências bibliográficas.

2 Etapas do desenvolvimento de aplicação utilizando DB4O

Este capítulo apresenta o passo-a-passo para desenvolvimento de aplicação utilizando o DB4O.

2.1 Softwares utilizados

Os seguintes softwares foram utilizados para a implementação dos serviços.

  1. Eclipse
  2. JDK 6

2.2 Introdução ao DB4O

  • banco de dados orientado a objetos DB4o é um software open source de fácil instalação e baixa necessidade de recurso, uma vez que ele não é um SGBD e por isso não possui interface gráfica e outras funcionalidades de gerenciamento.
  • DB4o foi feito para poder ser utilizado em plataformas desktop, celulares, servidores, contanto que o ambiente seja orientado a objetos. Além disso, ele não exige a necessidade de nenhuma programação ou ferramenta para mapear a orientação a objetos para o modelo relacional, pois ele faz uso da orientação a objetos a seu favor, permitindo que o modelo seja uma representação fiel do banco de dados.
  • DB4o não possui instalação. No desenvolvimento realizado, utilizando o Eclipse, a única ação necessária para instalar o DB4o foi importar o arquivo “.jar” como uma biblioteca para o eclipse. Após isso, os pacotes com os objetos necessários para persistir os dados no DB4o estão prontos para serem utilizados.

Como o DB4o não necessita de mapeamento, também não necessita de modelo lógico e físico, visto que ele é totalmente baseado na orientação a objetos, logo, o banco segue o modelo de classes.

2.3 Metodologia de desenvolvimento

Para realizar o desenvolvimento da aplicação, primeiro define-se as classes POJO (Plain Java Object). Os objetos que serão armazenados no DB4O são pertencentes a essas classes de objetos implementadas no início do desenvolvimento.

Depois, desenvolve-se uma classe que permite inserção, consulta, alteração e exclusão de objetos do banco. Para isso, é necessário importar diversas bibliotecas externas pertinentes ao desenvolvimento para DB4O e também abrir o arquivo onde os objetos serão armazenados, instanciando um objeto da classe ObjectContainer, que representará o banco de dados.

Para inserção de objetos no DB4O, utilizamos o método set da classe ObjectContainer, que armazena um objeto passado como parâmetro no DB4O.

Para consulta de objetos no DB4O utilizamos o método QueryByExample, que utiliza um objeto passado como parâmetro como exemplo e busca o objeto semelhante no DB4O. O resultado é armazenado em uma variável do tipo ObjectSet.

Para alteração de objetos no DB4O é necessário consultar o objeto que se deseja alterar e armazená-lo em um objeto da classe desejada. Depois, alterar os dados através do método set definido na classe POJO e colocar no DB4O através do método store, definido na classe ObjectContainer.

Para a deleção de objetos no DB4O é necessário consultar o objeto que se deseja remover e utilizar o método delete, definido na classe ObjectContainer.

2.4 Passo a passo para implementação de uma aplicação utilizando o DB4O

O DB4O consiste em um arquivo .jar apenas, então o primeiro passo (após realizar o download do DB4O) é verificar qual .jar utilizar. Nesse caso, utilizamos o DB4o-7.4-java5.jar, pois é o indicado para que utiliza o JDK 5 ou 6.

3 Etapas do desenvolvimento de aplicação utilizando JPA

Este capítulo apresenta o passo-a-passo para desenvolvimento de aplicação utilizando o framework JPA.

3.1 Softwares utilizados

Os seguintes softwares foram utilizados para a implementação dos serviços.

  1. Eclipse Ganymede versão 3.4.0 (possui OpenJPA nativo)
  2. JDK 1.5
  3. Hibernate
  4. MySQL

3.2 Introdução ao JPA

O Java Persistence API (JPA) é um produto implementado pela SUN, especificado para oferecer uma persistência transparente de objetos Java. O OpenJPA é uma implementação disponibilizada como software livre, desenvolvida pela Apache Software Foundation baseada no JPA produzido pela SUN.

O JPA define um padrão de mapeamento dos objetos do modelo orientado a objetos para o modelo relacional, trazendo as vantagens dos dois mundos: a programação orientada a objetos, paradigma consagrado de desenvolvimento e os bancos de dados relacionais, igualmente consagrados em termos de utilização e desempenho. Além disso, a tecnologia possui amplo suporte pela maioria dos das grandes empresas do mercado: Apache, Oracle, BEA, JBoss.

As camadas que compõe o framework para o mapeamento objeto-relacional utilizando JPA podem ser visualizadas na Figura 14:

O JPA provê uma API simples e padronizada de persistência para Java SE e Java EE. Essa padronização permite a modularização do provedor JPA que é oferecido em diversas versões por vários desenvolvedores, dando a opção de escolha o usuário final.

A padronização da tecnologia permite o aumento da produtividade e o uso de anotações (Annotations) simplifica a configuração das entidades.

Seus objetos são baseados em classes POJO (Plain Old Java Objects) e sua implementação oferece suporte a herança e polimorfismo.

O JPA é compatível com a linguagem de consulta Java Persistence Query Language (JP-QL) que utiliza uma sintaxe próxima a SQL, porém é voltada para consulta de entidades e suas propriedades, criando independência em relação à modelagem física do banco de dados. A JPQL é capaz de realizar consultas estáticas (named queries) e consultas dinâmicas e permite a construção de consultas complexas.

Portanto, o JPA é uma solução completa para mapeamento e persistência de objetos, sendo composto pelo modo declarativo de descrever mapeamento O/R, linguagem de consulta e recursos para manipulação de entidades.

3.3 Metodologia de desenvolvimento

Após a definição do modelo relacional, desenvolvem-se as classes POJO referentes as tabelas no banco de dados. Então se insere as “anotações” (annotations) que declaram que a classe possui uma respectiva tabela no banco de dados. Entretanto, ainda é necessário registrar essas classes no arquivo persistence.xml, que será utilizado para definir o subconjunto de classes que poderão ser gerenciadas.

Ao escrever o código, deverá ser instanciada um objeto do tipo EntityManagerFactory passando o arquivo persistence.xml como parâmetro. A partir deste objeto, é criado outro do tipo EntityManager, responsável por gerenciar o ciclo de vida das entidades que estão registradas.

Ao iniciar a manipulação dos objetos, é necessário iniciar uma transação e então registrar os comandos CRUD para serem executados. Então, ao final, realiza-se o commit ou rollback destas operações.

A Figura 15 resume o fluxo de mapeamento objeto-relacional seguido pelo JPA.

3.4 Passo a passo para implementação de uma aplicação utilizando JPA

O primeiro passo para iniciar a implementação de uma aplicação utilizando o framework JPA é baixar os arquivos JAR necessários para realizar as importações das classes que serão utilizadas no programa.

Como será utilizado como “provedor JPA” (Figura 2) o framework de persistência “Hibernate”, os seguintes pacotes serão necessários: Hibernate Core, Hibernate Annotations e Hibernate Entity Manager, que estão disponíveis em http://sourceforge.net/projects/hibernate/files/. No desenvolvimento da aplicação foram utilizadas as versões 3.2.0.GA do Hibernate Core, 3.3.0 GA do Hibernate Annotations e 3.3.1.GA do Hibernate Entity Manager. Cabe salientar que pacotes de outras versões do Hibernate podem resultar em falhas e erros inesperados em relação aos procedimentos realizados neste relatório.

O driver JDBC para o MySQL também é necessário e pode ser baixado no site oficial do MySQL, em http://dev.mysql.com/downloads/connector/j/5.1.html. Para o desenvolvimento da aplicação foi utilizado a versão 5.1.7 do driver JDBC para o MySQL.

Em posse dos arquivos necessários, iniciam-se os passos para o desenvolvimento da aplicação no Eclipse.

4 Conclusão

Conforme apresentado, o desenvolvimento utilizando bancos de dados orientado a objetos apresenta diversas facilidades em relação à proposta tradicional de desenvolvimento e à proposta de mapeamento objeto-relacional. Essas vantagens são as seguintes:

  • Modelagem mais real: permite que o seu modelo de classes seja o seu modelo de armazenamento de dados, pois armazena exatamente os objetos como eles foram criados para serem armazenados, sem necessidade de nenhum tipo de transformação
  • Representação de dados com formatos variáveis: no relacional, as tuplas precisam ser homogêneas e os atributos atômicos, enquanto que no OO isso não é necessário. é possível ter dados em formatos variáveis.
  • Facilidade de instalação e utilização: é mais fácil e rápido instalar o DB4o do que algum banco de dados relacional, pois não é necessário configurar e criar um banco de dados previamente, nem é necessário realizar um modelo relacional, físico e lógico, pois o próprio modelo de classes é a representação dos dados no banco

Mas, existem alguns problemas nessa tecnologia. Alguns já foram citados anteriormente:

  • Stored procedures: Não existem stored procedures ou triggers, sendo necessário programar na aplicação essas funções, o que pode fazer cair o desempenho do sistema
  • O modelo relacional já está consolidado no mercado, acumulando anos de estudo e aprimoramento, oferecendo bom desempenho, mecanismos de otimização, tratamento de concorrência.

5 Referências

  • Vasiliev, Yuli, 2008, Querying JPA Entities with JPQL and Native SQL – Disponível em http://www.oracle.com/technology/pub/articles/vasiliev-jpql.html.
  • Apache Software Fundation, Apache JPA User’s Guide – Disponível em http://JPA.apache.org/builds/latest/docs/manual/manual.pdf.
  • OLIVEIRA, H.E.M, 2008, JPA Passo a Passo, TDC – The Developer’s Conference 2008 – Disponível em http://www.thedevelopersconference.com.br/arquivos/TDC2008Floripa-jpa-henrique.pdf
  • DB4Objects, DB4O Tutorial – Disponível em: http://developer.db4o.com/files/folders/db4o_74/entry49672.aspx
  • ENGIEL, P., 2008, Comparação entre as formas de persistir a programação orientada a objetos