1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.

39
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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

1

Arquitetura JDO – Principais Classes

Page 13: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

1

Benchmarks

Page 37: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.

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.

1

Perguntas?

Page 39: 1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza.

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.