1 / 46

Camada de Persistência

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. Tópicos. Introdução Contextualização Problema Solução

Download Presentation

Camada de Persistência

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 • 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 1.1.0-beta-1 • http://www.jpox.org • 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: • SessionFactory • Session • Transaction • Classes que podem ser extendidas • TransactionFactory • ConnectionProvider

  19. Hibernate • Ciclo de vida dos objetos:

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

  21. Hibernate • Seleção de dados • OID • Navegação • HQL • Criteria • SQL • Exemplos: 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" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <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 • “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 • 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 • 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 3.468 segundos • Hibernate 2.656 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?

More Related