• Nenhum resultado encontrado

UFG - Instituto de Informática

N/A
N/A
Protected

Academic year: 2021

Share "UFG - Instituto de Informática"

Copied!
30
0
0

Texto

(1)

UFG - Instituto de Informática

Especialização em Desenvolvimento de

Aplicações Web com Interfaces Ricas

EJB 3.0

Prof.: Fabrízzio A A M N Soares [email protected] Aula 10 – Persistência de Dados

(2)

Persistência de Dados

 A persistência de dados, na computação,

refere-se ao armazenamento não-volátil de dados, por exemplo, o armazenamento em um dispositivo físico como um disco rígido.

 Quando se grava um arquivo no disco, por

exemplo, o dado está sendo “eternizado”, ou seja, deixa de ficar volátil na memória RAM e passa a ser escrito num dispositivo que

(3)

Persistência de Dados

 Pode-se dizer que de maneira geral, o termo

persistência é associado a uma ação que

consiste em manter em meio físico

recuperável, como banco de dados ou arquivo, de modo a garantir a permanência das informações de um determinado estado de um objeto lógico.

(4)

Tipos de Persistência

Arquivo

(5)

Persistência de Dados

 Na orientação a objetos, chama-se de “objetos

persistentes” aqueles que permanecem

existindo mesmo após o término da execução do programa.

 Associados à persistência estão o

gerenciamento dinâmico da memória e o armazenamento de objetos em bases de dados.

(6)

Persistência de Dados

 Somente é possível “eternizar” um objeto

quando este não possui “dados dinâmicos” (runtime), ou seja, dados que só fazem sentido no contexto do tempo em que estão executando, como sockets, por exemplo.

 Os objetos que possuem dados de tempo de

execução, se congelados, após sua

(7)

Persistência e mapeamento O/R

 Como sabemos, a tecnologia de banco de

dados relacionais existe há décadas, e hoje os SGBDs são robustos e confiáveis.

 Os principais problemas relacionados ao

armazenamento e recuperação de dados já foram solucionados, e o investimento das empresas nesses sistemas também é imenso, o que torna a sua utilização uma regra.

(8)

Persistência e mapeamento O/R

 O uso dos bancos de dados relacionais, no

entanto, traz alguns inconvenientes ao desenvolvedor em linguagens orientadas a objetos como Java.

 As tecnologias OO e relacional são bastante

diferentes, e seu uso conjunto normalmente implica em enfatizar uma tecnologia em sacrifício da outra.

(9)

Persistência e mapeamento O/R

 Como os bancos de dados OO ainda estão

muito menos disseminados que os bancos de dados relacionais, o desafio atual dos

desenvolvedores é unir dois mundos

completamente distintos, utilizando a

(10)

Persistência e mapeamento O/R

 O armazenamento de objetos de uma

aplicação é denominado persistência de objetos.

 Essa técnica permite que as instâncias

existentes no sistema sejam armazenadas e posteriormente recuperadas, conservando-se o seu estado mesmo após a aplicação ter sido finalizada.

(11)

Abordagens atuais de mapeamento

 Desde as suas primeiras versões, a plataforma

Java oferece acesso a bancos de dados através da API JDBC, que trabalha no mesmo nível do banco, sendo o acesso às informações armazenadas feito através de comandos SQL.

(12)

Abordagens atuais de mapeamento

 Em muitos aspectos, a JDBC é uma API de baixo

nível, que muitas vezes exige do desenvolvedor o conhecimento das “nuances” do banco de dados.

 Apesar de ser uma maneira eficiente de acessar

dados em SGBDs relacionais, e a opção que normalmente oferece melhor performance, a JDBC oferece uma abstração OO bastante limitada

 Trabalha-se com Tabelas, Registros e ResultSets, ao

(13)

Abordagens atuais de mapeamento

 Para usar os recursos de bancos de dados relacionais

em Java e ainda assim aproveitar os conceitos do paradigma OO, é necessário fazer o que se conhece como mapeamento Objeto-Relacional (ou simplesmente mapeamento O/R).

 No mapeamento O/R as classes e os atributos do

sistema são mapeados para tabelas e campos/colunas, e a persistência é feita de forma transparente pela aplicação.

(14)

Abordagens atuais de mapeamento

 Assim, objetos em memória são armazenados

no banco, e objetos do banco são trazidos para a memória sempre que necessário.

 Com paradigmas tão diferentes, essas

questões surgem durante o mapeamento:

 Como mapear herança?  E agregação?

(15)

Abordagens atuais de mapeamento

 Para suprir essas necessidades, surgiram ersos

frameworks e tecnologias de persistência, a exemplo do Hibernate e do iBatis.

 Essas ferramentas facilitam o trabalho do

desenvolvedor e aumentam sua produtividade, fornecendo poderosas APIs de manipulação de dados.

 Apesar de cada ferramenta possuir uma forma distinta

(16)

Abordagens atuais de mapeamento

 O termo Plain Java Old Object (ou

simplesmente, POJO) foi criado por Martin Fowler, Rebecca Parsons e Josh MacKenzie em 2000.

 A tradução é semelhante a “velho e bom objeto

Java” e refere-se a objetos/classes Java simples, não atrelados a ferramentas ou frameworks

(17)

JPA – Java Persistence API

 Até o J2EE 1.4 a plataforma Java não possuía uma

forma simples de mapear objetos no banco de dados.

 A única opção era a utilização de Entity Beans, que

exigem um container EJB e possuem uma complexidade razoável.

 Aplicações cuja arquitetura não envolvia EJBs

precisavam utilizar ferramentas não padronizadas como o Hibernate para fazer a persistência, ou fazer a implementação de persistência manualmente.

(18)

JPA – Java Persistence API

 A Java Persistence API, definida na JSR-220

(Enterprise JavaBeans,Version 3.0), padroniza o mapeamento objeto-relacional na plataforma Java.

 Apesar de descrita na especificação do novo EJB, a

JPA não depende de um container para funcionar, sendo possível usar e testar soluções apenas com o Java SE.

(19)

JPA – Java Persistence API

 A JPA é uma especificação baseada no conceito de

POJOs, que incorpora idéias de renomados frameworks de persistência para padronizar o mapeamento O/R em Java.

 A API oferece uma solução completa para

mapeamento e persistência de objetos:

 Um modo declarativo de descrever mapeamentos

(20)

JPA – Java Persistence API

 Em se tratando de um padrão do Java

Community Process, a JPA traz ersos benefícios.

 O uso de um padrão para a persistência de

objetos permite que ersos fabricantes

trabalhem sobre os mesmos conceitos e que o desenvolvedor escolha a implementação de sua preferência.

(21)

JPA – Java Persistence API

 A padronização também traz outra importante

vantagem:

 pode-se alternar entre implementações de

fabricantes distintos, que estejam em conformidade com a JSR-220, sem nenhum esforço adicional.

 Dessa forma, uma aplicação codificada de acordo

com o novo padrão irá funcionar com qualquer implementação da JPA, não havendo necessidade de se conhecer (a princípio) qual tecnologia será utilizada

(22)

Conceitos Básicos

 Na JPA os objetos persistentes são

denominados entidades (entities).

 Uma entidade é um objeto simples (POJO),

que representa um conjunto de dados persistido no banco.

 Como entidades são definidas por classes Java

comuns, sem relação com frameworks ou bibliotecas, elas podem ser abstratas ou herdar

(23)

Conceitos Básicos

 Um conceito importante é que as entidades

possuem um identificador (descrito pela chave primária) e estado, sendo seu tempo de vida independente do tempo de vida da aplicação.

 Assim, aplicações distintas podem compartilhar

a mesma entidade, que é referenciada através de seu identificador.

(24)

Conceitos Básicos

 Para que uma entidade se torne persistente é

necessário associá-la a um persistence context (“contexto de persistência”), que fornece a conexão entre as instâncias e o banco de dados.

 A manipulação das entidades é feita, a partir desse

contexto, por meio do entity manager (“gerenciador”), que é responsável por executar as operações básicas sobre a entidade (criação, atualização, exclusão, localização, consultas etc.).

(25)

Conceitos Básicos

 A implementação da JPA é feita por um persistence

provider (“provedor”).

 O provedor define “como as coisas funcionam”,

através da implementação de todas as interfaces definidas pela especificação da JPA.

 Dessa forma, cada provedor decide a maneira e o

momento de carregar, atualizar e armazenar as entidades, assim como sincronizar os dados com o banco.

(26)

Conceitos Básicos

 As configurações utilizadas pelo provedor em uma

determinada aplicação (conexão com o banco de dados, entidades que serão gerenciadas, tipo de transação etc.) são descritas em uma persistence unit, que é configurada num arquivo especial denominado persistence.xml.

(27)

Mapeamento

 As classes e interfaces da JPA estão

localizadas no pacote javax.persistence.

 A API faz uso intensivo de anotações; por isso

não é necessário criar descritores XML para cada uma das entidades da aplicação.

 Uma entidade é uma classe Java comum,

(28)

Mapeamento

 Não é necessário implementar interfaces ou

estender outras classes para tornar uma classe “persistível”;

 A única exigência é que a classe da entidade

possua um construtor sem parâmetros, pois a instanciação da classe é feita por reflexão.

(29)

Mapeamento

 As classes e interfaces da JPA estão

localizadas no pacote javax.persistence.

 A API faz uso intensivo de anotações

 por isso não é necessário criar descritores XML

(30)

Mapeamento

 Uma entidade é uma classe Java comum,

rotulada através da anotação @Entity.

 Não é necessário implementar interfaces ou

estender outras classes para tornar uma classe “persistível”

 a única exigência é que a classe da entidade

possua um construtor sem parâmetros, pois a instanciação da classe é feita por reflexão.

Referências

Documentos relacionados