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

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

Camada de Persistência

Apresentações semelhantes


Apresentação em tema: "Camada de Persistência"— Transcrição da apresentação:

1 Camada de Persistência
Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros da Banca: Prof Dr. Ronaldo dos Santos Mello Prof Dr. Frank Augusto Siqueira

2 Tópicos Introdução JDO Hibernate EJB Estudo de caso Análises Conclusão
Contextualização Problema Solução Objetivos JDO Hibernate EJB Estudo de caso Análises Conclusão Trabalhos Futuros

3 Introdução Contextualização Crescimento da indústria de softwares
Busca por novas técnicas Proliferação das tecnologias orientadas a objeto Bancos de dados relacionais consolidados Modelos de dados diferentes “Impedance Mismatch”

4 Introdução Contextualização O que é Modelo da dados?
Modelo de dados Relacional Tabela, Tupla, Coluna, Relacionamento, Chave Modelo de dados orientado a objetos Classe, Objeto, Herança, Identidade, Métodos, Associação Impedance Mismatch Diferenças entre modelos Identificação, relacionamentos, herança. Dificulta o processo de desenvolvimento de softwares Pode comprometer o desempenho Aumento do acoplamento, dificuldades de manutenção

5 Introdução Bancos de dados orientados a objeto
Eliminam o problema do Impedance Mismatch Falta de padronização Sistemas legados

6 Introdução Camada de Persistência Encapsulam o banco de dados
Simulam acesso orientado a objetos, independente do tipo de banco

7 Introdução

8 Problema Camada de Persistência minimiza os efeitos do Impedance Mismatch Dentre as várias implementações existentes, qual delas escolher? Padrões : JDO, EJB (Entity Beans) Não padrão: Hibernate

9 Objetivos Compreender a importância do uso de uma camada de persistência Estudar e descrever aspectos mais importantes das camadas de persistência em questão (JDO, EJB e Hibernate) Realizar estudo de caso (análise prática) Comparar as ferramentas com base na experiência adquirida.

10 JDO Java Data Objects Java Specification Request 12
Início em 1999, primeira versão em Maio de 2002. Mais recente versão 2.0, liberada em Fevereiro de 2005 Implementação escolhida: JPOX beta-1 Implementação referência escolhida pela SUN

11 JDO Arquitetura: Define uma série de classes e interfaces
PersistenceManager PersistenceCapable Transaction Query, ...

12 JDO Enxertador de código Problema crítico na especificação 1.0
Problemas com debugging Baseia-se nas declarações de meta-dados Inserção de byte-codes nos arquivos “.class”

13 JDO Ciclo de vida dos objetos
Transiente Persistente Identidade de objetos: Uma classe para cada chave primária Limitação: subclasses devem utilizar a mesma chave da superclasse

14 JDO Seleção de dados JDOQL SQL Através do OID Navegação Extent
Exemplo de seleção utilizando JDOQL Query q = pm.newQuery (Empregado.class, “salario > sal”); q.declareParameters (“Float sal”); Collection empregados = (Collection) q.execute (new Float (1000.0));

15 JDO Declaração dos Meta-Dados
Descrição através de arquivos no formato XML <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jdo SYSTEM "file:/javax/jdo/jdo.dtd"> <jdo> <package name="exemplo.modelo"> <class name="Person" objectid-class="exemplo.modelo.PersonKey" identity-type="application"> <field name="name" persistence-modifier="persistent“/> <field name="age" persistence-modifier="persistent“/> <field name="cpf" primary-key="true" persistence-modifier="persistent“ null-value="exception“/> </class> </package> </jdo>

16 Hibernate http://www.hibernate.org Versão utilizada: 3.0
Ferramenta gratuita e código livre Grande destaque na atualidade Não é reconhecido como padrão

17 Hibernate Arquitetura básica:

18 Hibernate Classes: Classes que podem ser extendidas SessionFactory
Transaction Classes que podem ser extendidas TransactionFactory ConnectionProvider

19 Hibernate Ciclo de vida dos objetos:

20 Hibernate Identidade de objetos Chave primária Gerenciamento
Nova classe ou atributo Gerenciamento Aplicação ou Hibernate Algoritmos de geração de chaves

21 Hibernate Seleção de dados Exemplos: OID Navegação HQL Criteria SQL
HQL: Query hqlQuery = session.createQuery("from Pessoa as pessoa Where pessoa.nome = ?").setString(0,”Maria”); SQL: Query sqlQuery = session.createSQLQuery("select {p.*} from Pessoa {p} Where p.nome = :nome", "p",Pessoa.class).setString(“nome”,”Maria”); Criteria: Criteria crit = session.createCriteria(Pessoa.class).add( Restriction.like("nome", "Maria"));

22 Hibernate Definição dos Meta-dados <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" " <hibernate-mapping> <class name="br.com.hibernate.Pessoa" table="PESSOA"> <id name="id“ column="PESSOA_ID“ type="long"> <generator class="native"/> </id> <property name="nome" column=”NOME” type="string"/> </class> </hibernate-mapping>

23 EJB Solução para sistemas cliente servidor Componentes distribuídos
Padrão j2EE Dentre as várias funções, realiza o papel de camada de persistência (Entity Beans) Mais recente versão completa: 2.1 (2003) Drafts e implementações da versão 3.0 já estão disponíveis

24 EJB EJB 3.0 Grandes mudanças Simplicidade Annotations

25 EJB Arquitetura Enterprise Beans Aplicação Cliente-Servidor EJB
“Objetos Java que contêm a lógica de negócio realizado e que comandam a manipulação dos dados de uma aplicação” Aplicação Cliente-Servidor Funções são disponibilizadas ao cliente que realiza requisições ao servidor EJB Session Beans, Entity Beans, Message-Driven Beans

26 EJB Entity Beans Visão de um conjunto de dados no banco na forma de objetos Java Operações sobre este objeto são refletidas no banco Entity Beans ficam contidos em um Contêiner de Beans Persistência Concorrência Segurança Controle de Transações

27 EJB EntityManager Ciclo de vida de um bean
Criar, remover, consultar, “contextos de persistência” Ciclo de vida de um bean Novo Gerenciado Desacoplado Removido

28 EJB Annotations Se parece com um comentário
Define meta-dados de um Entity Bean @Entity @Table(name="PESSOA") public class Pessoa implements Serializable { private Long id; private String nome; private Collection telefones; @Id(generate=TABLE) @Column(name=ID, primaryKey=true) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name="NOME", length=80) public String getNome() { return nome; }

29 EJB Annotations continuação
public void setNome(String nome) { this.nome = nome; } @OneToMany(targetEntity="br.com.ufsc.Telefone", cascade=ALL") @JoinColumn(name="PESSOA_ID", referencedColumnName="ID") public Collection getTelefones() { return telefones; } public void setTelefones(Collection telefones) { this.telefones = telefones; }

30 EJB Seleção de dados Exemplo de EJBQL EJBQL SQL
Métodos da interface “Home”, como na versão 2.1 Exemplo de EJBQL Query query = entityManager.createQuery( "SELECT c FROM Clientes c WHERE c.nome LIKE :cliNome"); query.setParameter("cliNome", nome); query.setMaxResults(10); query.getResultList();

31 Estudo de caso Problema proposto

32 Estudo de caso Metodologia Classes Java -> Banco de dados
Modelagem do problema pensando nas classes e não no meio persistente Menor esforço para um programador Menos conhecimento sobre banco de dados necessário

33 Estudo de caso Implementação com JPOX (JDO) Geração dos meta-dados
EclipseJDO Criação das tabelas SchemaTool Problemas Não é possível gerar os meta-dados totalmente corretos com base nas classes Java Não foi possível gerar as tabelas através de métodos Incompatibilidade entre definições de meta-dados Encapsulamento dos dados de telefones e formações Estrutura de classes hierárquica sem garantias de integridade (chaves estrangeiras)

34 Estudo de caso Aplicação final (JDO)

35 Estudo de caso Estrutura de tabelas (JDO)

36 Estudo de caso Implementação com Hibernate Geração dos meta-dados
Hibernator Geração das tabelas Hibernate Problemas Hibernator gera mapeamentos para a versão 2.1 do Hibernate Hibernator não gera o mapeamento para as relações de herança Precisou-se alterar o mapeamento gerado para a relação entre médicos e pacientes Foram necessárias classes para Telefone e Formação

37 Estudo de caso Aplicação final (Hibernate)

38 Estudo de caso Estrutura de tabelas (Hibernate)

39 Estudo de caso Implementação com Entity Beans Problemas
Documentação incompleta Nenhum exemplo completo Falta de suporte por parte da IDE Eclipse Inexistência de geradores de código automático (meta-dados) Sem informações quanto a geração automática de tabelas (presente na versão 2.1) Implementação seria mais trabalhosa do que sem Entity Beans

40 Análises Quanto a arquitetura Quanto a facilidade para implementações
Quanto a transparência Quanto a pesquisa de dados Problemas JDO

41 Análises Quanto a performance Inserção de dados

42 Análises Quanto a performance Consulta de dados
Consultar dados de todos os pacientes conveniados (nome, data de nascimento, número do convênio, nome do convênio, cpf e endereço) JDO segundos Hibernate segundos

43 Conclusões EJB Ainda não apresenta estrutura necessária para desenvolvimento de aplicações de forma eficiente JDO Simples, fácil de utilizar, eficiente, problemas críticos da especificação 1.0 resolvidos Apresentou vários problemas Não se mostrou confiável Problemas relacionados à implementação (JPOX)

44 Conclusões Hibernate Abrangente, flexível
Permite grande controle sobre a aplicação Pode funcionar de forma simples com as opções padrão Robusto Perda na performance Ferramenta equilibrada Tanto para aplicações simples quanto para complexas

45 Trabalhos futuros Análise de outras ferramentas
Ou outras versões destas mesmas Análise de aspectos específicos de camadas de persistência Arquitetura de transações Medição de desempenho Capacidade de expressão das linguagens de consulta Arquitetura de gerenciamento de identidade de objetos

46 Fim Comentários?


Carregar ppt "Camada de Persistência"

Apresentações semelhantes


Anúncios Google