Figura Q2. Adicionado persistência ao projeto.
Figura Q3. Configurando a conexão.
Figura Q4. Gerando as entidades.
36 Java Magazine•Edição 39
Edição 39
Edição 39•• Java Magazine Java Magazine 3737
jcp.org/abo
jcp.org/aboutJava/communityprocess/ utJava/communityprocess/
final/jsr220
final/jsr220
Especificação do EJB 3.0 e JPA
Especificação do EJB 3.0 e JPA
java.sun.com/developer/ java.sun.com/developer/ technicalArticles/J2EE/jpa technicalArticles/J2EE/jpa Introdução à JPA Introdução à JPA eclipse.org/dali eclipse.org/dali Dali JPA Tools
Dali JPA Tools
oracle.com/technology/products/ias/toplink
oracle.com/technology/products/ias/toplink Página do
Página do Oracle ToplinkOracle Toplink
glassfish.dev.java.net/javaee5/persistence/
glassfish.dev.java.net/javaee5/persistence/
entity-persistence-support.html
entity-persistence-support.html Sobre o suporte à persistência no projeto
Sobre o suporte à persistência no projeto
GlassFish GlassFish javamagazine.com.br/downloads/jm39/ javamagazine.com.br/downloads/jm39/ jm-jpa.zip jm-jpa.zip
Veiculo veiculo = new Veiculo(“ABC1234”);
Veiculo veiculo = new Veiculo(“ABC1234”);
manager.persist(veiculo);
manager.persist(veiculo);
A exclusão da entidade é feita através do
A exclusão da entidade é feita através do
método
métodoremove()remove()::
manager.remove(veiculo);
manager.remove(veiculo);
Consultas mais complexas são efetuadas
Consultas mais complexas são efetuadas
através da interface
através da interfaceQueryQuery. Como visto an-. Como visto an-
teriormente, o
teriormente, o EntityManagerEntityManager é responsável é responsável
por instanciar as
por instanciar as consultas, que podem serconsultas, que podem ser
tanto dinâmicas quanto estáticas. A seguin-
tanto dinâmicas quanto estáticas. A seguin-
te consulta estática lista todas as reservas
te consulta estática lista todas as reservas
existentes em um
existentes em um determinado período:determinado período:
@NamedQuery(name
@NamedQuery(name = = “Reserva.listarPorP“Reserva.listarPorPeriodo”eriodo”,,
query = “SELECT r FROM Reserva r WHERE “ +
query = “SELECT r FROM Reserva r WHERE “ +
“r.inicio
“r.inicio >= >= :inicio :inicio AND AND r.fim r.fim <= <= :fim”):fim”)
Para exibir as reservas do período basta
Para exibir as reservas do período basta
criar a consulta, preencher os parâmetros
criar a consulta, preencher os parâmetros
e executar o método
e executar o métodogetResultList()getResultList(). Não é ne-. Não é ne-
cessário efetuar joins com as tabelas
cessário efetuar joins com as tabelasVEICULOVEICULO
e
eCLIENTECLIENTE, pois a JPA já faz as agregaçõe, pois a JPA já faz as agregações auto-s auto-
maticamente a partir do mapeamento:
maticamente a partir do mapeamento:
Query query = manager.createNamedQuery(
Query query = manager.createNamedQuery(
“Reserva.listarPorPeriodo”);
“Reserva.listarPorPeriodo”);
query.setP
query.setParameter(“inicio”arameter(“inicio”, , formataData(“01/06/2006formataData(“01/06/2006”));”));
query.setP
query.setParameter(“fim”, arameter(“fim”, formataData(“01/08/2006formataData(“01/08/2006”));”));
List<Reserva> reservas =
List<Reserva> reservas = query.query.getResultList();getResultList();
for (Reserva reserva : reservas) {
for (Reserva reserva : reservas) {
System.ou
System.out.println(“ “ t.println(“ “ + + reserva);reserva);
}
}
A JPA também permite criar consultas
A JPA também permite criar consultas
complexas, incluindo sub-consultas e fun-
complexas, incluindo sub-consultas e fun-
ções agregadas. A consulta
ções agregadas. A consulta Reserva.ultimaReserva.ultima,,
por exemplo, seleciona a última reserva
por exemplo, seleciona a última reserva
cadastrada (a que possui maior código):
cadastrada (a que possui maior código):
@NamedQuery(name = “Reserva.ultima
@NamedQuery(name = “Reserva.ultima”,”,
query = “SELECT r FROM Reserva r WHERE r.codigo = “ +
query = “SELECT r FROM Reserva r WHERE r.codigo = “ +
“(SELECT
“(SELECT MAX(r1.codigo) MAX(r1.codigo) FROM FROM Reserva Reserva r1)”)r1)”)
Apoio de ferramentas
Apoio de ferramentas
É possível perceber que a
É possível perceber que a JPJPAA
oferece recursos avança-
oferece recursos avança-
dos de consulta
dos de consulta
e facilidades na execução de operações
e facilidades na execução de operações
CRUD
CRUD. Mas . Mas a extensão da a extensão da JPJPA e o A e o númeronúmero
de anotações e opções suportadas podem
de anotações e opções suportadas podem
tornar a API muitas vezes difícil de usar;
tornar a API muitas vezes difícil de usar;
não é fácil, por exemplo, conhecer todas
não é fácil, por exemplo, conhecer todas
as anotações e atributos envolvidos em
as anotações e atributos envolvidos em
um mapeamento O/R. Além disso, a co-
um mapeamento O/R. Além disso, a co-
dificação manual de mapeamento (anotar
dificação manual de mapeamento (anotar
entidades e propriedades) é um trabalho
entidades e propriedades) é um trabalho
geralmente maçante e propenso a erros.
geralmente maçante e propenso a erros.
Embora seja uma API nova, diversas
Embora seja uma API nova, diversas
ferramentas já ofere
ferramentas já oferecem apoio ao desenvol-cem apoio ao desenvol-
vimento com JPA, fornecendo comandos
vimento com JPA, fornecendo comandos
para mapeamento automático e recursos
para mapeamento automático e recursos
para edição de anotações. Essas ferra-
para edição de anotações. Essas ferra-
mentas aumentam a produtividade do
mentas aumentam a produtividade do
desenvolved
desenvolvedor e dimior e diminuem a possibilidadenuem a possibilidade
de erros.
de erros.
O NetBeans 5.5, atualmente em beta,
O NetBeans 5.5, atualmente em beta,
inclui vários wizards que auxiliam na
inclui vários wizards que auxiliam na
criação de entidades e na definição do
criação de entidades e na definição do
mapeamento e a geração do
mapeamento e a geração do persisten persistence.xmlce.xml..
Já o
Já o Eclipse Dali, um projeto da Eclipse Dali, um projeto da FundaçãoFundação
Eclipse, adiciona suporte a J
Eclipse, adiciona suporte a JPPA no Eclipse.A no Eclipse.
Veja um tutorial sobre o Dali no
Veja um tutorial sobre o Dali no quadroquadro
“Dali
“Dali JPA TJPA Tools”.ools”.
Conclusões
Conclusões
A Java Persistence API traz diversos bene-
A Java Persistence API traz diversos bene-
fícios para o desenvolvedor Java e para os
fícios para o desenvolvedor Java e para os
fabricantes de produtos relacionados à per-
fabricantes de produtos relacionados à per-
sistência de objetos. A criação de u
sistência de objetos. A criação de um padrãom padrão
basea
baseado do em em framewframeworks orks lídelíderes res de de mercamercadodo
incentiva o uso da API e facilita a migração
incentiva o uso da API e facilita a migração
de softwares existentes. Desenvolvedores
de softwares existentes. Desenvolvedores
com alguma vivência em ferramentas como
com alguma vivência em ferramentas como
Hibernate e Top
Hibernate e TopLink nLink não terão dificuldadesão terão dificuldades
em utilizar a nova API.
em utilizar a nova API.
Com um padrão de persistência, a escolha
Com um padrão de persistência, a escolha
de uma determinada implementação passa
de uma determinada implementação passa
a ser guiada por critérios como preço, ro-
a ser guiada por critérios como preço, ro-
bustez e
bustez e tradição tradição do fabdo fabricante, ricante, e não e não maismais
por operações suportadas por um fabricante
por operações suportadas por um fabricante
específ
específico ou simplicidade de mapeamentoico ou simplicidade de mapeamento
O/R provida por um framework.
O/R provida por um framework.
Os servidores de aplicações já
Os servidores de aplicações já iniciaraminiciaram
a incorporação do novo padrão e é só
a incorporação do novo padrão e é só
uma questão de tempo até que a JPA esteja
uma questão de tempo até que a JPA esteja
disponível para qualquer aplicação. Agora
disponível para qualquer aplicação. Agora
é aprofundar os conceitos e estar preparado
é aprofundar os conceitos e estar preparado
para o futuro quando ele chegar.
para o futuro quando ele chegar.
Edição 39
Edição 39•• Java Magazine Java Magazine 3737
André Dantas Rocha
André Dantas Rocha
(
(ad-rocha@uol.com.br ad-rocha@uol.com.br ) é mestre) é mestre
em Engenharia de Software pela
em Engenharia de Software pela
USP e arquiteto da Fidelity SA.
USP e arquiteto da Fidelity SA.
Sérgio Oliveira Kubota
Sérgio Oliveira Kubota
(
( sergio_kubota.@hotmail.co sergio_kubota.@hotmail.comm) é Pós-) é Pós-
Graduado em Objetos Distribuídos com
Graduado em Objetos Distribuídos com
Java pela FIAP e atua como arquiteto
Java pela FIAP e atua como arquiteto
de sistemas corporativos baseados nas
de sistemas corporativos baseados nas
tecnologias Java SE e EE, no segmento de inovações
tecnologias Java SE e EE, no segmento de inovações
tecnológicas da Caixa
tecnológicas da Caixa Econômica Federal.Econômica Federal.
jm39.indb
38
38 Java Magazine Java Magazine••Edição 39Edição 39
AJA
AJAX AX Avvançançadadoo
H
H
á algum tempo houve uma mudançaá algum tempo houve uma mudançasignificativa na forma como interagi-
significativa na forma como interagi-
mos com as aplicações web. Uma nova
mos com as aplicações web. Uma nova
tendência, denominada Web 2.0, tem mudado
tendência, denominada Web 2.0, tem mudado
nossas concepções sobre o paradigma
nossas concepções sobre o paradigmarequest/wait/ request/wait/
response
response, usado, usadona maioria dos sites tna maioria dos sites tradicionaisradicionais..
O conjunto de tecnologias AJAX (
O conjunto de tecnologias AJAX ( Async Asynchronoushronous
Java
JavaScrScript ipt and and XMXMLL)) tornou possível trazer àstornou possível trazer às
aplicações web recursos de aplicações desktop
aplicações web recursos de aplicações desktop
com que sonhávamos desde nossos
com que sonhávamos desde nossos
primeiros
primeiros websiteswebsites..
Uma grande divulgação
Uma grande divulgação
do AJAX aconteceu atra-
do AJAX aconteceu atra-
vés de aplicações criadas
vés de aplicações criadas
pelo Google, como Google
pelo Google, como Google
Maps e GMail, e a em-
Maps e GMail, e a em-
presa empresa vislum-
presa empresa vislum-
brou a necessidade de se
brou a necessidade de se
construir um framework
construir um framework
para facilitar o desen-
para facilitar o desen-
volvimento de aplicações
volvimento de aplicações
com AJAX. Foi assim que
com AJAX. Foi assim que
nasceu o Goog
nasceu o Google Web Tle Web Toolkitoolkit
(GWT).
(GWT).
Neste artigo abordaremos a
Neste artigo abordaremos a
constr
construção de uma aplicação AJução de uma aplicação AJAX queAX que
utiliza diversos componentes perso-
utiliza diversos componentes perso-
nalizados estendendo a API
nalizados estendendo a API
do GWT. Veremos como
do GWT. Veremos como
criar uma tabela pa-
criar uma tabela pa-
ginada com campos
ginada com campos
editáveis e uma cai-
editáveis e uma cai-
xa de diálogo per- xa de diálogo per- sonalizada, além sonalizada, além de demonstrar de demonstrar o gerenciamen- o gerenciamen- to de eventos e to de eventos e chamadas de chamadas de serviços para serviços para acesso a da- acesso a da-
dos. Para cada
dos. Para cada
c o m p o n e n t e c o m p o n e n t e a b o r d a r e m o s a b o r d a r e m o s particularidades particularidades
da API e dicas sobre
da API e dicas sobre