Gestion de la persistance des objets CSC 4002
Gestion de la persistance des objets CSC 4002 Claire Lecocq Institut Mines-Télécom Janvier 2014
Plan du document 1. Motivations 1. Application exemple : la médiathèque 2. Problématique en image 2. Quel schéma de Base de Données Relationnelle ? 3. Gérer la persistance dans Java : JDBC 4. Conclusion 2 Institut Mines-Télécom Janvier 2014
Application exemple : la médiathèque ■ Développement orienté objet : standard de fait ■ Où sont stockées les données ? ● Durée de vie ? ● Partage ? ● Volume de données ? ■ Une idée ? 3 Institut Mines-Télécom Janvier 2014
Application Problématique en image UML Développement Objet Mapping chargement Stockage des données déchargement Modèle E/A Relationnel SGBD 4 Institut Mines-Télécom Janvier 2014
Plan du document 1. Motivations 2. Quel schéma de Base de Données Relationnelle ? ● Processus de conception d’une BD (rappel) ● Existe t-il un modèle relationnel pour un diagramme de classes ? ● Diagramme de classes de la médiathèque ● Traduction du diagramme en dehors de l’arbre d’héritage ● Héritage − Revenons sur la sémantique de l’héritage 1 − Traduction de l’héritage en modèle relationnel 3. Gérer la persistance dans Java : JDBC 4. Conclusion 1 la généralisation/spécialisation est appelée dans ce cours héritage 5 Institut Mines-Télécom Janvier 2014
Processus de conception d’une BD (rappel) Besoin de la BD Prise en compte des particularités du SGBD Contrat Conception logique Schéma conceptuel (haut niveau) E/A UML Indépendant du SGBD Monde réel Recueil des besoins et analyse Transformation du modèle Conception physique Schéma physique (spécifique SGBD) 6 Institut Mines-Télécom Placement Disque Optimisation Janvier 2014 Spécifique à un SGBD Schéma conceptuel (spécifique SGBD) Relationnel Réseau Hiérarchique
Existe t-il un modèle relationnel pour un diagramme de classes ? ■ Si ● ● Hypothèse 1 : existe correspondance E/A diagramme de classes Hypothèse 2 : existe traduction E/A relationnel − − Voir cours CSC 4001 : Introduction aux BD relationnelles Diapositives 13 et 14 pour la médiathèque ■ Alors ● 7 Transformer un diagramme de classes UML (partie statique) en un schéma relationnel « équivalent » peut se ramener à la transformation d’un schéma E/A vers un schéma relationnel Institut Mines-Télécom Janvier 2014
Hypothèse 1 : Correspondance E/A diagramme de classes SI-BD Entité/Association Génie logiciel - langages Diagramme de classes Entité Classe Entité faible Composition Association sans attribut Association avec attribut(s) Classe d’association Pas de correspondance Héritage – Généralisation, spécialisation Clé Identité d’objet Attribut calculé 8 Attribut dérivé Opération Cardinalités Multiplicités Attribut d’une entité de paramètres Attributs de classe Institut Mines-Télécom Janvier 2014
Hypothèse 1 : Correspondance E/A diagramme de classes SI-BD Entité/Association Génie logiciel - langages Diagramme de classes Entité Classe Entité faible Composition Association sans attribut Association avec attribut(s) Classe d’association Pas de correspondance Héritage – Généralisation, spécialisation Clé Identité d’objet Attribut calculé Problème héritage Attribut dérivé Opération Cardinalités Multiplicités Attribut d’une entité de paramètres Attributs de classe 9 Institut Mines-Télécom Janvier 2014
Diagramme de classes de la médiathèque 10 Institut Mines-Télécom Janvier 2014
Traduction du diagramme en dehors de l’arbre d’héritage ■ Classe façade 11 Institut Mines-Télécom Janvier 2014
Traduction du diagramme en dehors de l’arbre d’héritage ■ Classes persistantes 12 Institut Mines-Télécom Janvier 2014
Règles de traduction ■ Classe entité ● Attribut d’instance attribut d’entité ● Adapter au mieux les correspondances de types ● Définir la clé de l’entité ■ Association, agrégation association ■ Composition entité faible ■ Multiplicités cardinalités 13 Institut Mines-Télécom Janvier 2014
Traduction du diagramme en dehors de l’arbre d’héritage ■ Modèle entité/association Localisation salle : varchar(20) rayon : varchar(5) Genre nom : varchar(20) nb. Emprunts : integer Fiche. Emprunt date. Emprunt : date. Limite : date depasse : integer 1, 1 correspondre 0, n Client nom : varchar(20) prenom : varchar(20) adresse : varchar(20) nb. Emprunts. Effectues : integer nb. Emprunts. Depasses : integer 1, 1 nb. Emprunts. En. Cours : integer date. Inscription : date code. Reduction : integer date. Renouvellement : date 14 Institut Mines-Télécom Categorie nom : varchar(20) nb. Emprunts. Max : integer tarif. Inscription : float coef. Duree : float coef. Tarif : float code. Reduc. Used : integer 0, n appartenir Janvier 2014
Hypothèse 2 : Traduction du diagramme en dehors de l’arbre d’héritage ■ Modèle relationnel Localisation salle : varchar(20) rayon : varchar(5) Genre nom : varchar(20) nb. Emprunts : integer Fiche. Emprunt date. Limite depasse nom prenom Client nom prenom adresse nb. Emprunts. Effectues nb. Emprunts. Depasses nb. Emprunts. En. Cours date. Inscription code. Reduction date. Renouvellement catclient 15 Institut Mines-Télécom Categorie nom nb. Emprunts. Max tarif. Inscription coef. Duree coef. Tarif code. Reduc. Used Janvier 2014
Il reste la partie la plus intéressante : l’arbre d’héritage ! Localisation salle : varchar(20) rayon : varchar(5) Genre nom : varchar(20) nb. Emprunts : integer Fiche. Emprunt date. Limite depasse nom prenom Client nom prenom adresse nb. Emprunts. Effectues nb. Emprunts. Depasses nb. Emprunts. En. Cours date. Inscription code. Reduction date. Renouvellement catclient 16 Institut Mines-Télécom Categorie nom nb. Emprunts. Max tarif. Inscription coef. Duree coef. Tarif code. Reduc. Used Janvier 2014
Revenons sur la sémantique de l’héritage (1) ■ Spécialisation peut être : Personne nom prénom adresse ● Partielle* : une instance peut ne pas être spécialisée X ● Totale** : toute instance est spécialisée dans au moins une classe enfant Partielle Etudiant no. Etud cycle Personne Etudiant Salarie salaire Totale Prive prime Public indice Salarie = Prive Public Dans les cours UML et Java, les termes utilisés sont classes concrètes* et classes abstraites* 17 Institut Mines-Télécom Janvier 2014
Revenons sur la sémantique de l’héritage (2) ■ Spécialisation peut être : Personne nom prénom adresse ● Recouvrement : une instance peut être spécialisée dans plusieurs classes enfants* ● Partition : une instance est spécialisée dans au plus une classe enfant Etudiant Salarié Recouvrement Etudiant no. Etud cycle Salarie salaire Partition Doctorant vacataire Prive prime Prive Public = • Dans les cours UML et Java, l’héritage multiple a été ignoré pour raison de simplicité et aussi parce que Java ne l’autorise pas (contrairement à C++) 18 Institut Mines-Télécom Janvier 2014 Public indice
Traduction de l’héritage en modèle relationnel ■ 3 correspondances possibles : 1. Correspondance directe 2. Correspondance ascendante 3. Correspondance par aplatissement 3. 1. Pour partition 3. 2. Pour recouvrement 19 Institut Mines-Télécom Janvier 2014
Correspondance directe (n° 1) ■ Une classe une relation BD ■ Liaison entre les relations se fait via la clé ■ Correspondance de l’arbre de Document code titre auteur annee empruntable emprunte nb. Emprunts Création d’une clé Relation clé Audio code classification Clé + clé étrangère 20 Institut Mines-Télécom Video code duree. Film mention. Legale Contrainte d’intégrité référentielle Livre code nb. Pages Janvier 2014
Correspondance directe (n° 1) - suite Vue. Document code titre auteur annee empruntable emprunte nb. Emprunts Typedoc Classification nombre. Pages Durrefilm Mentionlegale Audio code classification 21 create view vue. Document(code, titre, auteur, annee, empruntable, emprunte, salle, rayon, nom. Genre, nb. Emprunts, typedoc, classification, nombre. Pages, duree. Film, mention. Legale) as select document. code, titre, auteur, annee, empruntable, emprunte, salle, rayon, nom. Genre, nb. Emprunts, 'Audio', classification, null, null from audio, document where audio. code = document. code union select document. code, titre, auteur, annee, empruntable, emprunte, salle, rayon, nom. Genre, nb. Emprunts, 'Video', null, duree. Film, mention. Legale from video, document where video. code = document. code union select document. code, titre, auteur, annee, empruntable, emprunte, salle, rayon, nom. Genre, nb. Emprunts, 'Livre', null, nombre. Pages, null from livre, document where livre. code = document. code ; Document code titre auteur annee empruntable emprunte nb. Emprunts Video code duree. Film mention. Legale Institut Mines-Télécom Livre code nb. Pages Relation clé Contrainte d’intégrité référentielle Vue Construction de la vue par requête Janvier 2014
Correspondance directe pour la médiathèque Vue. Document code titre … Audio code classification Video code duree. Film mention. Legale Livre code nb. Pages Genre nom nb. Emprunts 22 Document code titre auteur annee empruntable emprunte nb. Emprunts nom. Genre salle rayon Localisation salle rayon Institut Mines-Télécom Fiche. Emprunt nom prenom code date. Emprunt date. Limite depasse Client nom prenom adresse nb. Emprunts. Effectues nb. Emprunts. Depasses nb. Emprunts. En. Cours catclient date. Inscription code. Reduction date. Renouvellement Categorie nom nb. Emprunts. Max tarif. Inscription coef. Duree coef. Tarif code. Reduc. Used Solution retenue pour le TP Janvier 2014
Correspondance directe et typologie des arbres d’héritage Spécialisation 23 Spécialisation Totale Partielle Partition Recouvrement OK Vérification : 1 tuple de la « relation parent » est toujours référencé par 1 tuple de la « relation enfant » OK OK Vérification : nonduplication de clé entre « relations enfants » OK Institut Mines-Télécom Remarques Reconstitution de l'objet par jointure Sémantique très proche du modèle objet Fonctionne pour tout arbre d’héritage Janvier 2014
Correspondance ascendante (n° 2) ■ Chaque classe spécialisée une relation BD ■ Classe parent une vue ■ Correspondance de l’arbre de Document code titre auteur annee empruntable emprunte nb. Emprunts Audio code titre auteur annee empruntable emprunte nb. Emprunts classification 24 Institut Mines-Télécom Video code titre auteur annee empruntable emprunte nb. Emprunts duree. Film mention. Legale CREATE VIEW Document AS SELECT code, titre, auteur, annee, empruntable, emprunte, nb. Emprunts FROM Audio UNION SELECT code, titre, auteur, annee, empruntable, emprunte, nb. Emprunts FROM Video UNION SELECT code, titre, auteur, annee, empruntable, emprunte, nb. Emprunts FROM Livre code titre auteur annee empruntable emprunte nb. Emprunts nb. Pages Vue Construction de la vue par requête Janvier 2014
Correspondance ascendante pour la médiathèque ■ Une vue n’est pas une relation BD ! ● Pas de clé non référençable par une clé étrangère Document code 25 Audio code Fiche. Emprunt. Audio code nom prenom Video code Fiche. Emprunt. Video code nom prenom Livre code Fiche. Emprunt. Livre code nom prenom Institut Mines-Télécom Client nom prenom Fiche. Emprunt Janvier 2014
Correspondance ascendante et typologie des arbres d’héritage Spécialisation Totale Partielle Partition Recouvrement OK KO Redondance de données Remarques Multiplie les relations Évite les jointures pour reconstruire les objets Spécialisation totale. Classe abstraite = vue (relation virtuelle) Difficile d’assurer l’unicité des identificateurs 26 Institut Mines-Télécom Janvier 2014
Correspondance par aplatissement (n° 3. 1) ■ Ensemble des classes de la hiérarchie une seule ■ ■ relation BD Éventuellement chaque classe « enfant » une vue Correspondance de l’arbre de Document code titre auteur annee empruntable emprunte nb. Emprunts type. Document classification duree. Film mention. Legale nb. Pages Audio code … classification 27 Institut Mines-Télécom Video code … duree. Film mention. Legale CREATE VIEW Audio AS SELECT code, titre, auteur, annee, empruntable, emprunte, nb. Emprunts, classification FROM Document WHERE type. Document=‘Audio’ Livre code … nb. Pages Janvier 2014
Correspondance par aplatissement 3. 1 pour la médiathèque Genre nom nb. Emprunts Localisation salle rayon Document code titre auteur annee empruntable emprunte nb. Emprunts nom. Genre salle rayon type. Document classification duree. Film mention. Legale nb. Pages Fiche. Emprunt nom prenom code date. Emprunt date. Limite depasse Client nom prenom adresse nb. Emprunts. Effectues nb. Emprunts. Depasses nb. Emprunts. En. Cours type. Client date. Inscription date. Renouvellement code. Reduction date. Cotisation Categorie nom nb. Emprunts. Max tarif. Inscription coef. Duree coef. Tarif code. Reduc. Used Solution retenue pour le TP 28 Institut Mines-Télécom Janvier 2014
Correspondance par aplatissement 3. 1 et typologie des arbres d’héritage Spécialisation Totale Partielle Partition Recouvrement OK OK Si attribut donnant le nom de la classe autorisé à null OK KO Remarques Évite les jointures pour reconstruire les objets Du vide dans la relation (valeurs nulles) Spécialisation totale : classes abstraites relations (concrètes), classes concrètes vues (virtuelles) Souvent la solution la plus simple à mettre en place; la plus choisie 29 Institut Mines-Télécom Janvier 2014
Correspondance par aplatissement 3. 2 pour la médiathèque ■ Variante de la correspondance 3. 1 avec utilisation ■ d’un attribut booléen supplémentaire par classe enfant Si un document pouvait être à la fois un Audio et une Vidéo Document code titre auteur annee empruntable emprunte nb. Emprunts Audio. B Video. B Livre. B Classification duree. Film mention. Legale nb. Pages 30 Institut Mines-Télécom CREATE VIEW Audio AS SELECT code, titre, auteur, annee, empruntable, emprunte, nb. Emprunts, classification FROM Document WHERE Audio. B = 1 Janvier 2014
Correspondance par aplatissement 3. 2 et typologie des arbres d’héritage Spécialisation 31 Spécialisation Remarques Totale Partielle Partition Recouvrement OK OK Si tous les attributs booléens correspondant aux classes enfants sont autorisés à FAUX/NULL Non pertinent 3. 1 OK Institut Mines-Télécom idem 3. 1 Janvier 2014
QCM – Vrai ou faux ■ Y a t-il toujours un modèle relationnel ■ ■ ■ 32 « correspondant » à un diagramme de classes ? Le nombre de relations dans le modèle relationnel est-il égal au nombre de classes dans le diagramme de classes ? Une classe abstraite est-elle toujours traduite par une vue ? S’il existe plusieurs modèles relationnels « correspondant » à un diagramme de classes, je choisis au hasard : il n’y a pas de critère de choix ? Institut Mines-Télécom Janvier 2014
Plan du document 1. Motivations 2. Quel schéma de Base de Données Relationnelle ? 3. Gérer la persistance dans Java : JDBC 1. Qu’est ce que JDBC ? 2. Que faire pour pouvoir utiliser JDBC ? 3. Principaux objets mis en œuvre 1. Tuyaux de communication : Connection et Statement 2. Exécution d’une requête : Result. Set 3. Correspondance de type 1. 2. Exemple sur les chaînes de caractères Correspondance de type SQL/Java 4. Étapes d’interaction avec le SGBD 5. Politique de gestion de la persistance 4. Conclusion 33 Institut Mines-Télécom Janvier 2014
Qu’est ce que JDBC ? ■ ■ Java Data. Base Connectivity API Java pour accéder à des SGBDR via SQL Indépendance / SGBD cible (via des pilotes) Fourni par le paquetage java. sql ● Interfaces ● Implémentées dans les pilotes (en anglais, driver) Application java Pilote − Dépendants des SGBDs cibles − « Tout » SGBD a un pilote JDBC Protocole du SGBD 34 Institut Mines-Télécom Janvier 2014
Que faire pour pouvoir utiliser JDBC ? ■ Avoir un pilote ■ Le référencer dans le CLASSPATH ■ Dans chaque classe qui utilise des ordres JDBC ● Importer le paquetage java. sql import java. sql. *; ● Charger en mémoire la classe du (des) pilote(s) avant d’utiliser JDBC : Class. for. Name("oracle. jdbc. Oracle. Driver"); Class. for. Name("com. mysql. jdbc. Driver" ); Class. for. Name("org. postgresql. Driver" ); 35 Institut Mines-Télécom Janvier 2014
Tuyaux de communication : Classe Connection et Statement Media : Mediatheque Nom : string …. Connection : @Connection Constructeur() recherche. BD() mise. AJour. BD() Destructeur() 36 Pilote Postgre. SQL Application java Institut Mines-Télécom Statement statement 1 « SELECT * FROM Document » Statement statement 2 SGBD Postgres. SQL Statement statement 3 Janvier 2014
Exécution d’une requête : Classe Result. Set Application java Nom : string …. les. Localisations: collection de @Localisation 37 Pilote My. SQL media : Mediatheque Institut Mines-Télécom Statement stmt 1 Result. Set rset = stmt 1. execute. Query ("select * from localisation"); SGBD Postgres. SQL Localisation Janvier 2014
Correspondance de types : Exemple sur les chaînes de caractères Application java Statement stmt 1 rset contient "select * from localisation"; while (rset. next()) { … String salle = rset. get. String("salle"); … } String salle 38 Institut Mines-Télécom SGBD Postgres. SQL Localisation salle : varchar(20) Janvier 2014
Correspondance de type SQL/Java (1) 39 Institut Mines-Télécom Janvier 2014
Correspondance de type SQL/Java (2) ■ Pas de booléen en bases de données ! ■ Document : ■ empruntable et emprunte : boolean dans le ■ diagramme de classe empruntable et emprunte : integer dans la base de données Result. Set rset = stmt. execute. Query("select * from document"); while (rset. next()) { … boolean empruntable = rset. get. Int("empruntable") > 0; boolean emprunte = rset. get. Int("emprunte") > 0; … } 40 Institut Mines-Télécom Janvier 2014
Étapes d’interaction avec le SGBD 1. Ouvrir une connexion ● Instance de Connection 2. Créer des « fils » pour supporter l’envoi d’instructions SQL au sein de la connexion ● Requête non paramétrée dans une instance de Statement ● Requête paramétrée dans une instance de Prepared. Statement INSERT INTO localisation (salle, rayon) values (? , ? ) 3. Demander l’exécution de ces instructions par le SGBD : ● 41 Requête d’interrogation (SELECT) : méthode execute. Query() sur le *Statement ● Requête de mise à jour (INSERT, UPDATE, DELETE) : méthode execute. Update() sur le *Statement 4. Fermer la connexion : méthode close() sur la connexion Institut Mines-Télécom Janvier 2014
1. Établir une connexion String driver = "org. postgresql. Driver"; String url. Bd = "jdbc: postgresql: //mysql-inf/TPCONCEPTION"; try { Class. for. Name(driver). new. Instance(); }catch(Exception cnfe) { throw new Operation. Impossible("Echec acces Pilote BD- " + driver + " " + cnfe); } Statement stmt = null; try { la. Connexion = Driver. Manager. get. Connection(url. Bd, compte, passe); } catch(SQLException qe) { throw new Operation. Impossible("Echec connexion BD- " + qe + " " + url. BD); } Institut Mines-Télécom 2012
2 et 3. Exécuter une requête de mise à jour (1) private void inserer. BD(Document doc) throws Operation. Impossible { try { Prepared. Statement stmt; if (doc instanceof Audio ){ Audio au = (Audio) doc; stmt = la. Connexion. prepare. Statement("INSERT INTO document (code, titre, auteur, annee, empruntable, emprunte, salle, rayon, nomgenre, nbemprunts, typedoc, classification) values (? , ? , ? , 'Audio', ? )"); stmt. set. String(11, au. get. Classification()); } else { // Video puis Livre } 43 Institut Mines-Télécom Janvier 2014
2 et 3. Exécuter une requête de mise à jour (2) stmt. set. String(1, doc. get. Code()); stmt. set. String(2, doc. get. Titre()); stmt. set. String(3, doc. get. Auteur()); stmt. set. String(4, doc. get. Annee()); stmt. set. Int(5, doc. est. Empruntable()? 1: 0); stmt. set. Int(6, doc. est. Emprunte()? 1: 0); stmt. set. String(7, doc. get. Localisation(). get. Salle()); stmt. set. String(8, doc. get. Localisation(). get. Rayon()); stmt. set. String(9, doc. get. Genre(). get. Nom()); stmt. set. Int(10, doc. get. Nb. Emprunts()) } catch (SQLException e) { throw new Operation. Impossible("Echec insertion " + e); } } 44 Institut Mines-Télécom BD- Janvier 2014
QCM - Vrai/faux ■ Puis-je me passer de « driver » pour interagir avec le ■ ■ ■ 45 SGBD ? Dois-je créer une connexion (objet Connection) à chaque fois que je dois interagir avec le SGBD et la refermer après chaque interaction ? Faut –il, en fonction du type de requête SQL à exécuter, choisir judicieusement la méthode execute* à utiliser Un Result. Set peut-il contenir de nombreux « tuples » ? Les types Java et les types de bases de données correspondent-ils parfaitement ? La méthode prepare. Statement est-elle utilisée pour les requêtes paramétrées ? Institut Mines-Télécom Janvier 2014
Politique de gestion de la persistance ■ Comment intégrer le code JDBC qui assure le chargement et le déchargement des objets Java depuis la BD ? ● En structurant au mieux le code (limiter le nombre d’opérations à modifier) ● Quel(s) objet(s) charger et quand ? ● Quel(s) objet(s) décharger et quand ? 46 Institut Mines-Télécom Janvier 2014
Chargement / déchargement (1) ■ Chargement ● Constructeur d’objet intégrant tous les attributs ● Statique : constructeur de « collections » − Similaire au TP médiathèque sérialisée − Volume de données contrôlé ● Dynamique : constructeur d’objet (nécessité d’une clé pour sélectionner l’objet) − Charger les objets connexes ■ Déchargement ● Statique : à la fin du programme (attention aux pertes d’information) ● Dynamique : dans les opérations de mise à jour 47 Institut Mines-Télécom Janvier 2014
Chargement / déchargement (2) ■ Statique ● Adapté aux petits volumes de données ● Faible taux de mises à jour ● Simple à mettre en œuvre ■ Dynamique ● ● 48 Adapté aux volumes de données importants Fort taux de mises à jour Meilleure résistance aux fautes Plus compliqué à programmer Institut Mines-Télécom Janvier 2014
Plan du document 1. Motivations 1. Application exemple : la médiathèque 2. Problématique en image 2. Quel schéma de Base de Données Relationnelle ? 3. Gérer la persistance dans Java : JDBC 4. Conclusion 49 Institut Mines-Télécom Janvier 2014
Conclusion ■ Pour un diagramme de classes ● Plusieurs modèles relationnels pour la persistance ● Savoir choisir ■ Schéma relationnel ● Relation + attributs avec des domaines + clé + contraintes d’intégrité ■ JDBC : une solution technique ● « bas » niveau ■ Canevas logiciels industriels ● Hibernate, Top. Link ● Proposition de modèles de persistance ● Méthodes « haut » niveau pour interagir avec le SGBD 50 Institut Mines-Télécom Janvier 2014
- Slides: 50