Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon...

46
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

Transcript of Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon...

Page 1: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 2: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Tópicos

Introdução Contextualização Problema Solução Objetivos

JDO Hibernate EJB Estudo de caso Análises Conclusão

Trabalhos Futuros

Page 3: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Introdução

ContextualizaçãoCrescimento da indústria de softwaresBusca por novas técnicasProliferação das tecnologias orientadas a

objetoBancos de dados relacionais consolidadosModelos de dados diferentes

“Impedance Mismatch”

Page 4: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 5: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Introdução

Bancos de dados orientados a objetoEliminam o problema do Impedance

MismatchFalta de padronizaçãoSistemas legados

Page 6: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Introdução

Camada de PersistênciaEncapsulam o banco de dadosSimulam acesso orientado a objetos,

independente do tipo de banco

Page 7: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Introdução

Page 8: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 9: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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.

Page 10: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 11: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

JDO

Arquitetura:Define uma série de classes e interfaces

PersistenceManagerPersistenceCapableTransactionQuery, ...

Page 12: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

JDO

Enxertador de códigoProblema crítico na especificação 1.0

Problemas com debuggingBaseia-se nas declarações de meta-dados Inserção de byte-codes nos arquivos

“.class”

Page 13: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 14: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

JDO

Seleção de dadosJDOQLSQLAtravés do OIDNavegaçãoExtent

Exemplo de seleção utilizando JDOQLQuery q = pm.newQuery (Empregado.class, “salario > sal”);q.declareParameters (“Float sal”);Collection empregados = (Collection) q.execute (new Float (1000.0));

Page 15: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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>

Page 16: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Hibernate

http://www.hibernate.orgVersão utilizada: 3.0Ferramenta gratuita e código livreGrande destaque na atualidadeNão é reconhecido como padrão

Page 17: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Hibernate

Arquitetura básica:

Page 18: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Hibernate

Classes:SessionFactorySessionTransaction

Classes que podem ser extendidasTransactionFactoryConnectionProvider

Page 19: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Hibernate

Ciclo de vida dos objetos:

Page 20: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Hibernate

Identidade de objetosChave primária

Nova classe ou atributoGerenciamento

Aplicação ou HibernateAlgoritmos de geração de chaves

Page 21: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 22: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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>

Page 23: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 24: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

EJB

EJB 3.0Grandes mudançasSimplicidade

Annotations

Page 25: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 26: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 27: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

EJB

EntityManagerCriar, remover, consultar, “contextos de

persistência”Ciclo de vida de um bean

NovoGerenciadoDesacopladoRemovido

Page 28: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 29: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

}

Page 30: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

EJB

Seleção de dadosEJBQLSQLMétodos da interface “Home”, como na

versão 2.1Exemplo 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();

Page 31: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Estudo de caso

Problema proposto

Page 32: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Estudo de caso

MetodologiaClasses Java -> Banco de dados

Modelagem do problema pensando nas classes e não no meio persistente

Menor esforço para um programadorMenos conhecimento sobre banco de dados

necessário

Page 33: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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)

Page 34: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Estudo de caso Aplicação final (JDO)

Page 35: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Estudo de caso Estrutura de tabelas (JDO)

Page 36: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 37: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Estudo de caso

Aplicação final (Hibernate)

Page 38: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Estudo de caso Estrutura de tabelas (Hibernate)

Page 39: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 40: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Análises

Quanto a arquiteturaQuanto a facilidade para

implementaçõesQuanto a transparênciaQuanto a pesquisa de dados

Problemas JDO

Page 41: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Análises Quanto a performance

Inserção de dados

Page 42: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Análises

Quanto a performanceConsulta 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 segundosHibernate 2.656 segundos

Page 43: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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)

Page 44: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 45: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

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

Page 46: Camada de Persistência Estudo comparativo entre EJB, JDO e Hibernate Aluno: Thiago Antônio Marafon Orientador: Prof. Dr. Leandro José Komosinski Membros.

Fim

Comentários?