persistÊncia em java leo silva leonardo murta luiz viana

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

Upload: andreia-henriques-de-abreu

Post on 07-Apr-2016

214 views

Category:

Documents


1 download

TRANSCRIPT

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