persistÊncia em java leo silva leonardo murta luiz viana
TRANSCRIPT
PERSISTÊNCIA EM JAVA
Leo SilvaLeonardo MurtaLuiz 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
IntroduçãoO suporte a persistência em Java
foi desenvolvido visando simplificar, melhorar e padronizar as aplicações em Java.
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
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.
JDBC
O que é API?
É um conjunto de interfaces implementadas no Driver que garantem a independência da aplicação com o banco de dados utilizado.
JDBC – Tipos de Driver
Fonte- http://www.argonavis.com.br
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");
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.
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
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;
JPA - Java Persistence API O que é?
◦Padrão de persistência e mapeamento objeto/relacional Java.
◦Implementado por diversos frameworks de Persistência.
JPA - Java Persistence API Características
◦ Anotações◦ JPA-QL◦ NamedQuerys◦ POJOs◦ …
Provedores de Persistência
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
JPA - Java Persistence API - Hibernate
Arquitetura
Fonte: http://www.hibernate.org
JPA - Java Persistence API - Hibernate
Ciclo de Vida
Fonte: http://jonysberg.files.wordpress.com/2007/07/hibernate3.gif
JPA - Java Persistence API - Hibernate
• Anotações: o @Entity, @Table, @Column, @Transient, @Id,
@OneToOne…
JPA - Java Persistence API - Hibernate
EntityManager◦Responsável pelo gerenciamento das
entidades.◦Centralizador das operações (query
e persistência)◦Persist◦Merge◦Update◦Remove
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()
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();
JPA - Java Persistence API
Fonte: http://terrazadearavaca.blogspot.com/2008/12/jpa-implementations-comparison.html
• Comparação entre os Provedores de Persistência
PrevaylerCriado por brasileiros (Klaus
Wuestefeld).Conceito de Prevalência.EUA e Alemanha.Totalmente Orientado a Objeto.
PrevaylerMotivação
◦Memória RAM barata;◦Trabalhar com bancos relacionais
não é fácil;◦Bancos OO têm baixo desempenho
em grandes aplicações.
Prevayler
PrevaylerSnapshot
Sistema Prevalente
Memória
Snapshot
PrevaylerTransações serializadas
◦Log.◦Startup/Recovery.
Sistema
Memória
SnapshotLog
Criar
AlterarRemov
er
PrevaylerVantagens
◦Licenças SGBD mais caro do que custo de adquirir memória RAM;
◦Qualquer linguagem OO;◦Tudo a cargo do programador.
PrevaylerDesvantagens
◦O sistema limita-se ao tamanho da memória RAM;
◦Maior esforço no planejamento do sistema;
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
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
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
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.
Dúvidas
?
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