PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.
-
Upload
andreia-henriques-de-abreu -
Category
Documents
-
view
214 -
download
1
Transcript of PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.
![Page 1: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/1.jpg)
PERSISTÊNCIA EM JAVA
Leo SilvaLeonardo MurtaLuiz Viana
![Page 2: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/2.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/3.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/4.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/5.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/6.jpg)
JDBC
![Page 7: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/7.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/8.jpg)
JDBC – Tipos de Driver
Fonte- http://www.argonavis.com.br
![Page 9: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/9.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/10.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/11.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/12.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/13.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/14.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/15.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/16.jpg)
JPA - Java Persistence API - Hibernate
Arquitetura
Fonte: http://www.hibernate.org
![Page 17: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/17.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/18.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/19.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/20.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/21.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/22.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/23.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/24.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/25.jpg)
Prevayler
![Page 26: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/26.jpg)
PrevaylerSnapshot
Sistema Prevalente
Memória
Snapshot
![Page 27: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/27.jpg)
PrevaylerTransações serializadas
◦Log.◦Startup/Recovery.
Sistema
Memória
SnapshotLog
Criar
AlterarRemov
er
![Page 29: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/29.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/30.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/31.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/32.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/33.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/34.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/35.jpg)
Dúvidas
?
![Page 36: PERSISTÊNCIA EM JAVA Leo Silva Leonardo Murta Luiz Viana.](https://reader036.fdocument.pub/reader036/viewer/2022062819/5706385e1a28abb8238fe842/html5/thumbnails/36.jpg)
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