PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

36
PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana

Transcript of PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Page 1: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

PERSISTÊNCIA EM JAVA

Leo SilvaLeonardo MurtaLuiz Viana

Page 2: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Agenda Introdução JDBC JPA (Java Persistence API)

◦ O que é JPA?◦ Provedores de Persistência◦ Hibernate◦ Comparação

Prevayler◦ O que é Prevayler?◦ Motivação◦ Snapshot◦ Transações◦ Exemplo

Conclusão

Page 3: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

IntroduçãoO suporte a persistência em Java

foi desenvolvido visando simplificar, melhorar e padronizar as aplicações em Java.

Page 4: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

IntroduçãoBaseia-se nas melhores idéias de

tecnologias de persistência como:◦ Hibernate◦ TopLink◦ OpenJPA◦ Eclipselink

Um único padrão de persistência, com uma liberdade de escolher a sua implementação

Page 5: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JDBC (Java Database Connectivity)

Conjunto de classes e interfaces, que manipula dados persistentes.

Conexão com qualquer Banco de Dados relacional.

É uma API Java, ou seja, apenas uma especificação.

Page 6: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JDBC

Page 7: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

O que é API?

É um conjunto de interfaces implementadas no Driver que garantem a independência da aplicação com o banco de dados utilizado.

Page 8: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JDBC – Tipos de Driver

Fonte- http://www.argonavis.com.br

Page 9: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JDBC - DriverCarregar Driver JDBC• É preciso carregar a classe do driver na

aplicação que irá utilizá-lo.• Isto pode ser feito com Class.forName():• Exemplo:•

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");• Class.forName(“org.postgresql.Driver");

Page 10: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JDBC - Principais classes (pacote java.sql)

DriverManager - gerencia o driver e cria uma conexão com o banco.

Connection - é a classe que representa a conexão com o bando de dados.

Statement - controla e executa uma instrução SQL.

PreparedStatement - controla e executa uma instrução SQL. É melhor que Statement.

ResultSet - contém o conjunto de dados retornado por uma consulta SQL.

ResultsetMetaData - é a classe que trata dos metadados do banco.

Page 11: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JDBC - VantagensPode-se escrever um único programa

que será capaz de enviar instruções SQL para o banco de dados correto.

É uma API independente de SGBD

Page 12: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JDBC - O que faz JDBC lhe dá condições de realizar

basicamente três operações:◦Estabelecer uma conexão com um

banco de dados relacional;◦Enviar instruções SQL;◦Listar e processar os dados;

Page 13: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API O que é?

◦Padrão de persistência e mapeamento objeto/relacional Java.

◦Implementado por diversos frameworks de Persistência.

Page 14: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API Características

◦ Anotações◦ JPA-QL◦ NamedQuerys◦ POJOs◦ …

Provedores de Persistência

Page 15: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API - Hibernate

Framework pioneiro de persistência e mapeamento objeto/relacional.

Hibernate 3Passou a seguir especificação JPA.Arquitetura Interceptor/Callback.Uso de anotações Java 5.HQL

Page 16: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API - Hibernate

Arquitetura

Fonte: http://www.hibernate.org

Page 17: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API - Hibernate

Ciclo de Vida

Fonte: http://jonysberg.files.wordpress.com/2007/07/hibernate3.gif

Page 18: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API - Hibernate

• Anotações: o @Entity, @Table, @Column, @Transient, @Id,

@OneToOne…

Page 19: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API - Hibernate

EntityManager◦Responsável pelo gerenciamento das

entidades.◦Centralizador das operações (query

e persistência)◦Persist◦Merge◦Update◦Remove

Page 20: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API - Hibernate

HQL (Hibernate Query Language)◦Select a from Aluno a◦Select a from Aluno a where a.id = :id◦from Aluno a where a = getAluno()

Exemplo de execução◦Query query =

getEntityManager().createQuery(“from Aluno a where a = :a”)

◦query.setParamenter(“a”,entity.getAluno())◦Aluno aluno =

(Aluno)query.getSingleResult()

Page 21: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API - Hibernate

NamedQuerys@NamedQuery(name="Aluno.findAll", query="Select a from Aluno a");@NamedQueries({@NamedQuery(name="Aluno.findAll", query="Select a from Aluno a"),@NamedQuery(name="Aluno.findById", query=”Select a from Aluno a where a.id=:id"))};Exemplo de execução

Query query = getEntityManager().createNamedQuery(“Aluno.findById”);query.setParameter(”id", entity.getAluno().getId());Aluno aluno =(Aluno) query.getSingleResult();

Page 22: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

JPA - Java Persistence API

Fonte: http://terrazadearavaca.blogspot.com/2008/12/jpa-implementations-comparison.html

• Comparação entre os Provedores de Persistência

Page 23: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

PrevaylerCriado por brasileiros (Klaus

Wuestefeld).Conceito de Prevalência.EUA e Alemanha.Totalmente Orientado a Objeto.

Page 24: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

PrevaylerMotivação

◦Memória RAM barata;◦Trabalhar com bancos relacionais

não é fácil;◦Bancos OO têm baixo desempenho

em grandes aplicações.

Page 25: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Prevayler

Page 26: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

PrevaylerSnapshot

Sistema Prevalente

Memória

Snapshot

Page 27: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

PrevaylerTransações serializadas

◦Log.◦Startup/Recovery.

Sistema

Memória

SnapshotLog

Criar

AlterarRemov

er

Page 28: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Prevayler

fonte: http://www.prevayler.org

Page 29: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

PrevaylerVantagens

◦Licenças SGBD mais caro do que custo de adquirir memória RAM;

◦Qualquer linguagem OO;◦Tudo a cargo do programador.

Page 30: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

PrevaylerDesvantagens

◦O sistema limita-se ao tamanho da memória RAM;

◦Maior esforço no planejamento do sistema;

Page 31: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Prevayler

public class Pessoa implements Serializable {

private String nome;

public Pessoa(String nome) { this.nome = nome;} public String getNome() {return nome;}public void setNome(String nome) {this.nome = nome;}

}

public class ListaPessoas implements Serializable {

private ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();

//metodos add e remove

}

Exemplo

Page 32: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Prevayler

public class AdicionaPessoa implements Transaction {

private String nome;

public AdicionaPessoa(String nome) { super(); this.nome = nome;

} public void executeOn(Object system,

Date arg1) {((ListaPessoas)system).add(new

Pessoa(nome)); } }

Exemplo

Page 33: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Prevayler

PrevaylerFactory factory = new PrevaylerFactory();factory.configurePrevalentSystem(new ListaPessoas());Prevayler prevayler = null; try { prevayler = factory.create();

prevayler.execute(new AdicionaPessoa(“Leo”)); } catch (Exception e) { e.printStackTrace(); }

Exemplo

Page 34: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

ConclusãoJava dispõe de diversas opções para persistência e mapeamento de dados O/R, portanto, para obter os melhores resultados, a utilização de cada tecnologia/framework deve ser analisada e aplicada considerando os requisitos e contexto da aplicação envolvida.

Page 35: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Dúvidas

?

Page 36: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.

Referências [IFRN] JDBC

http://dietinf.ifrn.edu.br/doku.php?id=corpodocente:alessandro [JDBC] www.dimap.ufrn.br/~flavia.delicato/JDBC.pdf [PROVIDERS COMPARISON]

http://terrazadearavaca.blogspot.com/2008/12/jpa-implementations-comparison.html

[SUN] http://java.sun.com/developer/technicalArticles/J2EE/jpa/ [Hibernate] http://www.hibernate.org [Prevayler] Site Oficial

http://www.prevayler.org [Pamplona] Pamplona, Vitor

http://vitorpamplona.com/wiki/Tutorial%20Prevayler%202 [UFRGS] Saloon UFRGS

https://saloon.inf.ufrgs.br/twiki/viewfile/Disciplinas/Old/PODWebSis2004/WEB04Prevayler?rev=1.1;filename=WEB04Prevayler.pdf