1 / 50

Gestion de la persistance des objets

Gestion de la persistance des objets. CSC4002 Claire Lecocq. Plan du document. Motivations Application exemple : la médiathèque Problématique en image Quel schéma de Base de Données Relationnelle ? Gérer la persistance dans Java : JDBC Conclusion. Application exemple : la médiathèque.

dacey
Download Presentation

Gestion de la persistance des objets

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gestion de la persistance des objets CSC4002 Claire Lecocq Janvier 2014

  2. Plan du document • Motivations • Application exemple : la médiathèque • Problématique en image • Quel schéma de Base de Données Relationnelle ? • Gérer la persistance dans Java : JDBC • Conclusion Janvier 2014

  3. 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 ? Janvier 2014

  4. Problématique en image Application UML Développement Objet Mapping chargement déchargement  Stockage des données Modèle E/A Relationnel SGBD Janvier 2014

  5. Plan du document • Motivations • 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éritage1 • Traduction de l’héritage en modèle relationnel • Gérer la persistance dans Java : JDBC 1 la généralisation/spécialisation est appelée dans ce cours héritage Janvier 2014

  6. Processus de conception d’une BD (rappel) Monde réel Indépendant du SGBD Recueil des besoins et analyse Contrat Besoin de la BD Prise en compte des particularités du SGBD Conception logique Schéma conceptuel (haut niveau) E/A UML Transformation du modèle Spécifique à un SGBD Relationnel Réseau Hiérarchique Schéma conceptuel (spécifique SGBD) Conception physique Placement Disque Optimisation Schéma physique (spécifique SGBD) Janvier 2014

  7. 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 CSC4001 : Introduction aux BD relationnelles • Diapositives 13 et 14 pour la médiathèque • Alors • 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 Janvier 2014

  8. Hypothèse 1 : CorrespondanceE/A  diagrammede classes Janvier 2014

  9. Hypothèse 1 : CorrespondanceE/A  diagrammede classes Problème héritage Janvier 2014

  10. Diagramme de classes de la médiathèque Janvier 2014

  11. Traduction du diagramme en dehors de l’arbre d’héritage • Classe façade Janvier 2014

  12. Traduction du diagramme en dehors de l’arbre d’héritage • Classes persistantes Janvier 2014

  13. 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 Janvier 2014

  14. Traduction du diagramme en dehors de l’arbre d’héritage • Modèle entité/association Localisation salle : varchar(20) rayon : varchar(5) FicheEmprunt dateEmprunt : date dateLimite : date depasse : integer Genre nom : varchar(20) nbEmprunts : integer Categorie nom : varchar(20) nbEmpruntsMax : integer tarifInscription : float coefDuree : float coefTarif : float codeReducUsed : integer 1,1 correspondre 0,n Client nom : varchar(20) prenom : varchar(20) adresse : varchar(20) nbEmpruntsEffectues : integer nbEmpruntsDepasses : integer nbEmpruntsEnCours : integer dateInscription : date codeReduction : integer dateRenouvellement : date 0,n appartenir 1,1 Janvier 2014

  15. Traduction du diagramme en dehors de l’arbre d’héritage • Modèle relationnel Localisation salle : varchar(20) rayon : varchar(5) FicheEmprunt dateEmprunt dateLimite depasse nom prenom Genre nom : varchar(20) nbEmprunts : integer Categorie nom nbEmpruntsMax tarifInscription coefDuree coefTarif codeReducUsed Client nom prenom adresse nbEmpruntsEffectues nbEmpruntsDepasses nbEmpruntsEnCours dateInscription codeReduction dateRenouvellement catclient Janvier 2014

  16. Il reste la partie la plus intéressante : l’arbre d’héritage ! Localisation salle : varchar(20) rayon : varchar(5) FicheEmprunt dateEmprunt dateLimite depasse nom prenom Genre nom : varchar(20) nbEmprunts : integer Categorie nom nbEmpruntsMax tarifInscription coefDuree coefTarif codeReducUsed Client nom prenom adresse nbEmpruntsEffectues nbEmpruntsDepasses nbEmpruntsEnCours dateInscription codeReduction dateRenouvellement catclient Janvier 2014

  17. Revenons sur la sémantique de l’héritage (1) Etudiant noEtud cycle Salarie salaire Prive prime Public indice • Spécialisation peut être : • Partielle : une instance peut ne pas être spécialisée* • Totale : toute instance est spécialisée dans au moins une classe enfant* Personne nom prénom adresse X Personne  Etudiant  Salarie Partielle Totale Salarie = Prive  Public * Dans les cours UML et Java, les termes utilisés sont classes abstraites et classes concrètes Janvier 2014

  18. Revenons sur la sémantique de l’héritage (2) Etudiant noEtud cycle Salarie salaire Prive prime Public indice • Spécialisation peut être : • 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 Personne nom prénom adresse Etudiant  Salarié  Recouvrement Partition Doctorant vacataire 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++) Janvier 2014

  19. Traduction de l’héritage en modèle relationnel • 3 correspondances possibles : • Correspondance directe • Correspondance ascendante • Correspondance par aplatissement 3.1. Pour partition 3.2. Pour recouvrement Janvier 2014

  20. Correspondance directe (n° 1) Relation clé Contrainte d’intégrité référentielle • Une classe  une relation BD • Liaison entre les relations se fait via la clé • Correspondance de l’arbre de Document Document code titre auteur annee empruntable emprunte nbEmprunts Création d’une clé Audio code classification Video code dureeFilm mentionLegale Livre code nbPages Clé + clé étrangère Janvier 2014

  21. Correspondance directe (n° 1) - suite Relation clé Contrainte d’intégrité référentielle Document code titre auteur annee empruntable emprunte nbEmprunts Typedoc Classification nombrePages Durrefilm Mentionlegale createviewvueDocument(code, titre, auteur, annee, empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts, typedoc, classification, nombrePages, dureeFilm, mentionLegale) as select document.code, titre, auteur, annee, empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts,'Audio', classification, null, null, null from audio, document whereaudio.code = document.code union select document.code, titre, auteur, annee, empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts,'Video', null, null, dureeFilm, mentionLegale fromvideo, document wherevideo.code = document.code union select document.code, titre, auteur, annee, empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts,'Livre', null, nombrePages, null, null from livre, document wherelivre.code = document.code ; Document code titre auteur annee empruntable emprunte nbEmprunts Vue Audio code classification Video code dureeFilm mentionLegale Livre code nbPages Construction de la vue par requête Janvier 2014

  22. Correspondance directe pour la médiathèque Document code titre … Dénormalisation Audio code classification FicheEmprunt nom prenom code dateEmprunt dateLimite depasse Client nom prenom adresse nbEmpruntsEffectues nbEmpruntsDepasses nbEmpruntsEnCours catclient dateInscription codeReduction dateRenouvellement Document code titre auteur annee empruntable emprunte nbEmprunts nomGenre salle rayon Video code dureeFilm mentionLegale Categorie nom nbEmpruntsMax tarifInscription coefDuree coefTarif codeReducUsed Livre code nbPages Localisation salle rayon Solution retenue pour le TP Genre nom nbEmprunts Janvier 2014

  23. Correspondance directe et typologie des arbres d’héritage Janvier 2014

  24. Correspondance ascendante (n° 2) • Chaque classe spécialisée  une relation BD • Classe parent  une vue • Correspondance de l’arbre de Document CREATE VIEW Document AS SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM Audio UNION SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM Video UNION SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM Livre Document code titre auteur annee empruntable emprunte nbEmprunts Audio code titre auteur annee empruntable emprunte nbEmprunts classification Video code titre auteur annee empruntable emprunte nbEmprunts dureeFilm mentionLegale Livre code titre auteur annee empruntable emprunte nbEmprunts nbPages Vue Construction de la vue par requête Janvier 2014

  25. 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 FicheEmpruntAudio code nom prenom Audio code FicheEmpruntVideo code nom prenom Client nom prenom Document code Video code FicheEmpruntLivre code nom prenom Livre code FicheEmprunt Janvier 2014

  26. Correspondance ascendante et typologie des arbres d’héritage Janvier 2014

  27. Correspondance par aplatissement (n° 3.1) • Ensemble des classes de la hiérarchie  une seule relation BD • Éventuellement chaque classe  une vue • Correspondance de l’arbre de Document Document code titre auteur annee empruntable emprunte nbEmprunts typeDocument classification dureeFilm mentionLegale nbPages CREATE VIEW Audio AS SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts, classification FROM Document WHERE typeDocument=‘Audio’ Audio code … classification Video code … dureeFilm mentionLegale Livre code … nbPages Janvier 2014

  28. Correspondance par aplatissement 3.1 pour la médiathèque Client nom prenom adresse nbEmpruntsEffectues nbEmpruntsDepasses nbEmpruntsEnCours typeClient dateInscription dateRenouvellement codeReduction dateCotisation FicheEmprunt nom prenom code dateEmprunt dateLimite depasse Genre nom nbEmprunts Document code titre auteur annee empruntable emprunte nbEmprunts nomGenre salle rayon typeDocument classification dureeFilm mentionLegale nbPages Localisation salle rayon Categorie nom nbEmpruntsMax tarifInscription coefDuree coefTarif codeReducUsed Solution retenue pour le TP Janvier 2014

  29. Correspondance par aplatissement 3.1 et typologie des arbres d’héritage Janvier 2014

  30. 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 nbEmprunts AudioB VideoB LivreB Classification dureeFilm mentionLegale nbPages CREATE VIEW Audio AS SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts, classification FROM Document WHERE AudioB = 1 Janvier 2014

  31. Correspondance par aplatissement 3.2 et typologie des arbres d’héritage Janvier 2014

  32. QCM – Vrai ou faux • Il y a toujours un modèle relationnel « correspondant » à un diagramme de classes • Le nombre de relations dans le modèle relationnel est égal au nombre de classes dans le diagramme de classes • Une classe abstraite est 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 Janvier 2014

  33. Plan du document • Motivations • Quel schéma de Base de Données Relationnelle ? • Gérer la persistance dans Java : JDBC • Qu’est ce que JDBC ? • Que faire pour pouvoir utiliser JDBC ? • Principaux objets mis en œuvre • Tuyaux de communication : Connection et Statement • Exécution d’une requête : ResultSet • Correspondance de type • Exemple sur les chaînes de caractères • Correspondance de type SQL/Java • Étapes d’interaction avec le SGBD • Politique de gestion de la persistance • Conclusion Janvier 2014

  34. Qu’est ce que JDBC ? • Java DataBaseConnectivity • 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) • Dépendants des SGBDs cibles • « Tout » SGBD a un pilote JDBC Application java Pilote Protocole du SGBD SGBD Janvier 2014

  35. 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.forName("oracle.jdbc.OracleDriver"); Class.forName("com.mysql.jdbc.Driver" ); Class.forName("org.postgresql.Driver" ); Janvier 2014

  36. Tuyaux de communication :Connection et Statement SGBD PostgresSQL Application java Media : Mediatheque Statement statement1 « SELECT * FROM Document » Nom : string …. Connection : @Connection Pilote MySQL Statement statement2 Constructeur() rechercheBD() miseAJourBD() Destructeur() Statement statement3 Janvier 2014

  37. Exécution d’une requête :ResultSet SGBD PostgresSQL Localisation Application java Media : Mediatheque Statement stmt1 ResultSet rset = stmt1.executeQuery ("select * from localisation"); Nom : string …. lesLocalisations: collection de @Localisation Pilote MySQL Janvier 2014

  38. Correspondance de types : Exemple sur les chaînes de caractères SGBD PostgresSQL Localisation salle : varchar(20) Application java String salle Statement stmt1 rset contient "select * from localisation"); while (rset.next()) { … String salle = rset.getString("salle"); … } Janvier 2014

  39. Correspondance de type SQL/Java (1) Janvier 2014

  40. 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 ResultSetrset = stmt.executeQuery("select * from document"); while (rset.next()) { … boolean empruntable = rset.getInt("empruntable") > 0; boolean emprunte = rset.getInt("emprunte") > 0; … } Janvier 2014

  41. Étapes d’interaction avec le SGBD • Ouvrir une connexion • Instance de Connection • 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 PreparedStatement INSERT INTO localisation (salle, rayon) values (?, ?) • Demander l’exécution de ces instructions par le SGBD : • Requête d’interrogation (SELECT) : méthodeexecuteQuery() sur le *Statement • Requête de mise à jour (INSERT, UPDATE, DELETE) : méthodeexecuteUpdate() sur le *Statement • Fermer la connexion : méthode close() sur la connexion Janvier 2014

  42. 1. Établir une connexion String driver = "org.postgresql.Driver"; String urlBd = "jdbc:postgresql://mysql-inf/TPCONCEPTION"; try { Class.forName(driver).newInstance(); }catch(Exception cnfe) { throw new OperationImpossible("Echec acces Pilote BD- " + driver + " " + cnfe); } Statement stmt = null; try { laConnexion = DriverManager.getConnection(urlBd,compte,passe); } catch(SQLException qe) { throw new OperationImpossible("Echec connexion BD- " + qe + " " + urlBD); } 2012

  43. 2 et 3. Exécuter une requête de mise à jour (1) privatevoidinsererBD(Document doc) throwsOperationImpossible { try { PreparedStatementstmt; if (doc instanceof Audio ){ Audio au = (Audio) doc; stmt = laConnexion.prepareStatement("INSERT INTO document (code, titre, auteur, annee, empruntable, emprunte, salle, rayon, nomgenre, nbemprunts, typedoc, classification) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'Audio', ?)"); stmt.setString(11, au.getClassification()); } else { // Video puis Livre } Janvier 2014

  44. 2 et 3. Exécuter une requête de mise à jour (2) stmt.setString(1, doc.getCode()); stmt.setString(2, doc.getTitre()); stmt.setString(3, doc.getAuteur()); stmt.setString(4, doc.getAnnee()); stmt.setInt(5,doc.estEmpruntable()?1:0); stmt.setInt(6, doc.estEmprunte()?1:0); stmt.setString(7, doc.getLocalisation().getSalle()); stmt.setString(8, doc.getLocalisation().getRayon()); stmt.setString(9, doc.getGenre().getNom()); stmt.setInt(10, doc.getNbEmprunts()) } catch (SQLException e) { throw new OperationImpossible("Echec insertion BD- " + e); } } Janvier 2014

  45. QCM - Vrai/faux • Je peux me passer de « driver » pour interagir avec le SGBD • Je crée une connexion (objet connection) à chaque fois que je dois interagir avec le SGBD. Je la referme après chaque interaction • En fonction du type de requête SQL à exécuter, je choisis judicieusement la méthode execute* à utiliser • Un ResultSet peut contenir de nombreux « tuples » • Les types Java et les types de bases de données correspondent parfaitement • La méthode prepareStatement est utilisée pour les requêtes paramétrées Janvier 2014

  46. 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 ? Janvier 2014

  47. 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 Janvier 2014

  48. Chargement / déchargement (2) • Statique • Adapté aux petits volumes de données • Faible taux de mises à jour • Simple à mettre en œuvre • Dynamique • Adapté aux volumes de données importants • Fort taux de mises à jour • Meilleure résistance aux fautes • Plus compliqué à programmer Janvier 2014

  49. Plan du document • Motivations • Application exemple : la médiathèque • Problématique en image • Quel schéma de Base de Données Relationnelle ? • Gérer la persistance dans Java : JDBC • Conclusion Janvier 2014

  50. Conclusion • 1 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, TopLink • Proposition de modèles de persistance • Méthodes « haut » niveau pour interagir avec le SGBD Janvier 2014

More Related