1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.
Transcript of 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.
![Page 1: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/1.jpg)
1
Java Data Objects(Persistência Transparente em Java)
Giuliano Mega
Cleber Miranda Barboza
![Page 2: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/2.jpg)
1
Sistemas de Gerenciamento de Dados
Três tipos de requisitos (Ullman):
Gerenciamento de Dados - operações básicas em estruturas de dados simples
Gerenciamento de Objetos (JDO) - estruturas de dados mais complexas e suas operações
Gerenciamento de Conhecimento - bases de regras, bancos de dados ativos, provadores de teorema, sistemas de inferência.
![Page 3: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/3.jpg)
1
Persistência de Modelos de Objetos
Necessidade Dados persistentes.
Problema Aplicações geralmente são desenhadas em cima de
modelos de objetos (Orientadas a Objetos). Bancos de dados relacionais -
representacionalmente incompatíveis com modelos de objetos (o famoso impedance mismatch).
![Page 4: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/4.jpg)
1
Persistência de Modelos de Objetos (cont.)
Resultado Quilos de código são necessários para realizar o
mapeamento Objeto-Relacional direto e inverso. Aumento de complexidade no código de aplicativos. Ineficiência. Dificuldades de manutenção (mudanças no banco =
mudanças no código). Solução
Modelos de persistência de objetos. Atualmente existem inúmeras formas de auxílio à
persistência de modelos de objetos.
![Page 5: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/5.jpg)
1
Gerenciamento de Objetos
Algumas formas conhecidas para lidar com o problema:• Seriação • Linguagens de Programação Persistentes - Pascal/R
(não OO), JVM com checkpoints • RDBMs extendidos • Ferramentas de mapeamento O/R (ex: JavaBlend) • ODBMS • Snapshotters• Persistência Ortogonal
![Page 6: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/6.jpg)
1
JDO – Introdução
O que é JDO? JDO é uma ferramenta de persistência de modelos
de objetos. Nascido da JSR 12, JDO é uma especificação. JDO reúne o melhor dos mundos
• Semântica de persistência quase ortogonal.• Independe da estrutura de armazenagem subjacente
(existem implementações que trabalham em cima de RDBMs, ODBMS, arquivos XML, etc).
• Vem lentamente se tornando um padrão de fato.
![Page 7: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/7.jpg)
1
JDO – Introdução (Cont.)
O que JDO não é: JDO não é um banco de dados orientado a objetos. JDO não é um software, é uma especificação.
Softwares podem ser compatíveis com JDO em diversos níveis.
![Page 8: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/8.jpg)
1
JDO – Como Funciona
Principais tópicos: Modelo fortemente transacional Persistência transparente Persistência por transitividade (persistence by
reachability) Ciclos de vida de objetos Identidades Consultas Metadados Restrições
![Page 9: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/9.jpg)
1
Modelo Transacional
JDO é “orientado a transações”:• Objetos possuem campos persistentes• Acessos a esses campos devem ocorrer dentro de
transações O que são transações?
• São agrupamentos de tarefas que devem ser cumpridas em sua totalidade ou então não devem ser cumpridas (nenhuma delas).
• Seguem as propriedades ACID: Atomicidade Consistência Independência Durabilidade
• JDO oferece suporte a transações distribuídas.
![Page 10: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/10.jpg)
1
Arquitetura JDO - rudimentos
PM: PersistenceManagerPOJO: Plain Old Java Object
![Page 11: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/11.jpg)
1
Arquitetura JDO - elementos
A arquitetura JDO se apóia em 3 elementos principais• PersistenceManagerFactory – Constrói os objetos de
acesso à estrutura de dados subjacente.• PersistenceManager – Fornece o acesso à
implementação JDO.• Transaction – Fornece os serviços de demarcação de
transações. Como o JDO sabe qual porção de um Objeto deve
ser persistida?• Utilizando um arquivo descritor em formato XML (feioso
mas funcional).• JDO não é persistência ortogonal .
![Page 12: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/12.jpg)
1
Arquitetura JDO – Principais Classes
![Page 13: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/13.jpg)
1
Exemplo de código
public class Pessoa {private String nome = “”;
protected Pessoa() { }
public PessoaString nome){this.nome = nome;
}
public String getNome() {return nome;
}
public void setNome(String string) {nome = string;
}}
Um Business Object típico.
Também referido nos textos como Domain Object, Model Object, etc.
![Page 14: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/14.jpg)
1
Exemplo de código (cont.)
public static void main(String[] args) {Properties properties = new Properties();
properties.setProperty("javax.jdo.PersistenceManagerFactoryClass", "com.triactive.jdo.PersistenceManagerFactoryImpl");
properties.setProperty("javax.jdo.option.ConnectionDriverName", "com.mysql.jdbc.Driver");
properties.setProperty("javax.jdo.option.ConnectionURL", "jdbc:mysql://localhost:3306/giuliano");
PersistenceManagerFactory pmfactory = JDOHelper.getPersistenceManagerFactory(properties);
![Page 15: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/15.jpg)
1
Exemplo de código (cont.)
PersistenceManager pm = pmf.getPersistenceManager();Transaction tx = pm.currentTransaction();
// Abre uma transaçãotx.begin();
Object oid;Pessoa p = new Pessoa("Giuliano Mega");
pm.makePersistent(p);oid = pm.getObjectId(p);
// Finaliza a transação. tx.commit() grava o estado modificado // no banco.tx.commit();
![Page 16: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/16.jpg)
1
Persistência por Transitividade
Lembre: “JDO persiste automaticamente quaisquer objetos
acessíveis direta ou indiretamente a partir de um objeto tornado persistente.”
Isso significa que:• Um objeto “raíz” é persistido através de código JDO• O grafo de referências é persistido automaticamente.• Objetos voltam à memória conforme necessário.
Resultado:• Persistência transparente a objetos do domínio.• O grau de transparência varia com o design do modelo.• Fachadas são excelente prática nessas situações.
![Page 17: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/17.jpg)
1
Descritor de Persistência
Indica à implementação JDO como persistir um objeto. Descritor para a classe Pessoa:
<?xml version="1.0" encoding="ASCII"?><!DOCTYPE jdo SYSTEM "file:/javax/jdo/jdo.dtd"><jdo> <package name="jdotest.model"> <class name="Pessoa" identity-type="datastore"> <field name="nome" persistence-modifier="persistent"> <extension vendor-name="triactive" key="length" value="max 100"/> </field> </class> </package></jdo>
![Page 18: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/18.jpg)
1
JDO - Enhancement Resta saber como o JDO associa as classes a
seus descritores de persistência. Class enhancement Interface PersistenceCapable
![Page 19: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/19.jpg)
1
Campos Persistentes
Afinal, o que podem ser campos persistentes? JDO 1.0 – obrigatório
• Classes implementando a interface PersistenceCapable• Tipos primitivos em Java (int, char, String, etc)• Classes que empacotam tipos primitivos(Integer, Long,
etc)• java.util.HashSet, java.util.Locale
JDO 1.0 – optativo• ArrayList, HashMap, HashTable, LinkedList, TreeMap,
TreeSet, Vector.• Grande parte das implementações suporta HashMap e
LinkedList.
![Page 20: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/20.jpg)
1
Ciclo de Vida de Objetos (1)
Perguntas: Como o JDO gerencia a persistência de Objetos? Como a implementação sincroniza a base de dados
subjacente com os objetos em memória? Como e quando são lidos ou relidos os campos de um objeto?
![Page 21: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/21.jpg)
1
Ciclo de Vida de Objetos (2)
Transições e Transações
![Page 22: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/22.jpg)
1
Ciclo de Vida de Objetos (3)
Todas as transições e estados requeridos pelo JDO 1.0
![Page 23: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/23.jpg)
1
Identificação de Objetos
JDO prevê a identificação de Objetos por meio de dois métodos:
Identidade de base de dados• A implementação JDO fornece um identificador ao
objeto que independe de seus campos.• É encapsulado em um Object e dependente de
implementação. Identidade de aplicativo
• Classe fornecida pelo usuário é utilizada como chave primária.
• Essa classe obedece a uma estrutura previsível, parecida com aquela encontrada em classes para chaves primárias em contêiners J2EE.
![Page 24: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/24.jpg)
1
Herança
JDO permite o uso de polimorfismo A classe base da hierarquia deve ser persistente Consultas podem devolver misturas de classes e
subclasses. Supre uma das muitas deficiências do sistema de
CMP em ambientes J2EE.
![Page 25: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/25.jpg)
1
Consultas em JDO
Três maneiras de recuperar objetos Um único objeto, através de seu identificador
(exemplo no slide 14) Objetos de um tipo particular – Extents Objetos cujos campos contêm valores específicos –
filtros. Linguagem de consulta JDO – JDOQL
![Page 26: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/26.jpg)
1
Consultas JDO - Extents
Extent de uma classe: Coleção de todas as instâncias daquela classe. Opcionalmente pode conter os extents das
subclasses.
Extent e = pm.getExtent (Pessoa.class, true);
Iterator it = e.iterator()
while (it.hasNext()) {
Pessoa pessoa = (Customer) it.next();
System.out.pritln(pessoa.getNome());
}
![Page 27: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/27.jpg)
1
Consultas JDO - Filtros
Uso de filtros Obter objetos que satisfaçam determinadas
propriedades. São aplicados em extents de classes (porque não
iterar então?) Vantagens
Sintaxe parecida com Java. Dispensa o uso de SQL. Mais fácil de aprender que SQL. Independe da infraestrutura de dados subjacente.
![Page 28: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/28.jpg)
1
Consultas JDO – Filtros (exemplo)
Collection getPessoaPeloNome (String nomeString,PersistenceManager pm)
{Extent extent = pm.getExtent (Pessoa.class, true);String filter = “nome == nomeParaBusca”;Query query = pm.newQuery (extent, filter);
query.declareParameters (“String nomeParaBusca”);
query.setOrdering (“name ascending”);
return (query.execute (nomeString));}
![Page 29: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/29.jpg)
1
Consultas JDO - mais informações
Algumas outras informações sobre JDOQL É possível abranger elementos em coleções
persistentes dentro de consultas com filtros. É possível utilizar outras linguagens de consulta que
não o JDOQL em JDO (nunca vi fazerem). JDOQL é eficiente.
![Page 30: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/30.jpg)
1
JDO e EJB
Especula-se uma possível substituição do CMP por JDO.
O que é CMP? CMP é a sigla para Container Managed Persistence. É a maneira pela qual o container J2EE automatiza
o gerenciamento de instâncias persistentes. Instâncias persistentes = Entity Beans.
Entity Bean – duas categorias: Container-Managed Persistence (CMP) Bean-Managed Persistence (BMP)
![Page 31: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/31.jpg)
1
Entity Beans - BMP
BMP – Bean Managed Persistence Contém código de persistência explícito, que
armazena o conteúdo do bean na base de dados. Em geral não relacionam-se com outros beans. Improvável que BMP seja trocado pelo JDO, pois
um BMP faz uso de direto de drivers JDBC. Isso viola o design principal do JDO.
![Page 32: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/32.jpg)
1
Entity Beans - CMP
CMP – Container Managed Persistence
A persistência é gerenciada pelo container J2EE. Nesse modelo, o bean não contém código de
persistência JDBC (ou qualquer outro). O container trata toda a parte de armazenamento e
recuperação de dados. Beans que empregam CMP podem formar
relacionamentos típicos, como m:n e 1:m, com outros beans utilizando CMP's.
Esses relacionamentos são gerenciados pelo container.
![Page 33: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/33.jpg)
1
JDO e CMP
O papel do CMP é muito semelhante ao do JDO. Ambos permitem persistência do modelo de objetos
e não se preocupam com detalhes de como o modelo será armazenado na base de dados.
Tanto JDO como CMP tratam dos relacionamentos entre objetos.
CMP possui alto grau de portabilidade através dos servidores de aplicação ( A classe bean e o descritor de arquivos são padronizadas ).
A implementação JDO pode variar de acordo com características opcionais de cada fornecedor.
![Page 34: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/34.jpg)
1
JDO e CMP (cont.)
CMP: Relacionamentos gerenciáveis.Isso significa que durante uma transação, uma
mudança de um lado do relacionamento imediatamente afeta o outro lado
A mudança é visível para a aplicação. JDO :
Não suporta relacionamentos gerenciáveis. Alguns fornecedores oferecem essa característica
como opcional.
![Page 35: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/35.jpg)
1
CMP e JDO - Herança
CMP: Não comporta herança nem polimorfismo.Superclasses e subclasses não podem ser tratadas
indiferenciadamente. JDO:
Provê facilidades para o uso de herança e hierarquia de implementações.
Subclasses podem ser utilizadas no lugar de superclasses indiscriminadamente.
![Page 36: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/36.jpg)
1
Benchmarks
![Page 37: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/37.jpg)
1
Onde conseguir o JDO?
Implementações pagas Solarmetric (www.solarmetric.com) Libelis (www.libelis.com) outras.
Implementações de código aberto Apache OJB (db.apache.org/ojb/) TJDO (www.triactive.com) JORM (www.objectweb.com)
Veja também www.jdocentral.com Google – open source jdo implementation
![Page 38: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/38.jpg)
1
Perguntas?
![Page 39: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.](https://reader033.fdocument.pub/reader033/viewer/2022061618/552fc110497959413d8c5a0f/html5/thumbnails/39.jpg)
1
Bibliografia
ROOS, Robin M. Java Data Objects. Addison Wesley, 2003. JORDAN, David. JDOQL: The JDO Query Language. em:
<http://www.jdocentral.com.br/>. MCCAMMON, Keyron. Java Data Objects: The future for Java object
persistence. em: http://www.jdocentral.com.br KORTHAUS, Axel; MERZ, Matthias. A Critical Analysis of JDO in the Context
of J2EE. <http://webrum.uni-mannheim.de/rz/merz/publications/1007SE.pdf>
Muitos artigos perdidos no tempo.