SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Java Persistent API



Auteur : PEREZ Noël
        nperez@hinnoya.fr
Date : Octobre 2009
Plan
 ●   Principes des Frameworks de persistence
 ●   Historique
 ●   JPA 1.0
 ●   JPA 2.0
 ●   Demo
 ●   Questions?



JUG Lyon / oct 2009   Java Persistent API      2
BIO
                                                            Noël Perez

 ●   Architecte Java chez Hinnoya
                                                   http://www.hinnoya.fr
 ●   Formateur :
      ●   Java/JEE/Struts/Hibernate ( bientôt JPA )
                                          http://www.proatis.fr
 ●   Auteur :
      ●   Article sur JPA paru dans linuxdevjournal mi 2008

                                              http://www.pere-nono.net
JUG Lyon / oct 2009          Java Persistent API                       3
Groupe Hinnoya
   Hinnoya Centre Est
   Centre de services informatique Lyonnais

               Pôle .Net                        Pôle Php                   Pôle Java

      Technos :       ASP/C#,         Technos :        Symphony,     Technos : JEE,
                      DotNetNuke,                      Joomla,                 Struts,
                      …                                PHP5,                   Spring / SEAM,
                                                       …                       GWT,
                                                                               ...


      Délégation de compétences                  Conseil            Centre de services




  Organisme de formation agrée           ●Formation téchnologique     ●Bureautique
                                         ●Gestion de projet           ●Applicatif métier




JUG Lyon / oct 2009                           Java Persistent API                               4
Plan
 ●   Principes des Frameworks de persistence
 ●   Historique
 ●   JPA 1.0
 ●   JPA 2.0
 ●   Démo
 ●   Questions?




JUG Lyon / oct 2009   Java Persistent API      5
●
                                                    Principes
                                                   ●Historique
                                                   ●JPA 1.0



                      Problématique                ●JPA 2.0

                                                   ●Démo

                                                   ●Questions?




 ●   Application inconcevable sans sauvegarde des
     données
 ●   Beaucoup de codes répétitifs :
      ●   ouverture de connexions,
      ●   gestion de requêtes multiples,
      ●   traitement du résultat, …

 ●   Sauvegarde porte sur des objets métiers
          → 1 objet métier = 1 table

JUG Lyon / oct 2009          Java Persistent API          6
●
                                                     Principes
                                                    ●Historique
                                                    ●JPA 1.0



                      Problème gestion JDBC         ●JPA 2.0

                                                    ●Démo

                                                    ●Questions?




 ●   Besoin d'experts pour créer schémas et
     requêtes de la base,
 ●   difficulté à maintenir ce même schéma et ces
     requêtes,
      ●   Opérations coûteuses
      ●   Peu d’intérêt, très répétitive


 ●   dépendance vis à vis de la base initiale
     → peut nuire à la montée en charge d'une
     application.
JUG Lyon / oct 2009           Java Persistent API          7
●
                                                               Principes
                                                              ●Historique
                                                              ●JPA 1.0



                         Couches                              ●JPA 2.0

                                                              ●Démo

                                                              ●Questions?




                                  Utilisateurs



                        Couche interface utilisateur ( UI )

                                 Couche métier

                      Couche d'accès aux données ( DAO )




                             Couche de persistence




                                      JDBC



                             Base de données




JUG Lyon / oct 2009             Java Persistent API                  8
●
                                                  Principes

                  Solution : frameworks de       ●Historique
                                                 ●JPA 1.0

                                                 ●JPA 2.0




                         persistence
                                                 ●Démo

                                                 ●Questions?




●    Travail à partir de POJO

●    Ajout d’informations permettant de mapper les
     propriétés d’objets avec les colonnes des tables

●    Possibilité de demander à sauver un objet, le
     supprimer, le mettre à jour

●    Possibilité d’interroger la base en manipulant
     les objets ( pur java )
JUG Lyon / oct 2009        Java Persistent API          9
●
                                                         Principes
                                                        ●Historique
                                                        ●JPA 1.0



                      Principe technique                ●JPA 2.0

                                                        ●Démo

                                                        ●Questions?




 ●   1 classe à persister = 1 description du mode
                            persistance
      ●   Indique la table
      ●   Indique les correspondances de champs
            –   Type
            –   Obligation
            –   Clé
            –   Lien avec d’autres objets
 ●   1 fichier de configuration générale décrivant
     l’accès à la base de données
JUG Lyon / oct 2009               Java Persistent API         10
Plan
 ●   Principes des Frameworks de persistence
 ●   Historique
 ●   JPA 1.0
 ●   JPA 2.0
 ●   Démo
 ●   Questions?




JUG Lyon / oct 2009      Java Persistent API   11
●Principes
                                                                                         ●Historique
                                                                                         ●JPA 1.0



                                      Historique                                         ●JPA 2.0

                                                                                         ●Démo

                                                                                         ●Questions?

                                                                               JPA2
                                                                               Final draft mars 2009

                                                           JPA:mai 2006


                                           JDO2.0:2005


                                                                  Hibernate 3.5.0.Beta-1 août.2009
            JDO : 2002


                                                    Hibernate3.0 : fin 2004

                      Hibernate0.8 : fin 2001


   EJB1.0


JUG Lyon / oct 2009                         Java Persistent API                                12
●Principes
                                                  ●Historique
                                                  ●JPA 1.0



                      Participant JSR 317         ●JPA 2.0

                                                  ●Démo

                                                  ●Questions?




JUG Lyon / oct 2009         Java Persistent API         13
Plan
 ●   Principes des Frameworks de persistence
 ●   Historique
 ●   JPA 1.0
 ●   JPA 2.0
 ●   Demo
 ●   Questions?




JUG Lyon / oct 2009      Java Persistent API   14
●Principes
                                                                                                                               ●Historique
                                                                                                                               ●JPA 1.0



                                                       Couches                                                                 ●JPA 2.0

                                                                                                                               ●Démo

                                                                                                                               ●Questions?




                                       Utilisateurs



                             Couche interface utilisateur ( UI )
                                                                                       Simple POJO avec des annotations
                                      Couche métier                                        pour gérer la persistance
                           Couche d'accès aux données ( DAO )

             Appel aux fonctions de persistance              Objets persistants

                                            JPA                                      Ajout dans le code de l'application des
                                                                                     sauvegardes, chargement ou requete
                              Hibernate/OpenJPA/TopLink/...                          vers les objets persistant

                                           JDBC



                                  Base de données




JUG Lyon / oct 2009                                            Java Persistent API                                                   15
●Principes
                                                                                                ●Historique
                                                                                                ●JPA 1.0



                                         Cycle de vie                                           ●JPA 2.0

                                                                                                ●Démo

                                                                                                ●Questions?




        Nouvelle
        instance



                                          Transient


                                remove            persist
                                detach



                      refresh             Persistant
                                                                          Récupération par le
                                                 Fermeture du context /    garbage collector
                                                 serialisation
                                 merge




                                           Détaché




JUG Lyon / oct 2009                           Java Persistent API                                     16
●Principes
                                                                                         ●Historique
                                                                                         ●JPA 1.0



           Injections ( callback method )                                                ●JPA 2.0

                                                                                         ●Demo

                                                                                         ●Questions?




                      Instanciation

                           @PrePersist,@PostPersist

         @PostLoad
                                         @PreRemove
                                                                           @PostRemove
                       Persistant                            Suppression
       @PreUpdate,
       @PostUpdate




                        Détaché




JUG Lyon / oct 2009                    Java Persistent API                                     17
●Principes
                                                        ●Historique
                                                        ●JPA 1.0



                      Injections 2/2                    ●JPA 2.0

                                                        ●Démo

                                                        ●Questions?




 ●   Tient compte de l'héritage
      ●   Les injections classe mère en dernier
      ●   Possible de désactiver les appels de la classe mère
 ●   Tient compte de l'ordre dans le fichier ( même
     injection présente plusieurs fois )




JUG Lyon / oct 2009         Java Persistent API               18
●Principes
                                              ●Historique
                                              ●JPA 1.0



                      Requetage               ●JPA 2.0

                                              ●Démo

                                              ●Questions?




 ●   SQL

 ●   JPQL

select distinct joueur
from Club club,
  Personne joueur
where joueur member of club.organisateurs

JUG Lyon / oct 2009     Java Persistent API         19
●Principes
                                                ●Historique
                                                ●JPA 1.0



                 Fonctionnalités standards      ●JPA 2.0

                                                ●Démo

                                                ●Questions?




 ●   Lazy strategie sur les Fetch
 ●   Traitement en cascade
 ●   Gestion des transactions
 ●   Lock d'objet




JUG Lyon / oct 2009       Java Persistent API         20
●Principes
                                                    ●Historique
                                                    ●JPA 1.0



                      Autres fonctionnalités        ●JPA 2.0

                                                    ●Démo

                                                    ●Questions?




 ●   Création de requêtes nommées ( Named
     Queries )




JUG Lyon / oct 2009           Java Persistent API         21
Plan
 ●   Principes des Frameworks de persistence
 ●   Historique
 ●   JPA 1.0
 ●   JPA 2.0
 ●   Démo
 ●   Questions?




JUG Lyon / oct 2009      Java Persistent API   22
●Principes
                                                    ●Historique
                                                    ●JPA 1.0



                          JPQL                      ●
                                                     JPA 2.0
                                                    ●Démo

                                                    ●Questions?




           Aucune nouveauté depuis la version 1.0




JUG Lyon / oct 2009       Java Persistent API             23
●Principes
                                                  ●Historique
                                                  ●JPA 1.0



                      Criteria API 1/3            ●
                                                   JPA 2.0
                                                  ●Démo

                                                  ●Questions?




 ●   Requetage en objet
 ●   Construction de requêtes dynamiques très
     aisée
 ●   Voir modification après coup

 ●   2 modes de création :
      ●   Metamodel
      ●   Réference aux attributs


JUG Lyon / oct 2009         Java Persistent API         24
●Principes
                                                                   ●Historique
                                                                   ●JPA 1.0



                         Criteria 2/3                              ●
                                                                    JPA 2.0
                                                                   ●Démo

                                                                   ●Questions?




En utilisant le metamodel :

   CriteriaQuery q = qb.create();
Root<Customer> cust = q.from(Customer.class);
Join<Order, Item> item =
cust.join(Customer_.orders).join(Order_.lineitems);
q.select(cust.get(Customer_.name))
.where(
qb.equal(item.get(Item_.product).get(Product_.productType),
"printer"));

Order est un objet et la correspondance de sa classe dans le metamodel est
Order_
JUG Lyon / oct 2009            Java Persistent API                       25
●Principes
                                                   ●Historique
                                                   ●JPA 1.0



                      Criteria 3/3                 ●
                                                    JPA 2.0
                                                   ●Démo

                                                   ●Questions?




 ●   En utilisant les réferences aux attributs :

QueryBuilder qb = ...
CriteriaQuery q = qb.create();
Root<Customer> cust = q.from(Customer.class);
Join<Order, Item> item =
cust.join("orders").join("lineitems");
q.select(cust.get("name"))
.where(
qb.equal(item.get("product").get("productType"),
"printer"));
JUG Lyon / oct 2009        Java Persistent API           26
●Principes
                                                 ●Historique
                                                 ●JPA 1.0



                      Cached API                 ●
                                                  JPA 2.0
                                                 ●Démo

                                                 ●Questions?




@Entity
@Table(schema="jpa", name = "participe")
@Cacheable(true)
public class Participe {



Dans persistence.xml : <caching>ALL</caching>
 ●   ALL
 ●   NONE
 ●   ENABLE_SELECTIVE
 ●   DISABLE_SELECTIVE
JUG Lyon / oct 2009        Java Persistent API         27
●Principes
                                                                           ●Historique
                                                                           ●JPA 1.0



            Validation ( javax.validation )                                ●
                                                                            JPA 2.0
                                                                           ●Démo

                                                                           ●Questions?




 ●   Optionnel
            –   TraversableResolver accessible par l'EntityManager
            –   @valid
 ●   javax.persistence.ValidationMode
            –   Auto ( defaut ) : validation utilisée si présente sans exeception
            –   Callback : validation obligatoire
            –   None
 ●   Completée par la JSR-303 ( Bean validation )


JUG Lyon / oct 2009                  Java Persistent API                         28
●Principes
                                                     ●Historique
                                                     ●JPA 1.0



                      Autres nouveautés              ●
                                                      JPA 2.0
                                                     ●Démo

                                                     ●Questions?




 ●   Apparition de la méthode ”detach”
      ●Passe objet en transient
 ●   Changement de signification de la méthode ”remove”
      ●Supprime les entrées associées en base
 ●   cascade=DETACH
 ●   ValidatorFactory
 ●   Possibilité d'accéder au metamodel ( disponible avec
     hibernate mais pas en JPA1 )


JUG Lyon / oct 2009        Java Persistent API              29
●Principes
                                                             ●Historique
                                                             ●JPA 1.0



            Implementations disponibles                      ●
                                                              JPA 2.0
                                                             ●Démo

                                                             ●Questions?




 ●   OpenJPA2.0 - 12/2009 ( Geronimo / Weblogic )
      ●    Version déjà disponible et fonctionnelle ( partiel )
 ●   Hibernate - ( JbossAS-5.2.0.Beta1 - non grand
     public )
      ●    preview disponible, non fonctionnelle JPA2
 ●   Glassfish V3 ( preview était disponible )
 ●   EclipseLink2.0 11/2009
 ●   ...

JUG Lyon / oct 2009            Java Persistent API                 30
Plan
 ●   Principes des Frameworks de persistence
 ●   Historique
 ●   JPA 1.0
 ●   JPA 2.0
 ●   Démo
 ●   Questions?




JUG Lyon / oct 2009      Java Persistent API   31
●Principes
                                                                    ●Historique
                                                                    ●JPA 1.0



                       Démo : architecture                          ●JPA 2.0

                                                                    ●Démo

                                                                    ●Questions?




             JVM1.6

               OPENJPA
                                                            MySQL
                      BasketExample




JUG Lyon / oct 2009                   Java Persistent API                 32
●Principes
                                                ●Historique
                                                ●JPA 1.0



                      Démo : modèle             ●JPA 2.0

                                                ●Démo

                                                ●Questions?




JUG Lyon / oct 2009       Java Persistent API         33
●Principes
                                                                          ●Historique
                                                                          ●JPA 1.0



                      Pour aller plus loin                                ●JPA 2.0

                                                                          ●Demo

                                                                          ●Questions?




References :
      ●   JSR 220: Enterprise JavaBeansTM,Version 3.0
      ●   JSR 317: JavaTM Persistence API, Version 2.0
Outils :
      ●   OpenJPA: http:/ openjpa.apache.org/
                         /
Articles sur JPA :
      ●   Initiation : Java Persistence API : Persistance universelle –
          linuxdevjournal – Perez N.
      ●   Avancé :
          http://java.sun.com/javaee/5/docs/tutorial/doc/bnbpz.html

JUG Lyon / oct 2009               Java Persistent API                           34
A vous de jouer :

                         Question?




JUG Lyon / oct 2009       Java Persistent API   35

Contenu connexe

En vedette

Designing JEE Application Structure
Designing JEE Application StructureDesigning JEE Application Structure
Designing JEE Application Structureodedns
 
Java EE Pattern: Entity Control Boundary Pattern and Java EE
Java EE Pattern: Entity Control Boundary Pattern and Java EEJava EE Pattern: Entity Control Boundary Pattern and Java EE
Java EE Pattern: Entity Control Boundary Pattern and Java EEBrockhaus Consulting GmbH
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Ryan Cuprak
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014Ryan Cuprak
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Heithem Abbes
 
TAEE 2010:DOCENCIA NO PRESENCIAL: CAMPUS ANDALUZ VIRTUAL Y LA ASIGNATURA ELEC...
TAEE 2010:DOCENCIA NO PRESENCIAL: CAMPUS ANDALUZ VIRTUAL Y LA ASIGNATURA ELEC...TAEE 2010:DOCENCIA NO PRESENCIAL: CAMPUS ANDALUZ VIRTUAL Y LA ASIGNATURA ELEC...
TAEE 2010:DOCENCIA NO PRESENCIAL: CAMPUS ANDALUZ VIRTUAL Y LA ASIGNATURA ELEC...JUAN AGUILAR
 
Atelier pour le CJD Paris : Baby boomers, génération X, génération Y
Atelier pour le CJD Paris : Baby boomers, génération X, génération YAtelier pour le CJD Paris : Baby boomers, génération X, génération Y
Atelier pour le CJD Paris : Baby boomers, génération X, génération YRaphaëlle Camous
 
Frans vakantiefoto's
Frans vakantiefoto'sFrans vakantiefoto's
Frans vakantiefoto'sxCharlotte
 
Proyecto final tabares 9e camilo
Proyecto final tabares 9e camiloProyecto final tabares 9e camilo
Proyecto final tabares 9e camiloAligi321
 
Jazz festival Billets gratuits
Jazz festival Billets gratuitsJazz festival Billets gratuits
Jazz festival Billets gratuitsBâle Région Mag
 
Wat rong-khun-thailande
Wat rong-khun-thailandeWat rong-khun-thailande
Wat rong-khun-thailandeSaqqarah 31
 
Vincent van-gogh
Vincent van-goghVincent van-gogh
Vincent van-goghLuc Fayard
 
¿Cómo son las revistas científicas españolas en WoS y Scopus?
¿Cómo son las revistas científicas españolas en WoS y Scopus?¿Cómo son las revistas científicas españolas en WoS y Scopus?
¿Cómo son las revistas científicas españolas en WoS y Scopus?Ernest Abadal
 
201303 - Golo
201303 - Golo201303 - Golo
201303 - Gololyonjug
 
Presentacion Analitica Universidad Granada 2010
Presentacion Analitica Universidad Granada 2010Presentacion Analitica Universidad Granada 2010
Presentacion Analitica Universidad Granada 2010Sempatiza
 
Trouver le Thème WordPress Idéal
Trouver le Thème WordPress IdéalTrouver le Thème WordPress Idéal
Trouver le Thème WordPress IdéalNicolas Richer
 
Weekly actions
Weekly actions Weekly actions
Weekly actions Cherradi -
 
2015 ea-oe-field operator-fr
2015 ea-oe-field operator-fr2015 ea-oe-field operator-fr
2015 ea-oe-field operator-frEventattitude
 

En vedette (20)

Designing JEE Application Structure
Designing JEE Application StructureDesigning JEE Application Structure
Designing JEE Application Structure
 
Java EE Pattern: Entity Control Boundary Pattern and Java EE
Java EE Pattern: Entity Control Boundary Pattern and Java EEJava EE Pattern: Entity Control Boundary Pattern and Java EE
Java EE Pattern: Entity Control Boundary Pattern and Java EE
 
Java EE Pattern: The Boundary Layer
Java EE Pattern: The Boundary LayerJava EE Pattern: The Boundary Layer
Java EE Pattern: The Boundary Layer
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
TAEE 2010:DOCENCIA NO PRESENCIAL: CAMPUS ANDALUZ VIRTUAL Y LA ASIGNATURA ELEC...
TAEE 2010:DOCENCIA NO PRESENCIAL: CAMPUS ANDALUZ VIRTUAL Y LA ASIGNATURA ELEC...TAEE 2010:DOCENCIA NO PRESENCIAL: CAMPUS ANDALUZ VIRTUAL Y LA ASIGNATURA ELEC...
TAEE 2010:DOCENCIA NO PRESENCIAL: CAMPUS ANDALUZ VIRTUAL Y LA ASIGNATURA ELEC...
 
Atelier pour le CJD Paris : Baby boomers, génération X, génération Y
Atelier pour le CJD Paris : Baby boomers, génération X, génération YAtelier pour le CJD Paris : Baby boomers, génération X, génération Y
Atelier pour le CJD Paris : Baby boomers, génération X, génération Y
 
Frans vakantiefoto's
Frans vakantiefoto'sFrans vakantiefoto's
Frans vakantiefoto's
 
Proyecto final tabares 9e camilo
Proyecto final tabares 9e camiloProyecto final tabares 9e camilo
Proyecto final tabares 9e camilo
 
Jazz festival Billets gratuits
Jazz festival Billets gratuitsJazz festival Billets gratuits
Jazz festival Billets gratuits
 
Wat rong-khun-thailande
Wat rong-khun-thailandeWat rong-khun-thailande
Wat rong-khun-thailande
 
Vincent van-gogh
Vincent van-goghVincent van-gogh
Vincent van-gogh
 
mc private test
mc private testmc private test
mc private test
 
¿Cómo son las revistas científicas españolas en WoS y Scopus?
¿Cómo son las revistas científicas españolas en WoS y Scopus?¿Cómo son las revistas científicas españolas en WoS y Scopus?
¿Cómo son las revistas científicas españolas en WoS y Scopus?
 
201303 - Golo
201303 - Golo201303 - Golo
201303 - Golo
 
Presentacion Analitica Universidad Granada 2010
Presentacion Analitica Universidad Granada 2010Presentacion Analitica Universidad Granada 2010
Presentacion Analitica Universidad Granada 2010
 
Trouver le Thème WordPress Idéal
Trouver le Thème WordPress IdéalTrouver le Thème WordPress Idéal
Trouver le Thème WordPress Idéal
 
Weekly actions
Weekly actions Weekly actions
Weekly actions
 
2015 ea-oe-field operator-fr
2015 ea-oe-field operator-fr2015 ea-oe-field operator-fr
2015 ea-oe-field operator-fr
 

Similaire à 20091020 JPA2

Soda sotm fr-2013_02_24
Soda sotm fr-2013_02_24Soda sotm fr-2013_02_24
Soda sotm fr-2013_02_24quicky_osm
 
RBS Change - Architecture et scalabilité
RBS Change - Architecture et scalabilitéRBS Change - Architecture et scalabilité
RBS Change - Architecture et scalabilitérbschange
 
Soda sotm fr-2013_02_24
Soda sotm fr-2013_02_24Soda sotm fr-2013_02_24
Soda sotm fr-2013_02_24quicky_osm
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
 
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGConférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGZenika
 
Annotations Java par Olivier Croisier
Annotations Java par Olivier CroisierAnnotations Java par Olivier Croisier
Annotations Java par Olivier CroisierNormandy JUG
 
Objet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeObjet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeformationobjetdirect
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
 
Aperçu de java EE 5
Aperçu de java EE 5Aperçu de java EE 5
Aperçu de java EE 5Quentin Adam
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages webJean-Pierre Vincent
 
Déploiement de Silverpeas sur JOnAS
Déploiement de Silverpeas sur JOnASDéploiement de Silverpeas sur JOnAS
Déploiement de Silverpeas sur JOnASAlexis Hassler
 
Etat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS GeneveEtat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS GeneveAlexandre Morgaut
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Jean-Michel Doudoux
 

Similaire à 20091020 JPA2 (20)

Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
Soda sotm fr-2013_02_24
Soda sotm fr-2013_02_24Soda sotm fr-2013_02_24
Soda sotm fr-2013_02_24
 
RBS Change - Architecture et scalabilité
RBS Change - Architecture et scalabilitéRBS Change - Architecture et scalabilité
RBS Change - Architecture et scalabilité
 
Soda sotm fr-2013_02_24
Soda sotm fr-2013_02_24Soda sotm fr-2013_02_24
Soda sotm fr-2013_02_24
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGConférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
 
Hibernate 3
Hibernate 3Hibernate 3
Hibernate 3
 
Annotations Java par Olivier Croisier
Annotations Java par Olivier CroisierAnnotations Java par Olivier Croisier
Annotations Java par Olivier Croisier
 
Forum PHP 2014 day 1
Forum PHP 2014 day 1Forum PHP 2014 day 1
Forum PHP 2014 day 1
 
Objet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeObjet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonome
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Aperçu de java EE 5
Aperçu de java EE 5Aperçu de java EE 5
Aperçu de java EE 5
 
gradle_lavajug
gradle_lavajuggradle_lavajug
gradle_lavajug
 
gradle_nantesjug
gradle_nantesjuggradle_nantesjug
gradle_nantesjug
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages web
 
Déploiement de Silverpeas sur JOnAS
Déploiement de Silverpeas sur JOnASDéploiement de Silverpeas sur JOnAS
Déploiement de Silverpeas sur JOnAS
 
Etat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS GeneveEtat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS Geneve
 
Javaoop
JavaoopJavaoop
Javaoop
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
 

Plus de lyonjug

DIY: Analyse statique en Java
DIY: Analyse statique en JavaDIY: Analyse statique en Java
DIY: Analyse statique en Javalyonjug
 
Lightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - AnsibleLightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - Ansiblelyonjug
 
Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015lyonjug
 
Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016lyonjug
 
Presentation jug novembre2015
Presentation jug novembre2015Presentation jug novembre2015
Presentation jug novembre2015lyonjug
 
201502 - Integration Testing
201502 - Integration Testing201502 - Integration Testing
201502 - Integration Testinglyonjug
 
201311 - Middleware
201311 - Middleware201311 - Middleware
201311 - Middlewarelyonjug
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Foraxlyonjug
 
201301 - Focus Neo4j
201301 - Focus Neo4j201301 - Focus Neo4j
201301 - Focus Neo4jlyonjug
 
201301 - Panorama NoSQL
201301 - Panorama NoSQL201301 - Panorama NoSQL
201301 - Panorama NoSQLlyonjug
 
201209 Lombok & Guava
201209 Lombok & Guava201209 Lombok & Guava
201209 Lombok & Guavalyonjug
 
201209 LT Clojure
201209 LT Clojure201209 LT Clojure
201209 LT Clojurelyonjug
 
Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)lyonjug
 
Spring Batch Workshop
Spring Batch WorkshopSpring Batch Workshop
Spring Batch Workshoplyonjug
 
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...lyonjug
 
GlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilitéGlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilitélyonjug
 
Développement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha LaboureyDéveloppement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha Laboureylyonjug
 
Présentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William DraïPrésentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William Draïlyonjug
 
201003 OSGi
201003 OSGi201003 OSGi
201003 OSGilyonjug
 

Plus de lyonjug (20)

DIY: Analyse statique en Java
DIY: Analyse statique en JavaDIY: Analyse statique en Java
DIY: Analyse statique en Java
 
Lightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - AnsibleLightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - Ansible
 
Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015
 
Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016
 
Presentation jug novembre2015
Presentation jug novembre2015Presentation jug novembre2015
Presentation jug novembre2015
 
201502 - Integration Testing
201502 - Integration Testing201502 - Integration Testing
201502 - Integration Testing
 
201311 - Middleware
201311 - Middleware201311 - Middleware
201311 - Middleware
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
 
201301 - Focus Neo4j
201301 - Focus Neo4j201301 - Focus Neo4j
201301 - Focus Neo4j
 
201301 - Panorama NoSQL
201301 - Panorama NoSQL201301 - Panorama NoSQL
201301 - Panorama NoSQL
 
201209 Lombok & Guava
201209 Lombok & Guava201209 Lombok & Guava
201209 Lombok & Guava
 
201209 LT Clojure
201209 LT Clojure201209 LT Clojure
201209 LT Clojure
 
Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)
 
Spring Batch Workshop
Spring Batch WorkshopSpring Batch Workshop
Spring Batch Workshop
 
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
 
GlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilitéGlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilité
 
Développement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha LaboureyDéveloppement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha Labourey
 
Présentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William DraïPrésentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William Draï
 
201003 OSGi
201003 OSGi201003 OSGi
201003 OSGi
 

20091020 JPA2

  • 1. Java Persistent API Auteur : PEREZ Noël nperez@hinnoya.fr Date : Octobre 2009
  • 2. Plan ● Principes des Frameworks de persistence ● Historique ● JPA 1.0 ● JPA 2.0 ● Demo ● Questions? JUG Lyon / oct 2009 Java Persistent API 2
  • 3. BIO Noël Perez ● Architecte Java chez Hinnoya http://www.hinnoya.fr ● Formateur : ● Java/JEE/Struts/Hibernate ( bientôt JPA ) http://www.proatis.fr ● Auteur : ● Article sur JPA paru dans linuxdevjournal mi 2008 http://www.pere-nono.net JUG Lyon / oct 2009 Java Persistent API 3
  • 4. Groupe Hinnoya Hinnoya Centre Est Centre de services informatique Lyonnais Pôle .Net Pôle Php Pôle Java Technos : ASP/C#, Technos : Symphony, Technos : JEE, DotNetNuke, Joomla, Struts, … PHP5, Spring / SEAM, … GWT, ... Délégation de compétences Conseil Centre de services Organisme de formation agrée ●Formation téchnologique ●Bureautique ●Gestion de projet ●Applicatif métier JUG Lyon / oct 2009 Java Persistent API 4
  • 5. Plan ● Principes des Frameworks de persistence ● Historique ● JPA 1.0 ● JPA 2.0 ● Démo ● Questions? JUG Lyon / oct 2009 Java Persistent API 5
  • 6. Principes ●Historique ●JPA 1.0 Problématique ●JPA 2.0 ●Démo ●Questions? ● Application inconcevable sans sauvegarde des données ● Beaucoup de codes répétitifs : ● ouverture de connexions, ● gestion de requêtes multiples, ● traitement du résultat, … ● Sauvegarde porte sur des objets métiers → 1 objet métier = 1 table JUG Lyon / oct 2009 Java Persistent API 6
  • 7. Principes ●Historique ●JPA 1.0 Problème gestion JDBC ●JPA 2.0 ●Démo ●Questions? ● Besoin d'experts pour créer schémas et requêtes de la base, ● difficulté à maintenir ce même schéma et ces requêtes, ● Opérations coûteuses ● Peu d’intérêt, très répétitive ● dépendance vis à vis de la base initiale → peut nuire à la montée en charge d'une application. JUG Lyon / oct 2009 Java Persistent API 7
  • 8. Principes ●Historique ●JPA 1.0 Couches ●JPA 2.0 ●Démo ●Questions? Utilisateurs Couche interface utilisateur ( UI ) Couche métier Couche d'accès aux données ( DAO ) Couche de persistence JDBC Base de données JUG Lyon / oct 2009 Java Persistent API 8
  • 9. Principes Solution : frameworks de ●Historique ●JPA 1.0 ●JPA 2.0 persistence ●Démo ●Questions? ● Travail à partir de POJO ● Ajout d’informations permettant de mapper les propriétés d’objets avec les colonnes des tables ● Possibilité de demander à sauver un objet, le supprimer, le mettre à jour ● Possibilité d’interroger la base en manipulant les objets ( pur java ) JUG Lyon / oct 2009 Java Persistent API 9
  • 10. Principes ●Historique ●JPA 1.0 Principe technique ●JPA 2.0 ●Démo ●Questions? ● 1 classe à persister = 1 description du mode persistance ● Indique la table ● Indique les correspondances de champs – Type – Obligation – Clé – Lien avec d’autres objets ● 1 fichier de configuration générale décrivant l’accès à la base de données JUG Lyon / oct 2009 Java Persistent API 10
  • 11. Plan ● Principes des Frameworks de persistence ● Historique ● JPA 1.0 ● JPA 2.0 ● Démo ● Questions? JUG Lyon / oct 2009 Java Persistent API 11
  • 12. ●Principes ●Historique ●JPA 1.0 Historique ●JPA 2.0 ●Démo ●Questions? JPA2 Final draft mars 2009 JPA:mai 2006 JDO2.0:2005 Hibernate 3.5.0.Beta-1 août.2009 JDO : 2002 Hibernate3.0 : fin 2004 Hibernate0.8 : fin 2001 EJB1.0 JUG Lyon / oct 2009 Java Persistent API 12
  • 13. ●Principes ●Historique ●JPA 1.0 Participant JSR 317 ●JPA 2.0 ●Démo ●Questions? JUG Lyon / oct 2009 Java Persistent API 13
  • 14. Plan ● Principes des Frameworks de persistence ● Historique ● JPA 1.0 ● JPA 2.0 ● Demo ● Questions? JUG Lyon / oct 2009 Java Persistent API 14
  • 15. ●Principes ●Historique ●JPA 1.0 Couches ●JPA 2.0 ●Démo ●Questions? Utilisateurs Couche interface utilisateur ( UI ) Simple POJO avec des annotations Couche métier pour gérer la persistance Couche d'accès aux données ( DAO ) Appel aux fonctions de persistance Objets persistants JPA Ajout dans le code de l'application des sauvegardes, chargement ou requete Hibernate/OpenJPA/TopLink/... vers les objets persistant JDBC Base de données JUG Lyon / oct 2009 Java Persistent API 15
  • 16. ●Principes ●Historique ●JPA 1.0 Cycle de vie ●JPA 2.0 ●Démo ●Questions? Nouvelle instance Transient remove persist detach refresh Persistant Récupération par le Fermeture du context / garbage collector serialisation merge Détaché JUG Lyon / oct 2009 Java Persistent API 16
  • 17. ●Principes ●Historique ●JPA 1.0 Injections ( callback method ) ●JPA 2.0 ●Demo ●Questions? Instanciation @PrePersist,@PostPersist @PostLoad @PreRemove @PostRemove Persistant Suppression @PreUpdate, @PostUpdate Détaché JUG Lyon / oct 2009 Java Persistent API 17
  • 18. ●Principes ●Historique ●JPA 1.0 Injections 2/2 ●JPA 2.0 ●Démo ●Questions? ● Tient compte de l'héritage ● Les injections classe mère en dernier ● Possible de désactiver les appels de la classe mère ● Tient compte de l'ordre dans le fichier ( même injection présente plusieurs fois ) JUG Lyon / oct 2009 Java Persistent API 18
  • 19. ●Principes ●Historique ●JPA 1.0 Requetage ●JPA 2.0 ●Démo ●Questions? ● SQL ● JPQL select distinct joueur from Club club, Personne joueur where joueur member of club.organisateurs JUG Lyon / oct 2009 Java Persistent API 19
  • 20. ●Principes ●Historique ●JPA 1.0 Fonctionnalités standards ●JPA 2.0 ●Démo ●Questions? ● Lazy strategie sur les Fetch ● Traitement en cascade ● Gestion des transactions ● Lock d'objet JUG Lyon / oct 2009 Java Persistent API 20
  • 21. ●Principes ●Historique ●JPA 1.0 Autres fonctionnalités ●JPA 2.0 ●Démo ●Questions? ● Création de requêtes nommées ( Named Queries ) JUG Lyon / oct 2009 Java Persistent API 21
  • 22. Plan ● Principes des Frameworks de persistence ● Historique ● JPA 1.0 ● JPA 2.0 ● Démo ● Questions? JUG Lyon / oct 2009 Java Persistent API 22
  • 23. ●Principes ●Historique ●JPA 1.0 JPQL ● JPA 2.0 ●Démo ●Questions? Aucune nouveauté depuis la version 1.0 JUG Lyon / oct 2009 Java Persistent API 23
  • 24. ●Principes ●Historique ●JPA 1.0 Criteria API 1/3 ● JPA 2.0 ●Démo ●Questions? ● Requetage en objet ● Construction de requêtes dynamiques très aisée ● Voir modification après coup ● 2 modes de création : ● Metamodel ● Réference aux attributs JUG Lyon / oct 2009 Java Persistent API 24
  • 25. ●Principes ●Historique ●JPA 1.0 Criteria 2/3 ● JPA 2.0 ●Démo ●Questions? En utilisant le metamodel : CriteriaQuery q = qb.create(); Root<Customer> cust = q.from(Customer.class); Join<Order, Item> item = cust.join(Customer_.orders).join(Order_.lineitems); q.select(cust.get(Customer_.name)) .where( qb.equal(item.get(Item_.product).get(Product_.productType), "printer")); Order est un objet et la correspondance de sa classe dans le metamodel est Order_ JUG Lyon / oct 2009 Java Persistent API 25
  • 26. ●Principes ●Historique ●JPA 1.0 Criteria 3/3 ● JPA 2.0 ●Démo ●Questions? ● En utilisant les réferences aux attributs : QueryBuilder qb = ... CriteriaQuery q = qb.create(); Root<Customer> cust = q.from(Customer.class); Join<Order, Item> item = cust.join("orders").join("lineitems"); q.select(cust.get("name")) .where( qb.equal(item.get("product").get("productType"), "printer")); JUG Lyon / oct 2009 Java Persistent API 26
  • 27. ●Principes ●Historique ●JPA 1.0 Cached API ● JPA 2.0 ●Démo ●Questions? @Entity @Table(schema="jpa", name = "participe") @Cacheable(true) public class Participe { Dans persistence.xml : <caching>ALL</caching> ● ALL ● NONE ● ENABLE_SELECTIVE ● DISABLE_SELECTIVE JUG Lyon / oct 2009 Java Persistent API 27
  • 28. ●Principes ●Historique ●JPA 1.0 Validation ( javax.validation ) ● JPA 2.0 ●Démo ●Questions? ● Optionnel – TraversableResolver accessible par l'EntityManager – @valid ● javax.persistence.ValidationMode – Auto ( defaut ) : validation utilisée si présente sans exeception – Callback : validation obligatoire – None ● Completée par la JSR-303 ( Bean validation ) JUG Lyon / oct 2009 Java Persistent API 28
  • 29. ●Principes ●Historique ●JPA 1.0 Autres nouveautés ● JPA 2.0 ●Démo ●Questions? ● Apparition de la méthode ”detach” ●Passe objet en transient ● Changement de signification de la méthode ”remove” ●Supprime les entrées associées en base ● cascade=DETACH ● ValidatorFactory ● Possibilité d'accéder au metamodel ( disponible avec hibernate mais pas en JPA1 ) JUG Lyon / oct 2009 Java Persistent API 29
  • 30. ●Principes ●Historique ●JPA 1.0 Implementations disponibles ● JPA 2.0 ●Démo ●Questions? ● OpenJPA2.0 - 12/2009 ( Geronimo / Weblogic ) ● Version déjà disponible et fonctionnelle ( partiel ) ● Hibernate - ( JbossAS-5.2.0.Beta1 - non grand public ) ● preview disponible, non fonctionnelle JPA2 ● Glassfish V3 ( preview était disponible ) ● EclipseLink2.0 11/2009 ● ... JUG Lyon / oct 2009 Java Persistent API 30
  • 31. Plan ● Principes des Frameworks de persistence ● Historique ● JPA 1.0 ● JPA 2.0 ● Démo ● Questions? JUG Lyon / oct 2009 Java Persistent API 31
  • 32. ●Principes ●Historique ●JPA 1.0 Démo : architecture ●JPA 2.0 ●Démo ●Questions? JVM1.6 OPENJPA MySQL BasketExample JUG Lyon / oct 2009 Java Persistent API 32
  • 33. ●Principes ●Historique ●JPA 1.0 Démo : modèle ●JPA 2.0 ●Démo ●Questions? JUG Lyon / oct 2009 Java Persistent API 33
  • 34. ●Principes ●Historique ●JPA 1.0 Pour aller plus loin ●JPA 2.0 ●Demo ●Questions? References : ● JSR 220: Enterprise JavaBeansTM,Version 3.0 ● JSR 317: JavaTM Persistence API, Version 2.0 Outils : ● OpenJPA: http:/ openjpa.apache.org/ / Articles sur JPA : ● Initiation : Java Persistence API : Persistance universelle – linuxdevjournal – Perez N. ● Avancé : http://java.sun.com/javaee/5/docs/tutorial/doc/bnbpz.html JUG Lyon / oct 2009 Java Persistent API 34
  • 35. A vous de jouer : Question? JUG Lyon / oct 2009 Java Persistent API 35