A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "1 Java Data Objects (Persistência Transparente em Java) Giuliano Mega Cleber Miranda Barboza."— Transcrição da apresentação:

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

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

3 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).

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

5 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

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

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

8 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

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

10 1 Arquitetura JDO - rudimentos PM: PersistenceManager POJO: Plain Old Java Object

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

12 1 Arquitetura JDO – Principais Classes

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

14 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);

15 1 Exemplo de código (cont.) PersistenceManager pm = pmf.getPersistenceManager(); Transaction tx = pm.currentTransaction(); // Abre uma transação tx.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();

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

17 1 Descritor de Persistência Indica à implementação JDO como persistir um objeto. Descritor para a classe Pessoa:

18 1 JDO - Enhancement Resta saber como o JDO associa as classes a seus descritores de persistência. Class enhancement Interface PersistenceCapable

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

20 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?

21 1 Ciclo de Vida de Objetos (2) Transições e Transações

22 1 Ciclo de Vida de Objetos (3) Todas as transições e estados requeridos pelo JDO 1.0

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

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

25 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

26 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()); }

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

28 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)); }

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

30 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)

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

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

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

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

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

36 1 Benchmarks

37 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

38 1 Perguntas?

39 1 Bibliografia ROOS, Robin M. Java Data Objects. Addison Wesley, 2003. JORDAN, David. JDOQL: The JDO Query Language. em:. 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. Muitos artigos perdidos no tempo.


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

Apresentações semelhantes


Anúncios Google