u05-persistência com jpa para jee

Upload: claudio-martins

Post on 05-Apr-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

  • 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.html
  • 7/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/DevelopJavaEE5App
  • 7/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/