SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
JPA – Java Persistence API
Persistência para aplicações Java SE e Java EE




       Adriano de Pinho Tavares
          Consultor / Arquiteto de Sistemas
              adriano@mgjug.com.br
2



                                         Palestrante

• Adriano de Pinho Tavares
         Especialista em Engenharia de Software pela UFMG
     >
         Bacharel em Ciência da Computação pela PUCMINAS
     >
         SCJA 1.0, SCJP 1.4, SCEA (part 1)
     >
         Membro Fundador do MGJUG
     >
         Consultor/Arquiteto de Sistemas - Squadra Tecnologia
     >




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
3



                                      Agenda Geral

•   Conceitos de mapeamento objeto/relacional (ORM)
•   Introdução à JPA – Java Persistence API
•   Eclipse Web Tools Platform Project 2.0
•   Demo Dali




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Conceitos de
mapeamento
objeto/relacional (ORM)
5

                     O que é mapeamento
                   Objeto/Relacional (ORM)?
• Mecanismo sofisticado para
  mapeamento de objetos
  Java em memória, para
  tabelas do banco de dados
• Permite persistir objetos em
  banco de dados relacionais
• Permite pesquisas
  complexas
• Permite debug e
  auditoria(log) das operações
  entre a aplicação e o banco
  de dados

MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
6

                     O que é mapeamento
                   Objeto/Relacional (ORM)?
  • Cada instância de objeto
    corresponde a um registro
    no banco de dados




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
7



                                        Agenda JPA

• JPA Requisitos de persistência
• JPA Modelo de programação
• Ciclo de vida de entidade e Gerente de Entidade
• Entidades Desacopladas
• Relacionamentos entre entidades
• Mapeamento Objeto/Relacional
• Listeners de entidades
• Consultas (Query)
• Transações
MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
JPA Requisitos
de persistência
9



          JPA Requisitos de persistência

• Simplificação do modelo de persistência
• Modelo de persistência leve (Light-weight)
     > Simplificação do modelo de programação e publicação
     > Melhoria de desempenho do ambiente de execução
• Testabilidade fora dos containers
     > Criação de clientes de testes usando entidades independentes
         dos containers
• Modelagem de domínio permitindo herança e
  polimorfismo
• Mapeamento Objeto/Relacional
• Melhoria das capacidades de pesquisa
MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
10



  Persistência para Java SE e Java EE

• Finalmente um consenso!
     > Padronização do mapeamento O/R
     > Fusão de experiência dos criadores do Hibernate, JDO,
       TopLink, fornecedores EJB e participações individuais
     > Suporte para implementações de persistência plugáveis, de
       diferentes fornecedores (análogo ao JDBC)
• Uso em containers Java EE e em ambiente Java SE




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
JPA Modelo de
programação
12



                  Origem do termo entidade

• O termo “Entidade” foi usado pela primeira vez em 1976
  quando Peter Chen propôs o modelo clássico de
  Entidade-Relacionamento em um dois papers que mais
  influenciaram a ciência da computação
     > “The Entity-Relationship Model – Toward a Unified View of
         Data” ACM Transactions on Database Systems, Março 1976




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
13



                                 Entidade na JPA

• Entidade é o objeto que pode ser gravado pelo
  mecanismo de persistência
• Entidades não são EJBs
     > São puramente locais e não podem ser acessadas
         diretamente de forma remota como os Entity Beans 2.x
• Toda entidade tem de ter um construtor sem argumentos
• Toda entidade tem de ter uma chave primária




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
14



                                   Chave primária

• Chave primária pode ser simples ou composta
• Chave primária pode ser mapeada para campo ou
  propriedade
     @Id private Long id;                          @Id public Long getId() {
                                                      return id;
                                                    }


• Suporte a chaves compostas
     > Deve ser definida uma classe para representar chave
         composta


MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
15



                      Entidade na JPA (cont.)

• Uma entidade JPA é um POJO anotado

                // @Entity é uma anotação
                // ela define a classe Cliente como uma
                // entidade persistente
                @Entity public class Cliente {
                    // atributos persistentes/transientes
                    // métodos de acesso
                    // métodos com lógica de persistência
                }


MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
16


                Exemplo inicial em Java EE

 @Entity public class Cliente {
                                                                  @Id define chave primária
    @Id private Long id;
    private String nome;
    private Endereco endereco;
    private Collection<Pedido> pedidos = new HashSet();

    // construtor sem argumentos
    public Cliente() {}

    public Long getId() {
      return id;
    }
                                                              Getters/setters para
    protected void setId (Long id) {
                                                              acessar o estado interno
      this.id = id;
    }
 ...
MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
17


       Exemplo inicial em Java EE (cont.)
   ...
                                                              Define relacionamento 1:n
                                                              com tabela Pedido
   @OneToMany
   public Collection<Pedido> getPedidos() {
     return pedidos;
   }

   public void setPedidos(Collection<Pedido> pedidos) {
     this.pedidos = pedidos;
   }

   // Outros métodos de negócio
   ...

   }




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
18



     Exemplo inicial em Java EE (cont.)
@Stateless public class CadastrarPedidos {

      // Injeção de dependência para Gerente de Entidade
      // definindo um contexto de persistência
      @PersistenceContext(name=”persistCxt”)
      EntityManager em;

      public void inserirPedido(int idCliente, Pedido novoPedido){

          // Uso do método find para buscar a entidade cliente
            Cliente c = em.find(Cliente.class, idCliente);

          // Insere um novo pedido
            c.getPedidos().add(novoPedido);
            novoPedido.setCliente(c);
      }
      // outros métodos de negócio
}


MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Ciclo de vida de
entidade
20



                    Ciclo de vida de entidade

• New
     – Criada usando a palavra-chave new
     – Não tem id persistente
• Managed
     – Tem um id persistente associado a um
       contexto de persistência
• Removed
     – Tem um id persistente associado a um
       contexto de persistência
     – Está escalonada para ser excluída do
       banco de dados
• Detached
     – Tem um id persistente, mas não está
       associada com um contexto de
       persistência
MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
21



                                    EntityManager

• Similar à funcionalidade do
  Hibernate Session, controla o ciclo
  de vida das entidades
• new()
     – Cria uma nova entidade
• persist()
     – Persiste uma entidade
• refresh()
     – Atualiza o estado da entidade
• remove()
     – Marca uma entidade para remoção
• merge()
     – Sincroniza o estado de entidades
       desacopladas


MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
22



                                    EntityManager

• Fabrica de objetos Query
     > createQuery()
        > cria uma instancia de query usando EJB QL
     > createNamedQuery()
        > cria uma instancia de query nomeada
     > createNativeQuery()
        > cria uma instancia de query usando SQL




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
23



Exemplo de operação de persistência

...


public Order createNewOrder(Customer customer) {
      Order order = new Order(customer);
      entityManager.persist(order);
      return order;
}


...



MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
24

 Exemplo de operações de pesquisa e
             remoção

...


public void removeOrder(Long orderId) {
      Order order = entityManager.find(Order.class, orderId);
      entityManager.remove(order);
}


...




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
25

      Exemplo de operação de alteração
                  (merge)

...


public OrderLine updateOrderLine(OrderLine orderLine) {
      return entityManager.merge(orderLine);
}


...




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Detached Entities
27



                                Detached Entities

• Entidades não associadas a um contexto de persistência
• Tem de implementar interface Serializable se o objeto
  desacoplado tem de ser enviado via rede
• Não há mais necessidade do padrão de desenho DTO
  (Data Transfer Object)




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Mapeamento
Objeto/Relacional
29



                               Mapeamento O/R

• Especificado usando anotações no código ou em um
  arquivo separado
• Conjunto de anotações, de fácil entendimento, para
  definir:
         Relacionamentos
     >
         Junções (Joins)
     >
         Tabelas e colunas de banco de dados
     >
         Geradores de seqüências de banco de dados (sequence,
     >
         autoincrement)




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
30



                        Mapeamentos simples

                                                                      CUSTOMER
                                                                                     PHOTO
                                                              ID   NAME   C_RATING


@Entity
 public class Customer {
    @Id
     int id;

         String name;

         int c_rating;

        @Lob
         Image photo;
 }



MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
31



                        Mapeamentos simples

                                                                      CUSTOMER
                                                                                   PHOTO
                                                              ID   NAME   CREDIT


@Entity
public class Customer {
       @Id
       int id;

       String name;
      @Column(name=“CREDIT”)
       int c_rating;
       @Lob
       Image photo;
}



MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
32



           Exemplos de mapeamentos O/R

@Entity
@Table(name=“TB_EMPLOYEEquot;)
public class EMPLOYEE {
   ...
   @Column(name=“TX_NAMEquot;, nullable=false, length=30)
   public String getName() { return name; }
}
                                                           Controle portável de concorrência
@Version
@Column(quot;OPTLOCKquot;)
protected int getVersionNum() { return versionNum; }


@ManyToOne
@JoinColumn(name=quot;ADDR_IDquot;)
public Address getAddress() { return address; }


  MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Listeners de Entidades
34



                       Listeners de entidades

• Listeners recebem chamadas do provedor de
  persistência
• Métodos Callback
     > Na própria classe de entidade ou em uma classe listener
       separada
     > Anotações
          > PrePersist / PostPersist
          > PreRemove/ PostRemove
          > PreUpdate / PostUpdate
          > PostLoad




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
35



  Listeners de entidades: Exemplo – 1
@Entity
@EntityListener(com.acme.AlertMonitor.class)
public class AccountBean implements Account {
   Long accountId;
   Integer balance;
   boolean preferred;
   public Long getAccountId() { ... }
   public Integer getBalance() { ... }

    …




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
36



   Listeners de entidades : Exemplo – 2
 …
 @PrePersist
 public void validateCreate() {
   if (getBalance() < MIN_REQUIRED_BALANCE)
       throw new AccountException(quot;Insufficient balance to
                                 open an accountquot;);
 }

 @PostLoad
 public void adjustPreferredStatus() {
   preferred =(getBalance() >=
                 AccountManager.getPreferredStatusLevel());
 }

 …
MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
37



    Listeners de entidades : Exemplo – 3

public class AlertMonitor {

       @PostPersist
       public void newAccountAlert(Account acct) {
         Alerts.sendMarketingInfo(acct.getAccountId(),
                                 acct.getBalance());
       }
}




    MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Relacionamentos entre
entidades
39



       Relacionamentos entre entidades

• Associações entre entidades
• Cardinalidades
         @OneToOne
     >
         @OneToMany
     >
         @ManyToOne
     >
         @ManyToMany
     >




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
40



               Comportamento em cascata
• Usado para propagar o efeito de uma operação à
  entidades associadas
• Operações em cascata executam somente quando as
  entidades estão associadas ao contexto de persistência
     > Se uma operação em cascata é aplicada a uma entidade
         detached, uma IllegalArgumentException é disparada
•   Cascade=PERSIST
•   Cascade=REMOVE
•   Cascade=MERGE
•   Cascade=REFRESH
•   Cascade=ALL

MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
41



                  Relacionamento: Exemplo
@Entity
public class Project {

      private Collection<Employee> employees;

      @ManyToMany(cascade={CascadeType.ALL})
      @JoinTable(name=“PROJ_EMP”)
      public Collection<Employee> getEmployees() {
         return employees;
      }

      public void setEmployees(Collection<Employee> employees) {
         this.employees = employees;
      }
...
}

MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Herança de entidade
43



                           Herança de entidade

• Estratégias de herança suportadas
     > Single Table
        > Todas as classes na hierarquia são mapeadas para uma tabela única
        > Um valor em um campo identifica a subclasse específica
     > Table per class
        > Cada classe na hierarquia é mapeada para uma tabela separada
        > Todas as propriedades das classes são mapeadas para colunas
          desta tabela incluindo as propriedades herdadas
     > Joined subclass
        > A raiz da hierarquia é representada por uma tabela e
        > Cada subclasse é representada por uma tabela separada que contém
          campos específicos para a subclasse e também as colunas que
          representam as suas chaves primárias

MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
44



       Exemplo de herança de entidade

    @Entity
    @Table(name=”CUST”)
    @Inheritance(strategy=SINGLE_TABLE)
    @DiscriminatorColumn(name=“CUST_TYPEquot;,
    discriminatorType=STRING)
    @DiscriminatorValue(“CUSTquot;)
    public class Customer {...}

    @Entity
    @Inheritance(discriminatorValue=”VCUST”)
    public class ValuedCustomer extends Customer{...}




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Consultas
46



                           Avanços do EJB QL

• Group By / Having
• Subqueries
• Funções SQL adicionais
     > UPPER, LOWER, TRIM, CURRENT_DATE, ...
• Joins
• Consultas polimórficas
• Suporte para pesquisas dinâmicas e também pesquisas
  nomeadas



MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
47



                                Dynamic Queries

  public List findWithName (String name) {
    return em.CreateQuery (
     “SELECT c FROM Customer c” +
     “WHERE c.name LIKE :custName”)
     .setParameter(“custName”, name)
     .setMaxResults(10)
     .getResultList();
  }




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
48



                                   Named Queries
@NamedQuery(
  name=“findCustomersByName”,
  queryString=“SELECT c FROM Customer c” +
        “WHERE c.name LIKE :custName”
)


@PersistenceContext public EntityManager em;
List customers =
em.createNamedQuery(“findCustomersByName”).setParameter(“cust
Name”, “smith”).getResultList();




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
49



                                              Resumo

• JPA é um dos maiores avanços do EJB 3.0
• JPA faz uso pesado de anotações
• JPA suporta persistência baseado em POJO
• JPA suporta ambos ambientes Java SE e Java EE
• JPA possui capacidades extensivas para criação de
  consultas
• JPA define um modelo de persistência simplificado




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Eclipse Web Tools Platform Project 2.0
http://wiki.eclipse.org/index.php/Web_Tools_Project
http://wiki.eclipse.org/index.php/JEE_5_Support
51



                                             WTP 2.0

• Próximo release do Eclipse Web Tools Project
• Previsão de lançamento no Eclipse Europa 2007, Junho
  2007
• Realinhamento para suporte completo ao JEE 5
     > Java EE 5 focado em facilitar desenvolvimento
     > JEE5 inclui todas as features do JEE 1.4 e melhorias




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
52



                                             WTP 2.0

• Suporte a JEE 5 inclui melhorias em:
     > Web Services
     > Web Applications
     > Enterprise Applications
     > Management (Relativo a servidores)




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
53



            WTP 2.0 – Suporte ao JEE 5.0

• Web Services API Baseada no JSR 109
• Axis2 integrado no WTP com as seguintes
  features:
     > JSR-224 JAX-WS 2.0 JAXB 2 SAAJ 1.3
     > JAX-RPC 1.1
     > JSR 181 Web Services Metadata
        > Classes Java anotadas para definição de Web Services




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
54



            WTP 2.0 – Suporte ao JEE 5.0

• Web Applications
     > Servlet 2.5 (JSR 154)
     > JSP 2.1 (JSR 245)
     > JSTL (JSR 52)
     > JSF 1.2




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
55



            WTP 2.0 – Suporte ao JEE 5.0

• Enterprise Applications
     > EJB3
     > JPA (JSR 220)
     > JCA 1.5 (JSR 112)




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
56



            WTP 2.0 – Suporte ao JEE 5.0

• Management (Relativo a servidores)
     > J2EE Application Deployment (JSR 88)
     > J2EE Management (JSR 77)
        > Gerenciamento de aplicações Web/Enterprise em
          servidores JEE 5




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
57



                                             WTP 2.0

• Web Tools 2.0 será baseado no Eclipse 3.3
• O Eclipse WTP é formado por quatro subprojetos.
         Web Standard Tools (WST)
     >
         J2EE Standard Tools (JST)
     >
         JPA (Dali, incubado)
     >
         Java Server Faces Tools (incubado)
     >
         AJAX Tools Framework (incubado)
     >
• O Dali, JSF e ATF sairão da incubadora e se tornarão
  componentes normais no WTP 2.0.



MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
Demo
Uma aplicação de exemplo utilizando JPA com plugin Dali
59

      (Salvador Dalí) The Persistence of
                Memory, 1931




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
60

  (Salvador Dalí) The desintegration of
       the persistence of memory




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
61



                                          Demo Dali

• Foco no uso do Dali para mapear classes para um banco
  relacional – detalhes da parte Web não serão discutidos.




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
62



                                          Demo Dali

• Criar banco de dados




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
63



                                          Demo Dali

• Criar conexão




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
64



                                          Demo Dali

• Criar projeto Java (Java Project)
         Adicionar persistência Java
     >
         Criar entidades Java persistentes
     >
         Associar as classes de entidade com as tabelas (Entity)
     >
         Criar mapeamentos básicos (Basic)
     >
         Criar mapeamentos um-para-um (one-to-one)
     >
         Criar mapeamentos de versão (version)
     >
         Adicionar as consultas (queries)
     >
         Gerenciar o arquivo persistence.xml
     >




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
65



                                          Demo Dali

• Criar teste unitário (JUnit 4.0)
     > Criar TestCase
     > Executar TestCase




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
66



                                          Demo Dali

• Criar projeto Web (Dynamic Web Project)
• Adicionar recursos
     > Associar o projeto do modelo
     > Adicionar arquivos do projeto
• Publicar aplicação




MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
67




             JPA – Java Persistence API
                       Persistência para aplicações Java SE e Java EE




                        Adriano de Pinho Tavares
                             Consultor / Arquiteto de Sistemas
                                 adriano@mgjug.com.br


MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007

Weitere ähnliche Inhalte

Ähnlich wie JPA - Java Persistence API: Persistência para aplicações Java SE e Java EE

Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBAdriano Teixeira de Souza
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeAdriano Tavares
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTAutomação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTelliando dias
 
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBPolis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBDanival Calegari
 
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EEJavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EELeonardo Zanivan
 
Certificacoes java
Certificacoes javaCertificacoes java
Certificacoes javaBruno Garcia
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 

Ähnlich wie JPA - Java Persistence API: Persistência para aplicações Java SE e Java EE (20)

JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Visão Geral de EJB 3.0
Visão Geral de EJB 3.0Visão Geral de EJB 3.0
Visão Geral de EJB 3.0
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento web
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJB
 
Aula JPA
Aula JPAAula JPA
Aula JPA
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java ee
 
GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTAutomação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
 
Compweek
CompweekCompweek
Compweek
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Vraptor 3
Vraptor 3Vraptor 3
Vraptor 3
 
Jj08 otimizacao
Jj08 otimizacaoJj08 otimizacao
Jj08 otimizacao
 
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBPolis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
 
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EEJavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
 
Certificacoes java
Certificacoes javaCertificacoes java
Certificacoes java
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 

Mehr von Adriano Tavares

Palestra Transformação Ágil - CBGPL 2019
Palestra Transformação Ágil - CBGPL 2019Palestra Transformação Ágil - CBGPL 2019
Palestra Transformação Ágil - CBGPL 2019Adriano Tavares
 
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de softwareTDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de softwareAdriano Tavares
 
Transformação ágil em uma grande empresa, um post-it por vez!
Transformação ágil em uma grande empresa, um post-it por vez! Transformação ágil em uma grande empresa, um post-it por vez!
Transformação ágil em uma grande empresa, um post-it por vez! Adriano Tavares
 
DevOps, por onde começar
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começarAdriano Tavares
 
Disciplined Agile Delivery - indo além do Scrum
Disciplined Agile Delivery - indo além do ScrumDisciplined Agile Delivery - indo além do Scrum
Disciplined Agile Delivery - indo além do ScrumAdriano Tavares
 
Arquitetura Ágil, uma abordagem disciplinada
Arquitetura Ágil, uma abordagem disciplinadaArquitetura Ágil, uma abordagem disciplinada
Arquitetura Ágil, uma abordagem disciplinadaAdriano Tavares
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de softwareAdriano Tavares
 
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Adriano Tavares
 
Modelagem de dados e objetos
Modelagem de dados e objetosModelagem de dados e objetos
Modelagem de dados e objetosAdriano Tavares
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Adriano Tavares
 

Mehr von Adriano Tavares (12)

Palestra Transformação Ágil - CBGPL 2019
Palestra Transformação Ágil - CBGPL 2019Palestra Transformação Ágil - CBGPL 2019
Palestra Transformação Ágil - CBGPL 2019
 
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de softwareTDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
 
Transformação ágil em uma grande empresa, um post-it por vez!
Transformação ágil em uma grande empresa, um post-it por vez! Transformação ágil em uma grande empresa, um post-it por vez!
Transformação ágil em uma grande empresa, um post-it por vez!
 
DevOps, por onde começar
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começar
 
Disciplined Agile Delivery - indo além do Scrum
Disciplined Agile Delivery - indo além do ScrumDisciplined Agile Delivery - indo além do Scrum
Disciplined Agile Delivery - indo além do Scrum
 
Arquitetura Ágil, uma abordagem disciplinada
Arquitetura Ágil, uma abordagem disciplinadaArquitetura Ágil, uma abordagem disciplinada
Arquitetura Ágil, uma abordagem disciplinada
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de software
 
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
 
Pangea 21-07-2009
Pangea 21-07-2009Pangea 21-07-2009
Pangea 21-07-2009
 
Modelagem de dados e objetos
Modelagem de dados e objetosModelagem de dados e objetos
Modelagem de dados e objetos
 
Gestao agil de projetos
Gestao agil de projetosGestao agil de projetos
Gestao agil de projetos
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1
 

JPA - Java Persistence API: Persistência para aplicações Java SE e Java EE

  • 1. JPA – Java Persistence API Persistência para aplicações Java SE e Java EE Adriano de Pinho Tavares Consultor / Arquiteto de Sistemas adriano@mgjug.com.br
  • 2. 2 Palestrante • Adriano de Pinho Tavares Especialista em Engenharia de Software pela UFMG > Bacharel em Ciência da Computação pela PUCMINAS > SCJA 1.0, SCJP 1.4, SCEA (part 1) > Membro Fundador do MGJUG > Consultor/Arquiteto de Sistemas - Squadra Tecnologia > MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 3. 3 Agenda Geral • Conceitos de mapeamento objeto/relacional (ORM) • Introdução à JPA – Java Persistence API • Eclipse Web Tools Platform Project 2.0 • Demo Dali MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 5. 5 O que é mapeamento Objeto/Relacional (ORM)? • Mecanismo sofisticado para mapeamento de objetos Java em memória, para tabelas do banco de dados • Permite persistir objetos em banco de dados relacionais • Permite pesquisas complexas • Permite debug e auditoria(log) das operações entre a aplicação e o banco de dados MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 6. 6 O que é mapeamento Objeto/Relacional (ORM)? • Cada instância de objeto corresponde a um registro no banco de dados MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 7. 7 Agenda JPA • JPA Requisitos de persistência • JPA Modelo de programação • Ciclo de vida de entidade e Gerente de Entidade • Entidades Desacopladas • Relacionamentos entre entidades • Mapeamento Objeto/Relacional • Listeners de entidades • Consultas (Query) • Transações MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 9. 9 JPA Requisitos de persistência • Simplificação do modelo de persistência • Modelo de persistência leve (Light-weight) > Simplificação do modelo de programação e publicação > Melhoria de desempenho do ambiente de execução • Testabilidade fora dos containers > Criação de clientes de testes usando entidades independentes dos containers • Modelagem de domínio permitindo herança e polimorfismo • Mapeamento Objeto/Relacional • Melhoria das capacidades de pesquisa MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 10. 10 Persistência para Java SE e Java EE • Finalmente um consenso! > Padronização do mapeamento O/R > Fusão de experiência dos criadores do Hibernate, JDO, TopLink, fornecedores EJB e participações individuais > Suporte para implementações de persistência plugáveis, de diferentes fornecedores (análogo ao JDBC) • Uso em containers Java EE e em ambiente Java SE MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 12. 12 Origem do termo entidade • O termo “Entidade” foi usado pela primeira vez em 1976 quando Peter Chen propôs o modelo clássico de Entidade-Relacionamento em um dois papers que mais influenciaram a ciência da computação > “The Entity-Relationship Model – Toward a Unified View of Data” ACM Transactions on Database Systems, Março 1976 MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 13. 13 Entidade na JPA • Entidade é o objeto que pode ser gravado pelo mecanismo de persistência • Entidades não são EJBs > São puramente locais e não podem ser acessadas diretamente de forma remota como os Entity Beans 2.x • Toda entidade tem de ter um construtor sem argumentos • Toda entidade tem de ter uma chave primária MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 14. 14 Chave primária • Chave primária pode ser simples ou composta • Chave primária pode ser mapeada para campo ou propriedade @Id private Long id; @Id public Long getId() { return id; } • Suporte a chaves compostas > Deve ser definida uma classe para representar chave composta MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 15. 15 Entidade na JPA (cont.) • Uma entidade JPA é um POJO anotado // @Entity é uma anotação // ela define a classe Cliente como uma // entidade persistente @Entity public class Cliente { // atributos persistentes/transientes // métodos de acesso // métodos com lógica de persistência } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 16. 16 Exemplo inicial em Java EE @Entity public class Cliente { @Id define chave primária @Id private Long id; private String nome; private Endereco endereco; private Collection<Pedido> pedidos = new HashSet(); // construtor sem argumentos public Cliente() {} public Long getId() { return id; } Getters/setters para protected void setId (Long id) { acessar o estado interno this.id = id; } ... MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 17. 17 Exemplo inicial em Java EE (cont.) ... Define relacionamento 1:n com tabela Pedido @OneToMany public Collection<Pedido> getPedidos() { return pedidos; } public void setPedidos(Collection<Pedido> pedidos) { this.pedidos = pedidos; } // Outros métodos de negócio ... } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 18. 18 Exemplo inicial em Java EE (cont.) @Stateless public class CadastrarPedidos { // Injeção de dependência para Gerente de Entidade // definindo um contexto de persistência @PersistenceContext(name=”persistCxt”) EntityManager em; public void inserirPedido(int idCliente, Pedido novoPedido){ // Uso do método find para buscar a entidade cliente Cliente c = em.find(Cliente.class, idCliente); // Insere um novo pedido c.getPedidos().add(novoPedido); novoPedido.setCliente(c); } // outros métodos de negócio } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 19. Ciclo de vida de entidade
  • 20. 20 Ciclo de vida de entidade • New – Criada usando a palavra-chave new – Não tem id persistente • Managed – Tem um id persistente associado a um contexto de persistência • Removed – Tem um id persistente associado a um contexto de persistência – Está escalonada para ser excluída do banco de dados • Detached – Tem um id persistente, mas não está associada com um contexto de persistência MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 21. 21 EntityManager • Similar à funcionalidade do Hibernate Session, controla o ciclo de vida das entidades • new() – Cria uma nova entidade • persist() – Persiste uma entidade • refresh() – Atualiza o estado da entidade • remove() – Marca uma entidade para remoção • merge() – Sincroniza o estado de entidades desacopladas MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 22. 22 EntityManager • Fabrica de objetos Query > createQuery() > cria uma instancia de query usando EJB QL > createNamedQuery() > cria uma instancia de query nomeada > createNativeQuery() > cria uma instancia de query usando SQL MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 23. 23 Exemplo de operação de persistência ... public Order createNewOrder(Customer customer) { Order order = new Order(customer); entityManager.persist(order); return order; } ... MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 24. 24 Exemplo de operações de pesquisa e remoção ... public void removeOrder(Long orderId) { Order order = entityManager.find(Order.class, orderId); entityManager.remove(order); } ... MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 25. 25 Exemplo de operação de alteração (merge) ... public OrderLine updateOrderLine(OrderLine orderLine) { return entityManager.merge(orderLine); } ... MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 27. 27 Detached Entities • Entidades não associadas a um contexto de persistência • Tem de implementar interface Serializable se o objeto desacoplado tem de ser enviado via rede • Não há mais necessidade do padrão de desenho DTO (Data Transfer Object) MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 29. 29 Mapeamento O/R • Especificado usando anotações no código ou em um arquivo separado • Conjunto de anotações, de fácil entendimento, para definir: Relacionamentos > Junções (Joins) > Tabelas e colunas de banco de dados > Geradores de seqüências de banco de dados (sequence, > autoincrement) MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 30. 30 Mapeamentos simples CUSTOMER PHOTO ID NAME C_RATING @Entity public class Customer { @Id int id; String name; int c_rating; @Lob Image photo; } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 31. 31 Mapeamentos simples CUSTOMER PHOTO ID NAME CREDIT @Entity public class Customer { @Id int id; String name; @Column(name=“CREDIT”) int c_rating; @Lob Image photo; } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 32. 32 Exemplos de mapeamentos O/R @Entity @Table(name=“TB_EMPLOYEEquot;) public class EMPLOYEE { ... @Column(name=“TX_NAMEquot;, nullable=false, length=30) public String getName() { return name; } } Controle portável de concorrência @Version @Column(quot;OPTLOCKquot;) protected int getVersionNum() { return versionNum; } @ManyToOne @JoinColumn(name=quot;ADDR_IDquot;) public Address getAddress() { return address; } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 34. 34 Listeners de entidades • Listeners recebem chamadas do provedor de persistência • Métodos Callback > Na própria classe de entidade ou em uma classe listener separada > Anotações > PrePersist / PostPersist > PreRemove/ PostRemove > PreUpdate / PostUpdate > PostLoad MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 35. 35 Listeners de entidades: Exemplo – 1 @Entity @EntityListener(com.acme.AlertMonitor.class) public class AccountBean implements Account { Long accountId; Integer balance; boolean preferred; public Long getAccountId() { ... } public Integer getBalance() { ... } … MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 36. 36 Listeners de entidades : Exemplo – 2 … @PrePersist public void validateCreate() { if (getBalance() < MIN_REQUIRED_BALANCE) throw new AccountException(quot;Insufficient balance to open an accountquot;); } @PostLoad public void adjustPreferredStatus() { preferred =(getBalance() >= AccountManager.getPreferredStatusLevel()); } … MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 37. 37 Listeners de entidades : Exemplo – 3 public class AlertMonitor { @PostPersist public void newAccountAlert(Account acct) { Alerts.sendMarketingInfo(acct.getAccountId(), acct.getBalance()); } } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 39. 39 Relacionamentos entre entidades • Associações entre entidades • Cardinalidades @OneToOne > @OneToMany > @ManyToOne > @ManyToMany > MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 40. 40 Comportamento em cascata • Usado para propagar o efeito de uma operação à entidades associadas • Operações em cascata executam somente quando as entidades estão associadas ao contexto de persistência > Se uma operação em cascata é aplicada a uma entidade detached, uma IllegalArgumentException é disparada • Cascade=PERSIST • Cascade=REMOVE • Cascade=MERGE • Cascade=REFRESH • Cascade=ALL MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 41. 41 Relacionamento: Exemplo @Entity public class Project { private Collection<Employee> employees; @ManyToMany(cascade={CascadeType.ALL}) @JoinTable(name=“PROJ_EMP”) public Collection<Employee> getEmployees() { return employees; } public void setEmployees(Collection<Employee> employees) { this.employees = employees; } ... } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 43. 43 Herança de entidade • Estratégias de herança suportadas > Single Table > Todas as classes na hierarquia são mapeadas para uma tabela única > Um valor em um campo identifica a subclasse específica > Table per class > Cada classe na hierarquia é mapeada para uma tabela separada > Todas as propriedades das classes são mapeadas para colunas desta tabela incluindo as propriedades herdadas > Joined subclass > A raiz da hierarquia é representada por uma tabela e > Cada subclasse é representada por uma tabela separada que contém campos específicos para a subclasse e também as colunas que representam as suas chaves primárias MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 44. 44 Exemplo de herança de entidade @Entity @Table(name=”CUST”) @Inheritance(strategy=SINGLE_TABLE) @DiscriminatorColumn(name=“CUST_TYPEquot;, discriminatorType=STRING) @DiscriminatorValue(“CUSTquot;) public class Customer {...} @Entity @Inheritance(discriminatorValue=”VCUST”) public class ValuedCustomer extends Customer{...} MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 46. 46 Avanços do EJB QL • Group By / Having • Subqueries • Funções SQL adicionais > UPPER, LOWER, TRIM, CURRENT_DATE, ... • Joins • Consultas polimórficas • Suporte para pesquisas dinâmicas e também pesquisas nomeadas MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 47. 47 Dynamic Queries public List findWithName (String name) { return em.CreateQuery ( “SELECT c FROM Customer c” + “WHERE c.name LIKE :custName”) .setParameter(“custName”, name) .setMaxResults(10) .getResultList(); } MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 48. 48 Named Queries @NamedQuery( name=“findCustomersByName”, queryString=“SELECT c FROM Customer c” + “WHERE c.name LIKE :custName” ) @PersistenceContext public EntityManager em; List customers = em.createNamedQuery(“findCustomersByName”).setParameter(“cust Name”, “smith”).getResultList(); MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 49. 49 Resumo • JPA é um dos maiores avanços do EJB 3.0 • JPA faz uso pesado de anotações • JPA suporta persistência baseado em POJO • JPA suporta ambos ambientes Java SE e Java EE • JPA possui capacidades extensivas para criação de consultas • JPA define um modelo de persistência simplificado MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 50. Eclipse Web Tools Platform Project 2.0 http://wiki.eclipse.org/index.php/Web_Tools_Project http://wiki.eclipse.org/index.php/JEE_5_Support
  • 51. 51 WTP 2.0 • Próximo release do Eclipse Web Tools Project • Previsão de lançamento no Eclipse Europa 2007, Junho 2007 • Realinhamento para suporte completo ao JEE 5 > Java EE 5 focado em facilitar desenvolvimento > JEE5 inclui todas as features do JEE 1.4 e melhorias MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 52. 52 WTP 2.0 • Suporte a JEE 5 inclui melhorias em: > Web Services > Web Applications > Enterprise Applications > Management (Relativo a servidores) MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 53. 53 WTP 2.0 – Suporte ao JEE 5.0 • Web Services API Baseada no JSR 109 • Axis2 integrado no WTP com as seguintes features: > JSR-224 JAX-WS 2.0 JAXB 2 SAAJ 1.3 > JAX-RPC 1.1 > JSR 181 Web Services Metadata > Classes Java anotadas para definição de Web Services MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 54. 54 WTP 2.0 – Suporte ao JEE 5.0 • Web Applications > Servlet 2.5 (JSR 154) > JSP 2.1 (JSR 245) > JSTL (JSR 52) > JSF 1.2 MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 55. 55 WTP 2.0 – Suporte ao JEE 5.0 • Enterprise Applications > EJB3 > JPA (JSR 220) > JCA 1.5 (JSR 112) MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 56. 56 WTP 2.0 – Suporte ao JEE 5.0 • Management (Relativo a servidores) > J2EE Application Deployment (JSR 88) > J2EE Management (JSR 77) > Gerenciamento de aplicações Web/Enterprise em servidores JEE 5 MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 57. 57 WTP 2.0 • Web Tools 2.0 será baseado no Eclipse 3.3 • O Eclipse WTP é formado por quatro subprojetos. Web Standard Tools (WST) > J2EE Standard Tools (JST) > JPA (Dali, incubado) > Java Server Faces Tools (incubado) > AJAX Tools Framework (incubado) > • O Dali, JSF e ATF sairão da incubadora e se tornarão componentes normais no WTP 2.0. MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 58. Demo Uma aplicação de exemplo utilizando JPA com plugin Dali
  • 59. 59 (Salvador Dalí) The Persistence of Memory, 1931 MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 60. 60 (Salvador Dalí) The desintegration of the persistence of memory MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 61. 61 Demo Dali • Foco no uso do Dali para mapear classes para um banco relacional – detalhes da parte Web não serão discutidos. MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 62. 62 Demo Dali • Criar banco de dados MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 63. 63 Demo Dali • Criar conexão MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 64. 64 Demo Dali • Criar projeto Java (Java Project) Adicionar persistência Java > Criar entidades Java persistentes > Associar as classes de entidade com as tabelas (Entity) > Criar mapeamentos básicos (Basic) > Criar mapeamentos um-para-um (one-to-one) > Criar mapeamentos de versão (version) > Adicionar as consultas (queries) > Gerenciar o arquivo persistence.xml > MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 65. 65 Demo Dali • Criar teste unitário (JUnit 4.0) > Criar TestCase > Executar TestCase MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 66. 66 Demo Dali • Criar projeto Web (Dynamic Web Project) • Adicionar recursos > Associar o projeto do modelo > Adicionar arquivos do projeto • Publicar aplicação MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
  • 67. 67 JPA – Java Persistence API Persistência para aplicações Java SE e Java EE Adriano de Pinho Tavares Consultor / Arquiteto de Sistemas adriano@mgjug.com.br MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007