SlideShare une entreprise Scribd logo
1  sur  18
Formation
     Maîtriser JPA/Hibernate pour optimiser les
     performances




©Objet Direct 2011
Version
Présentations

     Votre formateur
     Objet Direct




    Conseil architecture du SI                               Pilotage de l’entreprise
                                      Optimisation et
      Applications métiers       intégration des processus     Optimisation de la
          spécifiques                                            performance




           Web et
           Objet                         ERP                          BI



2
Notre Environnement




3
Présentations

     Quelles sont vos attentes ?
     Quel est votre rôle au sein d’une équipe projet ?




4
Introduction à Hibernate et JPA




5
Présentation des problématiques de
                persistance


     La persistance est le mécanisme qui permet de
      sauvegarder l’état d’une application informatique dans un
      outil de gestion de données
       ● Sur un système de fichier
       ● En base
       ● Sur un bus applicatif
       ● Etc …


     Le mécanisme de persistance est bidirectionnel




6
Du monde des objets vers le monde des
              données


          Gestionnaire                       TBL_GEST

    nom                                    ID
    responsable                            NAME
                                           RESP_ID


                   1



                   n
              anomalie                        TBL_ANO
    numéro                                  ID
    Description                             GEST_ID
                                            NUMBER
                                            DESC

                   1


                   n
              remarque                        remarque
    Contenu                                ID
    auteur                                 ANO_ID
                                           CONTENT
                                           AUTHOR


7
De l’attribut vers les données


     Pour stocker un attribut il faut
       ● Le nom de la table dans laquelle l’attribut va être stocké
       ● Le type de l’attribut
       ● Le nom du champ dans la base de données


     Attention au cas particulier des attributs qui ne sont pas
      des types primitifs. Dans ce cas il faut stocker la relation
       ● Le nom de la table vers laquelle la relation pointe
       ● Définition de la clef étrangère




8
Requêtage fonctionnel


     Le lien avec la base de données étant défini au niveau des
      objets, il n’est plus nécessaire d’utiliser le SQL pour faire
      des requêtes

     On peut utiliser directement les objets du concept pour
      exprimer les données à récupérer
       ● JPQ
       ● HQL
       ● EJB-QL
       ● Etc …


     Les langages de requêtage fonctionnel sont plus proches
      du besoin utilisateur et plus facile à maintenir



9
Hibernate et JPA


      Hibernate
        ● Fournit un DAO générique !
        ● Outil dit de mapping Objet / Relationnel
        ● Depuis plusieurs années, considéré comme une référence
             • Au point que Sun a demandé à l’auteur principal d’Hibernate de superviser la spécification de la
               norme JPA en s’inspirant d’Hibernate
             • JPA (EJB 3) est en rupture complète avec les versions EJB antérieures


      JPA
        ● Java Persistence API
        ● Norme JEE
        ● Hibernate est une implémentation de JPA
        ● Implémentation de référence : EclipseLink
        ● Il existe d’autres implémentations (Websphere, Weblogic, TopLink, …)

      JPA versus Hibernate
        ● JPA est une norme
        ● Hibernate est plus riche en fonctionnalités
             • Et a toujours un temps d’avance sur JPA !



10
Définir un objet persistant


      Un Entity matérialise en Java un objet du domaine de
       l’application
        ● Un objet du domaine est dit « persistant » : son état est conservé en base
          de données
        ● La plupart du temps, un objet du domaine correspond à une ligne d’une table
          de la base de données
      Un Entity est un POJO annoté
      Il est constitué d’une unique classe contenant
        ● Un identifiant unique
            • Il permet d’identifier un objet précisément parmi tous les objets instanciés de cette classe
        ● Des propriétés
            • Elles correspondent aux champs de la BDD
        ● Des méthodes
            • Elles implémentent les règles métiers spécifiques à l’objet du domaine
        ● Un constructeur sans paramètre
            • Les constructeurs avec paramètres sont autorisés, pourvu que le constructeur sans paramètre
              soit présent


11
Rendre une classe persistante
                                Indique qu’il s’agit d’une
                                Entité persistante
                                                             Indique que la propriété « id »
     @Entity                                                 est l’identifiant de l’entité
     class Book {                                            Optionnel : génération
                                                             automatique des valeurs de id
         @Id @GeneratedValue
         private int id;
         public int getId() {return id;}
         public void setId(int id) {this.id = id;}                           Par défaut, title est un
                                                                             attribut persistant
         private String title;
         public String getTitle() {return title;}
         public void setTitle(String title) {this.title = title;}

         @ManyToOne                                                           La propriété « author »
         private Author author;                                               est un lien vers une autre
         public Author getAuthor() {return author;}                           entité
         public void setAuthor(Author author) {this.author = author;}

         private String summary;
         public String getSummary() {return summary;}
         public void setSummary(String summary) {this.summary = summary;}

         @ManyToMany                                                         La propriété « keyWords » est
                                                                             un lien multiple vers une
         private List<KeyWord> keyWords;                                     autre entité
         public List<KeyWord> getKeyWords() {return keyWords;}
         public void setKeyWords(List<KeyWord> keyWords) {this.keyWords = keyWords;}
     }




12
Identité en pratique


      Toute classe Entity doit avoir un et un seul identifiant
        ● Correspond à la clé primaire de la table sur laquelle il est mappé
        ● Cet identifiant est immutable : une fois initialisé, il ne doit pas être
          modifié
        ● Généralement, cet identifiant est une propriété de l’entité
            • Mais on peut constituer un identifiant composé

      La propriété qui définit l’identifiant est annoté avec @Id

                                                                 Identifiant qui doit être intialisé
            @Id                                                  par programmation
            public int id;


                                                           Identifiant initialisé automatiquement par le
            @Id @GeneratedValue                            conteneur en utilisant la stratégie la plus
            public int id;                                 adaptée en fonction de la BDD cible


            @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="bookSeq")
            public int id;
                                                                                      Nom de la séquence
                                                Identifiant initialisé automa-        utilisée
                                                tiquement par le conteneur en
                                                utilisant une séquence


13
Configurer un gestionnaire de persistance


      La configuration est donnée par le fichier
       META-INF/persistence.xml
                  Définition d’un     Classe d’implémentation du
                  gestionnaire        gestionnaire (ici Hibernate)


     <persistence xmlns="http://java.sun.com/xml/ns/persistence"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence            DataSource (BDD)
                                                                                        utilisée
                                   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
                  version="2.0">
         <persistence-unit name="ticketPU" transaction-type=« JTA">
             <provider>org.hibernate.ejb.HibernatePersistence</provider>
             <jta-data-source>java:/DefaultDS</jta-data-source>
             <properties>
                <property name=“hibernate.show_sql" value="true" />
                <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
             </properties>
         </persistence-unit>
     </persistence>                                          Paramètres spécifiques à
                                                                 l’implémentation du
                                                                 gestionnaire (ici Hibernate)



14
Configuration du DataSource dans Tomcat


      Cf. le fichier server.xml
        ● Répertoire apache-tomcat-7.0.12conf
        ● Dans le plugin eclipse : projet Servers, « Tomcat v7.0 Server at localhost-
          config »
        ● Dans la section GlobalNamingResource ajouter :

          <Resource name="jdbc/ticketPU"
                    type="javax.sql.DataSource"
                    driverClassName="org.h2.Driver"
                    url="jdbc:h2:tcp://localhost//formation/database"
                    password=""
                    username="sa"
                    auth="Container" maxActive="100" maxIdle="30" maxWait="10000" />




        ● Dans la section contexte de la WebApp ajouter :

          <ResourceLink global="jdbc/ticketPU"                                Le nom doit correspondre au nom dans
                     name="jdbc/ticketPU"                                     persistence.xml
                     type="javax.sql.DataSource" />



15
Le gestionnaire de persistance
                                                                          Classe javax.persistence.EntityManager
                                                                          fournie par Java EE

                        Pour accéder aux entités, il faut interroger un
                        gestionnaire de persistance




               Le gestionnaire de persistance sait créer,
               modifier et supprimer des entités ou trouver
               des entités selon leur clé primaire ou une
               requête JPQL (pseudo SQL)



     EntityManager em;
     Client nouveaulient = …
                                                 Le même gestionnaire permet
     em.persist(nouveauClient);                  d’accéder à des entités de types
     Client jbond =                              différents
       em.find(Client.class, "007");
     jbond.setPrenom(«James»);
     Client drNo =
      em.find(Client.class, "666");
     em.remove(drNo);




16
Du POJO à la base …



                                                                                        Transaction
                                                   JTA/JTS              XA
                                                                                           BDD




                JPA           Hibernate                              Connexion          Connexion
                                                  DataSource                                             BDD
           (EntityManager)    (Session)                                JDBC             HSQLDB



                                      Java/JEE

     Pour accéder à
                             Pour transformer        Pour profiter     Pour accéder        Pour        Pour
     l’ORM de façon
                             des objets Java en      des services      à la base à         accéder     stocker les
     standard
                             enregistrements         techniques        partir de Java      à la base   données
                             BDD                     (transactions
                                                     distribuées,
                                                     pooling



17
Le gestionnaire de persistance



                                    On peut déclarer plusieurs
                                    gestionnaires de persistance




     Une gestionnaire de
     persistance ne peut être
     utilisé que par un seul
     thread à la fois




                         Utile pour accéder à plusieurs
                         bases de données (mode XA
                         possible)



18

Contenu connexe

Tendances

Tendances (20)

4 Hibernate
4 Hibernate4 Hibernate
4 Hibernate
 
Presentation hibernate nfe103
Presentation hibernate nfe103Presentation hibernate nfe103
Presentation hibernate nfe103
 
Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1
 
Springioc
SpringiocSpringioc
Springioc
 
JNDI Java Naming Derectory Interfaces
JNDI Java Naming Derectory InterfacesJNDI Java Naming Derectory Interfaces
JNDI Java Naming Derectory Interfaces
 
Hibernate
HibernateHibernate
Hibernate
 
Hibernate 3
Hibernate 3Hibernate 3
Hibernate 3
 
Support cours j2_ee
Support cours j2_eeSupport cours j2_ee
Support cours j2_ee
 
575
575575
575
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
Devoxx 15
Devoxx 15 Devoxx 15
Devoxx 15
 
Hibernate et jsf
Hibernate et jsfHibernate et jsf
Hibernate et jsf
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
 
Rapport tp1 j2ee
Rapport tp1 j2eeRapport tp1 j2ee
Rapport tp1 j2ee
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
CDI mis en pratique avec Seam Social et Weld OSGI
CDI mis en pratique avec Seam Social et Weld OSGICDI mis en pratique avec Seam Social et Weld OSGI
CDI mis en pratique avec Seam Social et Weld OSGI
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
 
Ejb 3
Ejb 3Ejb 3
Ejb 3
 
Scaffolding MDSD par l’exemple - 1.0
Scaffolding MDSD par l’exemple - 1.0Scaffolding MDSD par l’exemple - 1.0
Scaffolding MDSD par l’exemple - 1.0
 

En vedette

L’audace au féminin dans l'univers professionnel
L’audace au féminin dans l'univers professionnelL’audace au féminin dans l'univers professionnel
L’audace au féminin dans l'univers professionnelLinkedIn
 
Dossier de presse les rencontres numériques Edition #2012
Dossier de presse les rencontres numériques Edition #2012Dossier de presse les rencontres numériques Edition #2012
Dossier de presse les rencontres numériques Edition #2012antic Pays Basque
 
Guide Apps Analytics AT Internet
Guide Apps Analytics AT InternetGuide Apps Analytics AT Internet
Guide Apps Analytics AT InternetStéphanie LEGRAND
 
El Marc Legal del Marketing Digital - El Corte Ingles
El Marc Legal del Marketing Digital - El Corte InglesEl Marc Legal del Marketing Digital - El Corte Ingles
El Marc Legal del Marketing Digital - El Corte InglesMontserrat Peñarroya
 
法國人留給世界的美麗遺產
法國人留給世界的美麗遺產法國人留給世界的美麗遺產
法國人留給世界的美麗遺產lys167
 
Projet carrières en informatique
Projet carrières en informatiqueProjet carrières en informatique
Projet carrières en informatiquej-bastarache
 
Déjeuner conférence no 1 taux de roulement et entrevue de départ
Déjeuner conférence no 1 taux de roulement et entrevue de départ Déjeuner conférence no 1 taux de roulement et entrevue de départ
Déjeuner conférence no 1 taux de roulement et entrevue de départ Andrée Laforge, MBA, SWP
 
Traitons nos gens comme des machines
Traitons nos gens comme des machinesTraitons nos gens comme des machines
Traitons nos gens comme des machinesMario Côté, CRHA
 
Restauración, E
Restauración, ERestauración, E
Restauración, ELuz García
 
Dématérialisation d'un document comptable
Dématérialisation d'un document comptableDématérialisation d'un document comptable
Dématérialisation d'un document comptableAGIRIS EIC
 
Le plus-vieux-metier-du-monde
Le plus-vieux-metier-du-mondeLe plus-vieux-metier-du-monde
Le plus-vieux-metier-du-mondejessirosario
 
Leccion 09 Iv 2009
Leccion 09 Iv 2009Leccion 09 Iv 2009
Leccion 09 Iv 2009Ricardo
 

En vedette (20)

L’audace au féminin dans l'univers professionnel
L’audace au féminin dans l'univers professionnelL’audace au féminin dans l'univers professionnel
L’audace au féminin dans l'univers professionnel
 
Ejb3 2-session-beans fr
Ejb3 2-session-beans frEjb3 2-session-beans fr
Ejb3 2-session-beans fr
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Dossier de presse les rencontres numériques Edition #2012
Dossier de presse les rencontres numériques Edition #2012Dossier de presse les rencontres numériques Edition #2012
Dossier de presse les rencontres numériques Edition #2012
 
Ludoteca pandora
Ludoteca pandoraLudoteca pandora
Ludoteca pandora
 
Guide Apps Analytics AT Internet
Guide Apps Analytics AT InternetGuide Apps Analytics AT Internet
Guide Apps Analytics AT Internet
 
El Marc Legal del Marketing Digital - El Corte Ingles
El Marc Legal del Marketing Digital - El Corte InglesEl Marc Legal del Marketing Digital - El Corte Ingles
El Marc Legal del Marketing Digital - El Corte Ingles
 
法國人留給世界的美麗遺產
法國人留給世界的美麗遺產法國人留給世界的美麗遺產
法國人留給世界的美麗遺產
 
Projet carrières en informatique
Projet carrières en informatiqueProjet carrières en informatique
Projet carrières en informatique
 
Rocio
RocioRocio
Rocio
 
Nuevo Protocolo contra el Picudo Rojo realizado por el Ayuntamiento de Alozai...
Nuevo Protocolo contra el Picudo Rojo realizado por el Ayuntamiento de Alozai...Nuevo Protocolo contra el Picudo Rojo realizado por el Ayuntamiento de Alozai...
Nuevo Protocolo contra el Picudo Rojo realizado por el Ayuntamiento de Alozai...
 
Déjeuner conférence no 1 taux de roulement et entrevue de départ
Déjeuner conférence no 1 taux de roulement et entrevue de départ Déjeuner conférence no 1 taux de roulement et entrevue de départ
Déjeuner conférence no 1 taux de roulement et entrevue de départ
 
Traitons nos gens comme des machines
Traitons nos gens comme des machinesTraitons nos gens comme des machines
Traitons nos gens comme des machines
 
Restauración, E
Restauración, ERestauración, E
Restauración, E
 
Les initiatives
Les initiativesLes initiatives
Les initiatives
 
Art nouveau period
Art nouveau periodArt nouveau period
Art nouveau period
 
Dématérialisation d'un document comptable
Dématérialisation d'un document comptableDématérialisation d'un document comptable
Dématérialisation d'un document comptable
 
Olivier Hoen 2808
Olivier Hoen 2808Olivier Hoen 2808
Olivier Hoen 2808
 
Le plus-vieux-metier-du-monde
Le plus-vieux-metier-du-mondeLe plus-vieux-metier-du-monde
Le plus-vieux-metier-du-monde
 
Leccion 09 Iv 2009
Leccion 09 Iv 2009Leccion 09 Iv 2009
Leccion 09 Iv 2009
 

Similaire à Objet Direct Formation JPA Hibernate

#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart ClientGuillaume Sauthier
 
Ado.net vs jpa
Ado.net vs jpaAdo.net vs jpa
Ado.net vs jpaNetways
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generaleAmir Souissi
 
CocoaHeads Toulouse - Getting to the core of Core Data
CocoaHeads Toulouse - Getting to the core of Core DataCocoaHeads Toulouse - Getting to the core of Core Data
CocoaHeads Toulouse - Getting to the core of Core DataCocoaHeads France
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Fabien Baligand
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataLhouceine OUHAMZA
 
Framework Hibernate
Framework HibernateFramework Hibernate
Framework HibernateInes Ouaz
 
OWF12/HTML 5 local storage , olivier thomas, cto at webtyss
OWF12/HTML 5 local storage , olivier thomas, cto at webtyssOWF12/HTML 5 local storage , olivier thomas, cto at webtyss
OWF12/HTML 5 local storage , olivier thomas, cto at webtyssParis Open Source Summit
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
Présentation ppt
Présentation pptPrésentation ppt
Présentation pptBoudhir
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++coursuniv
 
PROGRAMMATION 2e GENIE PARTIE THEORIE.ppt
PROGRAMMATION 2e GENIE PARTIE THEORIE.pptPROGRAMMATION 2e GENIE PARTIE THEORIE.ppt
PROGRAMMATION 2e GENIE PARTIE THEORIE.pptEddySHANGA
 

Similaire à Objet Direct Formation JPA Hibernate (20)

#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart Client
 
Ado.net vs jpa
Ado.net vs jpaAdo.net vs jpa
Ado.net vs jpa
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Hibernate
HibernateHibernate
Hibernate
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generale
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
CocoaHeads Toulouse - Getting to the core of Core Data
CocoaHeads Toulouse - Getting to the core of Core DataCocoaHeads Toulouse - Getting to the core of Core Data
CocoaHeads Toulouse - Getting to the core of Core Data
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1Environnements, Sources de propriétés et Profils avec Spring 3.1
Environnements, Sources de propriétés et Profils avec Spring 3.1
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
Framework Hibernate
Framework HibernateFramework Hibernate
Framework Hibernate
 
OWF12/HTML 5 local storage , olivier thomas, cto at webtyss
OWF12/HTML 5 local storage , olivier thomas, cto at webtyssOWF12/HTML 5 local storage , olivier thomas, cto at webtyss
OWF12/HTML 5 local storage , olivier thomas, cto at webtyss
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Ce bon vieux propel
Ce bon vieux propelCe bon vieux propel
Ce bon vieux propel
 
Présentation ppt
Présentation pptPrésentation ppt
Présentation ppt
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
PROGRAMMATION 2e GENIE PARTIE THEORIE.ppt
PROGRAMMATION 2e GENIE PARTIE THEORIE.pptPROGRAMMATION 2e GENIE PARTIE THEORIE.ppt
PROGRAMMATION 2e GENIE PARTIE THEORIE.ppt
 

Objet Direct Formation JPA Hibernate

  • 1. Formation Maîtriser JPA/Hibernate pour optimiser les performances ©Objet Direct 2011 Version
  • 2. Présentations  Votre formateur  Objet Direct Conseil architecture du SI Pilotage de l’entreprise Optimisation et Applications métiers intégration des processus Optimisation de la spécifiques performance Web et Objet ERP BI 2
  • 4. Présentations  Quelles sont vos attentes ?  Quel est votre rôle au sein d’une équipe projet ? 4
  • 6. Présentation des problématiques de persistance  La persistance est le mécanisme qui permet de sauvegarder l’état d’une application informatique dans un outil de gestion de données ● Sur un système de fichier ● En base ● Sur un bus applicatif ● Etc …  Le mécanisme de persistance est bidirectionnel 6
  • 7. Du monde des objets vers le monde des données Gestionnaire TBL_GEST nom ID responsable NAME RESP_ID 1 n anomalie TBL_ANO numéro ID Description GEST_ID NUMBER DESC 1 n remarque remarque Contenu ID auteur ANO_ID CONTENT AUTHOR 7
  • 8. De l’attribut vers les données  Pour stocker un attribut il faut ● Le nom de la table dans laquelle l’attribut va être stocké ● Le type de l’attribut ● Le nom du champ dans la base de données  Attention au cas particulier des attributs qui ne sont pas des types primitifs. Dans ce cas il faut stocker la relation ● Le nom de la table vers laquelle la relation pointe ● Définition de la clef étrangère 8
  • 9. Requêtage fonctionnel  Le lien avec la base de données étant défini au niveau des objets, il n’est plus nécessaire d’utiliser le SQL pour faire des requêtes  On peut utiliser directement les objets du concept pour exprimer les données à récupérer ● JPQ ● HQL ● EJB-QL ● Etc …  Les langages de requêtage fonctionnel sont plus proches du besoin utilisateur et plus facile à maintenir 9
  • 10. Hibernate et JPA  Hibernate ● Fournit un DAO générique ! ● Outil dit de mapping Objet / Relationnel ● Depuis plusieurs années, considéré comme une référence • Au point que Sun a demandé à l’auteur principal d’Hibernate de superviser la spécification de la norme JPA en s’inspirant d’Hibernate • JPA (EJB 3) est en rupture complète avec les versions EJB antérieures  JPA ● Java Persistence API ● Norme JEE ● Hibernate est une implémentation de JPA ● Implémentation de référence : EclipseLink ● Il existe d’autres implémentations (Websphere, Weblogic, TopLink, …)  JPA versus Hibernate ● JPA est une norme ● Hibernate est plus riche en fonctionnalités • Et a toujours un temps d’avance sur JPA ! 10
  • 11. Définir un objet persistant  Un Entity matérialise en Java un objet du domaine de l’application ● Un objet du domaine est dit « persistant » : son état est conservé en base de données ● La plupart du temps, un objet du domaine correspond à une ligne d’une table de la base de données  Un Entity est un POJO annoté  Il est constitué d’une unique classe contenant ● Un identifiant unique • Il permet d’identifier un objet précisément parmi tous les objets instanciés de cette classe ● Des propriétés • Elles correspondent aux champs de la BDD ● Des méthodes • Elles implémentent les règles métiers spécifiques à l’objet du domaine ● Un constructeur sans paramètre • Les constructeurs avec paramètres sont autorisés, pourvu que le constructeur sans paramètre soit présent 11
  • 12. Rendre une classe persistante Indique qu’il s’agit d’une Entité persistante Indique que la propriété « id » @Entity est l’identifiant de l’entité class Book { Optionnel : génération automatique des valeurs de id @Id @GeneratedValue private int id; public int getId() {return id;} public void setId(int id) {this.id = id;} Par défaut, title est un attribut persistant private String title; public String getTitle() {return title;} public void setTitle(String title) {this.title = title;} @ManyToOne La propriété « author » private Author author; est un lien vers une autre public Author getAuthor() {return author;} entité public void setAuthor(Author author) {this.author = author;} private String summary; public String getSummary() {return summary;} public void setSummary(String summary) {this.summary = summary;} @ManyToMany La propriété « keyWords » est un lien multiple vers une private List<KeyWord> keyWords; autre entité public List<KeyWord> getKeyWords() {return keyWords;} public void setKeyWords(List<KeyWord> keyWords) {this.keyWords = keyWords;} } 12
  • 13. Identité en pratique  Toute classe Entity doit avoir un et un seul identifiant ● Correspond à la clé primaire de la table sur laquelle il est mappé ● Cet identifiant est immutable : une fois initialisé, il ne doit pas être modifié ● Généralement, cet identifiant est une propriété de l’entité • Mais on peut constituer un identifiant composé  La propriété qui définit l’identifiant est annoté avec @Id Identifiant qui doit être intialisé @Id par programmation public int id; Identifiant initialisé automatiquement par le @Id @GeneratedValue conteneur en utilisant la stratégie la plus public int id; adaptée en fonction de la BDD cible @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="bookSeq") public int id; Nom de la séquence Identifiant initialisé automa- utilisée tiquement par le conteneur en utilisant une séquence 13
  • 14. Configurer un gestionnaire de persistance  La configuration est donnée par le fichier META-INF/persistence.xml Définition d’un Classe d’implémentation du gestionnaire gestionnaire (ici Hibernate) <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence DataSource (BDD) utilisée http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="ticketPU" transaction-type=« JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/DefaultDS</jta-data-source> <properties> <property name=“hibernate.show_sql" value="true" /> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence> Paramètres spécifiques à l’implémentation du gestionnaire (ici Hibernate) 14
  • 15. Configuration du DataSource dans Tomcat  Cf. le fichier server.xml ● Répertoire apache-tomcat-7.0.12conf ● Dans le plugin eclipse : projet Servers, « Tomcat v7.0 Server at localhost- config » ● Dans la section GlobalNamingResource ajouter : <Resource name="jdbc/ticketPU" type="javax.sql.DataSource" driverClassName="org.h2.Driver" url="jdbc:h2:tcp://localhost//formation/database" password="" username="sa" auth="Container" maxActive="100" maxIdle="30" maxWait="10000" /> ● Dans la section contexte de la WebApp ajouter : <ResourceLink global="jdbc/ticketPU" Le nom doit correspondre au nom dans name="jdbc/ticketPU" persistence.xml type="javax.sql.DataSource" /> 15
  • 16. Le gestionnaire de persistance Classe javax.persistence.EntityManager fournie par Java EE Pour accéder aux entités, il faut interroger un gestionnaire de persistance Le gestionnaire de persistance sait créer, modifier et supprimer des entités ou trouver des entités selon leur clé primaire ou une requête JPQL (pseudo SQL) EntityManager em; Client nouveaulient = … Le même gestionnaire permet em.persist(nouveauClient); d’accéder à des entités de types Client jbond = différents em.find(Client.class, "007"); jbond.setPrenom(«James»); Client drNo = em.find(Client.class, "666"); em.remove(drNo); 16
  • 17. Du POJO à la base … Transaction JTA/JTS XA BDD JPA Hibernate Connexion Connexion DataSource BDD (EntityManager) (Session) JDBC HSQLDB Java/JEE Pour accéder à Pour transformer Pour profiter Pour accéder Pour Pour l’ORM de façon des objets Java en des services à la base à accéder stocker les standard enregistrements techniques partir de Java à la base données BDD (transactions distribuées, pooling 17
  • 18. Le gestionnaire de persistance On peut déclarer plusieurs gestionnaires de persistance Une gestionnaire de persistance ne peut être utilisé que par un seul thread à la fois Utile pour accéder à plusieurs bases de données (mode XA possible) 18