Application Server &
EJB3
Wesley Gonçalves da Silva
[email protected]
http://balaprata.blogspot.com
JPA – Java Persistence
API
Visão Geral
JPA – O que é?
Uma especificação
Respeita o conceito básico do java com:
Implementação
De
Referência
Grupo Responsável:
JCP
Especificação:
JSR 220
3
JPA – O que é?
Sofreu fortes influências de frameworks criados pela
comunidade:
Hibernate, toplink, cocobase, iBats, ...
Veio junto da especificação JEE5 e é um os maiores
avanços da especificação como um todo:
Alto grau de abstração
Consegue ser de fato um framework
NÃO tem como requisito JEE: POSSO usar no JSE!
Comportamentos default
É simples 
POJO´s, Annotations, Testes...
4
JPA – Elementos básicos
Uma solução O/R deve ter 3 itens:
1) Forma facilitada para o mapeamento O-R;
2) Facilidade para o CRUD
3) Estrutura para consultas
5
JPA – Elementos básicos
EntityManagerFactory e EntityManager
META-INF/persistence.xml
@Entity e @Id em POJO´s
Interface Query (retornada por EntityManager.createQuery)
Aplicação
JPA
Provedor JPA
JDBC
SGBD
6
JPA – Acabou?
Existem uma série de itens da especificação
para nos ajudar no desenvolvimento de
nossas aplicações
Mapeamento objeto-relacional – Classes e
Atributos
Consultas
Callback Listeners
Entre outros
Contudo, a especificação também tem
limitações...
7
JPA – Java Persistence
API
EntityManager (I)
Qual o seu papel?
É o coração da JPA: Ele gerencia o ciclo de
vida das entidades
É através dela que serão realizadas as
operações de CRUD, consultas...
Objeto
Salvar
Recuperar
SQL
Entity
Manager
SGBD-R
Resultado
9
Exemplo de seus métodos
Method Summary
void
persist(Object entity)
Make an entity instance managed and persistent.
<T> T
find(Class<T> entityClass, Object primaryKey)
Find by primary key.
<T> T
merge(T entity)
Merge the state of the given entity into the current persistence context.
void
remove(Object entity)
Remove the entity instance.
Query
createNamedQuery(String name)
Create an instance of Query for executing a named query (in the Java Persistence query
language or in native SQL).
Query
createQuery(String qlString)
Create an instance of Query for executing a Java Persistence query language statement.
void
flush()
Synchronize the persistence context to the underlying database.
void
refresh(Object entity)
Refresh the state of the instance from the database, overwriting changes made to the entity, if
10
any.
Ciclo de vida de entidades
11
Ciclo de vida de entidades
Entidades Gerenciadas (managed)
O EntityManager tem certeza de que os dados
das entidades estão sincronizados com o
banco de dados
Um entidade torna-se gerenciada pelo
EntityManager: persist(), merge(), refresh()
12
Ciclo de vida de entidades
Entidades Separadas (detached)
Entidades que não são mais gerenciadas pelo
EntityManager, ou seja, não há garantia de
sincronia com o banco de dados
Ex.: Quando uma entidade é devolvida para a
camada web, tipicamente ela está detached
Instâncias de entidades tornam-se separadas
quando são serializadas ou clonadas
Um entidade torna-se detached pelo
EntityManager: remove(), clear() - força
entidades do contexto de persistência serem separadas
13
EntityManager fora do JEE
:
//obtém a instância de EntityManagerFactory e cria o EntityManger
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(“puAplicacao”);
EntityManager em = emf.createEntityManager();
try{
//cria a transação
EntityTransaction et = em.getTransaction();
et.begin();
//inicia a transação
em.persist(meuObjeto); //persiste - managed
et.commit();
//encerra a transação
}finally{
//libera os recursos
em.close();
emf.close();
}
14
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name=“puAplicacao" transaction-type="RESOURCE_LOCAL">
<class>br.com.Pessoa</class>
<properties>
<property name="hibernate.connection.driver_class"
value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.connection.username"
value="sa"/>
<property name="hibernate.connection.password"
value=""/>
<property name="hibernate.connection.url"
value="jdbc:hsqldb:hsql://localhost"/>
<property name="hibernate.dialect“
value="org.hibernate.dialect.HSQLDialect"/>
</properties>
</persistence-unit>
15
</persistence>
Exercícios
1) Cite os principais elementos da JPA e descrevaos brevemente.
2) Qual a sua opinião sobre o JPA gerenciar o ciclo
de vida das entidades?
16
JPA – Java Persistence
API
Visão Geral
Download

Nome da Matéria