7/31/2019 u05-Persistncia com JPA para JEE
1/49
UNID 5- Persistncia com JPAUNID 5- Persistncia com JPA
UNAMA Universidade da AmazniaPR-REITORIA DE PESQUISA, PS-GRADUAO E EXTENSOPS-GRADUAO LATO SENSUCurso de Especializao em Desenvolvimento de Sistemas Baseado em Software Livre
Desenvolvimento de Aplicaes Multicamadas
Prof. Cludio [email protected]
mailto:[email protected]:[email protected]7/31/2019 u05-Persistncia com JPA para JEE
2/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
2
AssuntosAssuntos
Mapeamento Objeto Relacional
JPA
Projeto com JPA
7/31/2019 u05-Persistncia com JPA para JEE
3/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
3
Mapeamento Objeto-Relacional
7/31/2019 u05-Persistncia com JPA para JEE
4/49Desenvolvimento de Aplicaes MulticamadasPro C o art ns
4
Mapeamento Objeto Relacional (ORM)Mapeamento Objeto Relacional (ORM) Bancos de Dados utilizam tabelas relacionais (linhas x colunas)
Sistemas OO utilizam objetos (instncias x atributos);
O Mapeamento Objeto Relacional (ORM) permite mapear(traduzir) as entidades e seus relacionamentos (tabelas) emObjetos;
Facilita a persistncia de dados a partir da manipulao dos
objetos.
7/31/2019 u05-Persistncia com JPA para JEE
5/49Desenvolvimento de Aplicaes MulticamadasPro C o art ns
5
Mapeamento Objeto Relacional (ORM)Mapeamento Objeto Relacional (ORM)
7/31/2019 u05-Persistncia com JPA para JEE
6/49Desenvolvimento de Aplicaes MulticamadasPro C o art ns
6
Mecanismos de PersistnciaMecanismos de Persistncia
O mecanismo de programar diretamente em JDBC permite teracesso direto s tabelas e utilizar a linguagem SQL para manipularos dados.
Neste caso, o programador deve mapear em cdigo os mecanismosde persistncia em objetos (CRUD), usando comandos SQL (insert,select, update e delete);
Os frameworks de persistncia se apresentam como mecanismosque simplicam a forma de tratar os objetos (dados), eliminando oureduzindo o uso de SQL.
Java prope uma API de referncia chamada Java Persistence API
(JPA); Existem vrias implementaes de JPA.
Hibernate apenas uma implementao de JPA.
7/31/2019 u05-Persistncia com JPA para JEE
7/49Desenvolvimento de Aplicaes Multicamadas
Pro C o art ns7
O JPAO JPA
O JPA oferece um modelo de persistncia
utilizando POJOs para o mapeamento objeto-relacional.
Embora desenvolvido para a EJB 3.0, como
parte da especificao JSR 220, JPA pode serutilizado em qualquer tipo de aplicao que noseja apenas em JEE (usando EJBs).
Utiliza anotaes para o mapeamento de
entidades.
Leia mais em http://docs.oracle.com/javaee/6/tutorial/doc/bnbpy.html
http://docs.oracle.com/javaee/6/tutorial/doc/bnbpy.htmlhttp://docs.oracle.com/javaee/6/tutorial/doc/bnbpy.html7/31/2019 u05-Persistncia com JPA para JEE
8/49Desenvolvimento de Aplicaes Multicamadas
Pro C o art ns8
Regras bsicas de mapeamento
7/31/2019 u05-Persistncia com JPA para JEE
9/49Desenvolvimento de Aplicaes Multicamadas
Pro C o art ns9
Entidade na JPAEntidade na JPA
Entidade (Entity) o objeto a ser manipulado pelo
mecanismo de persistncia. Com um objeto Entity podemos gravar, excluir, alterar e
consultar registros de um tabela de banco de dados.
Em Java, uma classe do tipo Entity deve ser um POJO,
com as seguintes caractersticas: classe pblica,
possuir um construtor sem argumentos
atributos privados, mtodos pblicos de acesso aos atributos (gets e sets).
Toda entidade deve ter um ou mais atributos pararepresentar a chave primria.
7/31/2019 u05-Persistncia com JPA para JEE
10/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
10
Entidade em JPAEntidade em JPA
Uma entidade JPA um POJO anotado
7/31/2019 u05-Persistncia com JPA para JEE
11/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
11
Conceitos bsico de JPAConceitos bsico de JPA
As entidades do modelo so POJOs.
POJO um classe java com atributos privados, construtorvazio e mtodos de acesso gets e sets.
Mapeamento objeto-relacional realizado com:
-
Configurao XML (no arquivo persistence.xml)- Anotaes (uso de cdigo anotado com @)
EntityManager centraliza a interao com o JPA
Persistence Unit define uma unidade de persistencia(do acesso a um banco de dados definido nopersistence.xml)
7/31/2019 u05-Persistncia com JPA para JEE
12/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
12
JPA Principais AnotaesJPA Principais Anotaes
@ informa ao JPA que a classe uma entidade e deve ser
persistida
@ (name=...) informa o nome da tabela que ir persistir aentidade
@ marca uma propriedade da classe como chave primria
identificador@ como gerar o id (chave primria)
@ (name=...) informa o nome da coluna que ir persistiro campo
@ (tipo) Data, Hora e Data+Hora
@ no persiste a coluna
7/31/2019 u05-Persistncia com JPA para JEE
13/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
13
Desenvolvimento de aplicaes JavaEEDesenvolvimento de aplicaes JavaEEcom EJB3 e JPA (usando web como cliente)com EJB3 e JPA (usando web como cliente)A arquitetura para aplicaes JEE baseadas na
web usando JPA segue o seguinte modelo emcamadas:
Veja mais em http://wiki.netbeans.org/DevelopJavaEE5App
http://wiki.netbeans.org/DevelopJavaEE5Apphttp://wiki.netbeans.org/DevelopJavaEE5App7/31/2019 u05-Persistncia com JPA para JEE
14/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
14
ExemploExemplo
Cliente Pedido
n1id
nomeendereco
id
datavalor...
7/31/2019 u05-Persistncia com JPA para JEE
15/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
15
ExemploExemplo
7/31/2019 u05-Persistncia com JPA para JEE
16/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
16
Exemplo JPA: Relacionamento 1-nExemplo JPA: Relacionamento 1-n
7/31/2019 u05-Persistncia com JPA para JEE
17/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
17
Exemplo JPA com um Stateless Session BeanExemplo JPA com um Stateless Session Bean
7/31/2019 u05-Persistncia com JPA para JEE
18/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
18
Gerao de Cdigo JPA em Netbeans 7
e Glassfish 3.1
7/31/2019 u05-Persistncia com JPA para JEE
19/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
19
Passos no NetbeansPassos no Netbeans
1)Definir a conexo com o banco de dados
2)Criar o projeto da Aplicao
3)Gerar as entidades e o arquivo de configurao(persistence.xml)
4)Gerar os controladores (DAO) de persistncia
7/31/2019 u05-Persistncia com JPA para JEE
20/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
20
Modelo do BancoModelo do Banco
Para o exemplo apresentado neste tutorial, deve ser
criado um banco de dados com as seguintes tabelas,representando uma aplicao para uma transportadorade cargas:
1N
7/31/2019 u05-Persistncia com JPA para JEE
21/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
21
Usando a conexo com o banco jdbc:derbyUsando a conexo com o banco jdbc:derby
Por praticidade, usaremos o banco sample que j vem definidono Netbeans e j est registrado (nomeado) no servio JNDI dopool de conexo do Glassfish.
Abra a aba Tabelas do esquema APP do sample. Em seguida,ative o atalho para Executar comando...
7/31/2019 u05-Persistncia com JPA para JEE
22/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
22
Executando o Script do BancoExecutando o Script do Banco
Abra o console do banco e execute os scripts
SQL a seguir.CREATE TABLE CIDADE (
COD_CIDADE INTEGER PRIMARY KEY,NOME VARCHAR(40),VALOR_FRETE NUMERIC(10,2)
);CREATE TABLE DESPACHO (
NUMERO_CONTROLE INTEGER PRIMARY KEY,NOME_CLIENTE VARCHAR(80),PESO_CARGA NUMERIC(10,2),COD_CIDADE INTEGER REFERENCES CIDADE,VALOR_PAGAR NUMERIC(10,2),DATA_DESPACHO DATE
);
7/31/2019 u05-Persistncia com JPA para JEE
23/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
23
Executando os comandos SQL...Executando os comandos SQL...Clique neste boto para
executar os comandos SQL
7/31/2019 u05-Persistncia com JPA para JEE
24/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
24
Populando a tabela CidadePopulando a tabela Cidade
Popule a tabela 'Cidade', rodando no console os
comandos abaixo:-- POPULAR A TABELA CIDADEINSERT INTO CIDADE VALUES (1,'RIO DE JANEIRO', 1500.0);INSERT INTO CIDADE VALUES (2,'SO PAULO', 1800.0);INSERT INTO CIDADE VALUES (3,'SO LUIZ', 600.0);INSERT INTO CIDADE VALUES (4,'RECIFE', 1200.0);INSERT INTO CIDADE VALUES (5,'SALVADOR', 2000.0);
Clique aqui para executar os comandos
7/31/2019 u05-Persistncia com JPA para JEE
25/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
25
Desconectando o bancoDesconectando o banco
No final do processo, desconecte o banco para
prosseguir na criao do projeto.
7/31/2019 u05-Persistncia com JPA para JEE
26/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
26
Criao do Projeto da Aplicao JEEcom JPA e Web
7/31/2019 u05-Persistncia com JPA para JEE
27/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
27
Criando os projetosCriando os projetos
O primeiro passo criar todos os mdulos do
projeto da aplicao corporativa que consiste em: Projeto da aplicao corporativa ExemploApp
Mdulo de biblioteca de classes interface da aplicao(ExemploApp-ejb)
Projeto da aplicao cliente web (ExemploApp-war)
7/31/2019 u05-Persistncia com JPA para JEE
28/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
28
Escolhendo o projetoEscolhendo o projeto
Em Arquivo Novo Projeto, escolha Aplicativo Corporativo
na categoria JavaEE
N L l d P j t
7/31/2019 u05-Persistncia com JPA para JEE
29/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
29
Nome e Local do ProjetoNome e Local do Projeto
Defina o nome do projeto (ExemploApp) e clique em
Prximo.
D fi i d id fi D fi i d id fi
7/31/2019 u05-Persistncia com JPA para JEE
30/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
30
Definio do servidor e configuraesDefinio do servidor e configuraes
O servidor o GlassFish. Certifique-se que estejammarcadas as opes Criar mdulo EJB e Criar mdulode aplicativo Web. Clique em Finalizar.
E t t d j tE t t d j t
7/31/2019 u05-Persistncia com JPA para JEE
31/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
31
Estrutura do projetoEstrutura do projeto
C i d l E tid d d b d d dC i d l E tid d d b d d d
7/31/2019 u05-Persistncia com JPA para JEE
32/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
32
Criando as classes Entidade do banco de dadosCriando as classes Entidade do banco de dados
Antes de tudo, precisamos criar as classes de entidade. Para aarquitetura JEE os Session Beans so responsveis por manipular os
dados. Os objetos Session Beans sero criados no projeto EJB.
Use o boto direito sobre o projeto ExemploApp-ejb e escolha "Novo >Classes de entidade do banco de dados ..."
C i d l E tid d d b d d dC i d l E tid d d b d d d
7/31/2019 u05-Persistncia com JPA para JEE
33/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
33
Criando as classes Entidade do banco de dadosCriando as classes Entidade do banco de dados
Selecione Fonte de Dados (boto de rdio) e na lista correspondentesuspensa, selecione Nova Fonte de Dados ...
Especifique o nome JNDI para ser "jdbc/exemploDS", e selecione "jdbc:derby :/ / localhost: 1527/sample [app em APP]", como a conexo debanco de dados e clique em OK.
C i d l E tid d d b d d dCriando as classes Entidade do banco de dados
7/31/2019 u05-Persistncia com JPA para JEE
34/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
34
Criando as classes Entidade do banco de dadosCriando as classes Entidade do banco de dados Na caixa de lista Tabelas Disponveis, selecione a tabela DESPACHO e
clique no boto Adicionarpara que ele aparea na caixa Tabelas
selecionadas (Note que a tabela relacionada, CIDADE tambm adicionado automaticamente) e clique em Prximo.
Criando as classes Entidade do banco de dadosCriando as classes Entidade do banco de dados
7/31/2019 u05-Persistncia com JPA para JEE
35/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
35
Criando as classes Entidade do banco de dadosCriando as classes Entidade do banco de dados Defina o nome do pacote (digite entidades), desmarque a opo Gerar
anotaes de consulta... e clique em Finalizar.
Criando as classes Entidade do banco de dadosCriando as classes Entidade do banco de dados
7/31/2019 u05-Persistncia com JPA para JEE
36/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
36
Criando as classes Entidade do banco de dadosCriando as classes Entidade do banco de dados
No final, o IDE Netbeans criar as classes entidadesanotadas com JPA, conforme visto na figura.
Criando o Bean de Sesso CidadeSession, para fornecer osCriando o Bean de Sesso CidadeSession, para fornecer os
7/31/2019 u05-Persistncia com JPA para JEE
37/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
37
, pp
mtodos CRUD de objetos de cidadesmtodos CRUD de objetos de cidades
Agora que temos as classes de entidade, o prximopasso criar o componente Session (Stateless) que irmanipular e fornecer as funcionalidades CRUD sobre osobjetos de cidades.
Nesta demonstrao, o componente cliente que usaessas funes so as pginas JSF. Um dos benefciosde se fazer isso (ou seja, para fornecer asfuncionalidades CRUD na camada EJB) a reutilizaoporque as mesmas funes podem ser usadas por maisde uma pgina JSF. Outros benefcios incluem a
escalabilidade, pois o container EJB pode ser facilmenteajustado e ampliado quando aumenta a carga deprocessamento no servidor.
Criando o Session Bean CidadeSessionCriando o Session Bean CidadeSession
7/31/2019 u05-Persistncia com JPA para JEE
38/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
38
Criando o Session Bean CidadeSessionCriando o Session Bean CidadeSession
Na visualizao Projetos, clique com boto direito sobre o projetoExemploApp-ejb e selecione "Novo Bean de Sesso".
Criando o Session Bean CidadeSession (2)Criando o Session Bean CidadeSession (2)
7/31/2019 u05-Persistncia com JPA para JEE
39/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
39
Criando o Session Bean CidadeSession (2)Criando o Session Bean CidadeSession (2)
Especifique o Nome do EJB como CustomerSession eo pacotecomo "ejb", e manter o resto das opes como padro (Semestado e Local). Clique em Finalizar.
Criando GErano Session BeanCriando GErano Session Bean
7/31/2019 u05-Persistncia com JPA para JEE
40/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
40
CidadeSession (2)CidadeSession (2) No editor de cdigo, boto direito do mouse selecione "Utilizar
Gerenciador de Entidade..".
A anotao @PersistenceContext(unitName = "ExemploApp-ejbPU") inserida automaticamente. Dessa forma, o EntityManager estpronto para ser usado.
Cdigo do Session Bean CidadeSessionCdigo do Session Bean CidadeSession
7/31/2019 u05-Persistncia com JPA para JEE
41/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
41
Cdigo do Session Bean CidadeSessionCdigo do Session Bean CidadeSession
Injeo de dependncia para aunidade de persistncia
Objeto para manipular dados daentidade
Definindo os mtodos CRUD noDefinindo os mtodos CRUD noCid d S i
7/31/2019 u05-Persistncia com JPA para JEE
42/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
42
CidadeSessionCidadeSession
Agora crie os mtodos CRUD (Create, Retrieve, Update
and Delete) para o Session Bean Com o atalho no editor do cdigo, selecione Adicionar
mtodo de negcio...
Adicionando mtodos de negcio noAdicionando mtodos de negcio noSS i B
7/31/2019 u05-Persistncia com JPA para JEE
43/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
43
SessionBeanSessionBean Informe o nome do mtodo de negcio, o tipo de retorno e os
parmetros..
Neste caso, estamos definindo o mtodo criar que corresponde ainserir os dados de um objeto entidade Cidade no banco de dados.
Adicionando mtodos de negcio noAdicionando mtodos de negcio noS i B (2)S i B (2)
7/31/2019 u05-Persistncia com JPA para JEE
44/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
44
SessionBean (2)SessionBean (2) Edite o cdigo, acrescentando a instruo no mtodo
criarque correponde ao comando para inserir os dadosdo objeto cidade no banco de dados:
em.persist(cidade);
Outros mtodos a acrescentar no SessionOutros mtodos a acrescentar no SessionBB
7/31/2019 u05-Persistncia com JPA para JEE
45/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
45
BeanBean
public List pesquisaTodos() {Query query = em.createNamedQuery("Cidade.findAll");return query.getResultList();
}
public Cidade pesquisa(Integer id) {
return em.find(Cidade.class, id);}
public Cidade edita(Cidade cidade) {return em.merge(cidade);
}public void delete(Integer id) {
Cidade cidade = em.find(Cidade.class, id);em.remove(cidade);
}
Criando uma aplicao web com ServletCriando uma aplicao web com Servlet
7/31/2019 u05-Persistncia com JPA para JEE
46/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
46
Criando uma aplicao web com Servletp
No projeto ExemploApp-war, crie o servletCadastrarCidade no pacote controle. Clique emFinalizar.
7/31/2019 u05-Persistncia com JPA para JEE
47/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
47
No cdigo do servlet, utilize o atalho para inserir o
cdigo Chamar Enterprise Bean....
7/31/2019 u05-Persistncia com JPA para JEE
48/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
48
Acrescente o cdigo no Servlet para incluir uma
cidade.
// receber os dadosCidade cidade = new Cidade();
cidade.setCodCidade(100);cidade.setNome("SANTARM");cidade.setValorFrete(new BigDecimal(1400.00));cidadeSession.criar(cidade);
System.out.println("Cidade criada");
RefernciasReferncias
7/31/2019 u05-Persistncia com JPA para JEE
49/49
Desenvolvimento de Aplicaes MulticamadasPro C o art ns
49
BURKE, Bill and MONSON-HAEFEL, Richard.
"Enterprise JavaBeans 3.0". O'Reilly. 5 ed. 2006.760 p.
Tecnologia JEE: http://docs.oracle.com/javaee/
Tutorial do JEE 6 :http://docs.oracle.com/javaee/6/tutorial/doc/
http://docs.oracle.com/javaee/6/tutorial/doc/http://docs.oracle.com/javaee/6/tutorial/doc/Top Related