Upload
dale-schneider
View
29
Download
4
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
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 Objetivos
JDO Hibernate EJB Estudo de caso Análises Conclusão
Trabalhos Futuros
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”
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
Introdução
Bancos de dados orientados a objetoEliminam o problema do Impedance
MismatchFalta de padronizaçãoSistemas legados
Introdução
Camada de PersistênciaEncapsulam o banco de dadosSimulam acesso orientado a objetos,
independente do tipo de banco
Introdução
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
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.
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
JDO
Arquitetura:Define uma série de classes e interfaces
PersistenceManagerPersistenceCapableTransactionQuery, ...
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”
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
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));
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>
Hibernate
http://www.hibernate.orgVersão utilizada: 3.0Ferramenta gratuita e código livreGrande destaque na atualidadeNão é reconhecido como padrão
Hibernate
Arquitetura básica:
Hibernate
Classes:SessionFactorySessionTransaction
Classes que podem ser extendidasTransactionFactoryConnectionProvider
Hibernate
Ciclo de vida dos objetos:
Hibernate
Identidade de objetosChave primária
Nova classe ou atributoGerenciamento
Aplicação ou HibernateAlgoritmos de geração de chaves
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"));
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>
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
EJB
EJB 3.0Grandes mudançasSimplicidade
Annotations
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
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
EJB
EntityManagerCriar, remover, consultar, “contextos de
persistência”Ciclo de vida de um bean
NovoGerenciadoDesacopladoRemovido
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; }
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;
}
}
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();
Estudo de caso
Problema proposto
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
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)
Estudo de caso Aplicação final (JDO)
Estudo de caso Estrutura de tabelas (JDO)
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
Estudo de caso
Aplicação final (Hibernate)
Estudo de caso Estrutura de tabelas (Hibernate)
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
Análises
Quanto a arquiteturaQuanto a facilidade para
implementaçõesQuanto a transparênciaQuanto a pesquisa de dados
Problemas JDO
Análises Quanto a performance
Inserção de dados
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
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)
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
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
Fim
Comentários?