Você está na página 1de 49

UNAMA Universidade da Amaznia PR-REITORIA DE PESQUISA, PS-GRADUAO E EXTENSO PS-GRADUAO LATO SENSU Curso de Especializao em Desenvolvimento de Sistemas Baseado

o em Software Livre

UNID 5

- Persistncia com JPA

Desenvolvimento de Aplicaes Multicamadas


Prof. Cludio Martins claudiomartins2000@gmail.com

Assuntos
Mapeamento Objeto Relacional JPA Projeto com JPA

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Mapeamento Objeto-Relacional

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

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) em Objetos;


Facilita a persistncia de dados a partir da manipulao dos

objetos.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Mapeamento Objeto Relacional (ORM)

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Mecanismos de Persistncia
O mecanismo de programar diretamente em JDBC permite ter

acesso direto s tabelas e utilizar a linguagem SQL para manipular os dados.


Neste caso, o programador deve mapear em cdigo os mecanismos

de persistncia em objetos (CRUD), usando comandos SQL (insert, select, update e delete);

Os frameworks de persistncia se apresentam como mecanismos

que simplicam a forma de tratar os objetos (dados), eliminando ou reduzindo 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.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

O JPA
O JPA oferece um modelo de persistncia

utilizando POJOs para o mapeamento objetorelacional.


Embora desenvolvido para a EJB 3.0, como

parte da especificao JSR 220, JPA pode ser utilizado em qualquer tipo de aplicao que no seja 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


Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Regras bsicas de mapeamento

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Entidade 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 para

representar a chave primria.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Entidade em JPA
Uma entidade JPA um POJO anotado

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

10

Conceitos bsico de JPA


As

entidades do modelo so POJOs.

POJO um classe java com atributos privados, construtor vazio 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 Persistence

centraliza a interao com o JPA

Unit define uma unidade de persistencia (do acesso a um banco de dados definido no persistence.xml)

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

11

JPA Principais Anotaes


@Entity

informa ao JPA que a classe uma entidade e deve ser persistida entidade informa o nome da tabela que ir persistir a

@Table(name=...) @Id

marca uma propriedade da classe como chave primria identificador como gerar o id (chave primria) (name=...) informa o nome da coluna que ir persistir (tipo) Data, Hora e Data+Hora no persiste a coluna

@GeneratedValue @Column

o campo

@Temporal @Transient

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

12

Desenvolvimento de aplicaes JavaEE com EJB3 e JPA (usando web como cliente)
A arquitetura para aplicaes JEE baseadas na

web usando JPA segue o seguinte modelo em camadas:

Veja mais em http://wiki.netbeans.org/DevelopJavaEE5App


Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

13

Exemplo

Cliente id nome endereco 1 n

Pedido id data valor...

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

14

Exemplo

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

15

Exemplo JPA: Relacionamento 1-n

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

16

Exemplo JPA com um Stateless Session Bean

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

17

Gerao de Cdigo JPA em Netbeans 7 e Glassfish 3.1

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

18

Passos 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

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

19

Modelo do Banco
Para o exemplo apresentado neste tutorial, deve ser

criado um banco de dados com as seguintes tabelas, representando uma aplicao para uma transportadora de cargas:

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

20

Usando a conexo com o banco jdbc:derby


Por praticidade, usaremos o banco sample que j vem definido

no Netbeans e j est registrado (nomeado) no servio JNDI do pool de conexo do Glassfish.


Abra a aba Tabelas do esquema APP do sample. Em seguida,

ative o atalho para Executar comando...

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

21

Executando 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 );

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

22

Executando os comandos SQL...


Clique neste boto para executar os comandos SQL

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

23

Populando a tabela Cidade


Popule a tabela 'Cidade', rodando no console os

comandos abaixo:
-- POPULAR A TABELA CIDADE INSERT 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

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

24

Desconectando o banco
No final do processo, desconecte o banco para

prosseguir na criao do projeto.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

25

Criao do Projeto da Aplicao JEE com JPA e Web

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

26

Criando 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)

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

27

Escolhendo o projeto
Em Arquivo Novo Projeto, escolha Aplicativo Corporativo

na categoria JavaEE

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

28

Nome e Local do Projeto


Defina o nome do projeto (ExemploApp) e clique em

Prximo.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

29

Definio do servidor e configuraes


O servidor o GlassFish. Certifique-se que estejam

marcadas as opes Criar mdulo EJB e Criar mdulo de aplicativo Web. Clique em Finalizar.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

30

Estrutura do projeto

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

31

Criando as classes Entidade do banco de dados


Antes de tudo, precisamos criar as classes de entidade. Para a

arquitetura 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 ..."

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

32

Criando as classes Entidade do banco de dados


Selecione Fonte de Dados (boto de rdio) e na lista correspondente

suspensa, 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 de banco de dados e clique em OK.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

33

Criando as classes Entidade do banco de dados


Na caixa de lista Tabelas Disponveis, selecione a tabela DESPACHO e

clique no boto Adicionar para que ele aparea na caixa Tabelas selecionadas (Note que a tabela relacionada, CIDADE tambm adicionado automaticamente) e clique em Prximo.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

34

Criando 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.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

35

Criando as classes Entidade do banco de dados


No final, o IDE Netbeans criar as classes entidades

anotadas com JPA, conforme visto na figura.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

36

Criando o Bean de Sesso CidadeSession, para fornecer os mtodos CRUD de objetos de cidades Agora que temos as classes de entidade, o prximo

passo criar o componente Session (Stateless) que ir manipular e fornecer as funcionalidades CRUD sobre os objetos de cidades.

Nesta demonstrao, o componente cliente que usa

essas funes so as pginas JSF. Um dos benefcios de se fazer isso (ou seja, para fornecer as funcionalidades CRUD na camada EJB) a reutilizao porque as mesmas funes podem ser usadas por mais de uma pgina JSF. Outros benefcios incluem a escalabilidade, pois o container EJB pode ser facilmente ajustado e ampliado quando aumenta a carga de processamento no servidor.
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

37

Criando o Session Bean CidadeSession


Na visualizao Projetos, clique com boto direito sobre o projeto

ExemploApp-ejb e selecione "Novo Bean de Sesso".

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

38

Criando o Session Bean CidadeSession (2)


Especifique o Nome do EJB como CustomerSession eo pacote

como "ejb", e manter o resto das opes como padro (Sem estado e Local). Clique em Finalizar.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

39

Criando GErano Session Bean CidadeSession (2) "Utilizar No editor de cdigo, boto direito do mouse selecione
Gerenciador de Entidade..".
A anotao @PersistenceContext(unitName = "ExemploApp-ejbPU")

inserida automaticamente. Dessa forma, o EntityManager est pronto para ser usado.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

40

Cdigo do Session Bean CidadeSession


Injeo de dependncia para a unidade de persistncia

Objeto para manipular dados da entidade

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

41

Definindo os mtodos CRUD no CidadeSession


Agora crie os mtodos CRUD (Create, Retrieve, Update

and Delete) para o Session Bean


mtodo de negcio...

Com o atalho no editor do cdigo, selecione Adicionar

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

42

Informe o nome do mtodo de negcio, o tipo de retorno e os

Adicionando mtodos de negcio no SessionBean


inserir os dados de um objeto entidade Cidade no banco de dados.

parmetros..
Neste caso, estamos definindo o mtodo criar que corresponde a

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

43

Edite o cdigo, acrescentando a instruo no mtodo

Adicionando mtodos de negcio no SessionBean (2)

criar que correponde ao comando para inserir os dados do objeto cidade no banco de dados:
em.persist(cidade);

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

44

Outros mtodos a acrescentar no Session Bean


public List<Cidade> 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); }
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

45

Criando uma aplicao web com Servlet


No projeto ExemploApp-war, crie o servlet

CadastrarCidade no pacote controle. Clique em Finalizar.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

46

No cdigo do servlet, utilize o atalho para inserir o

cdigo Chamar Enterprise Bean....

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

47

Acrescente o cdigo no Servlet para incluir uma

cidade.

// receber os dados Cidade cidade = new Cidade(); cidade.setCodCidade(100); cidade.setNome("SANTARM"); cidade.setValorFrete(new BigDecimal(1400.00)); cidadeSession.criar(cidade); System.out.println("Cidade criada");

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

48

Referncias
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/

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

49

Você também pode gostar