Institut Mines-Télécom age 1 Gestion de la persistance des objets CSC4002 Claire Lecocq 2012
Apr 03, 2015
Institut Mines-TélécomPage 1
Gestion de la persistance des objets
CSC4002
Claire Lecocq
2012
Institut Mines-TélécomPage 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
2012
Institut Mines-TélécomPage 3
Application exemple : la médiathèque
■Développement objet : standard de fait
■Où sont stockées les données ?● Durée de vie ?● Partage ?● Volume de données ?
■Une idée ?
2012
Institut Mines-TélécomPage 4
Problématique en image
2012
Stockage des données
Application
Mapping chargement
déchargement
UMLDéveloppement
Objet
Modèle E/ARelationnel
SGBD
Institut Mines-TélécomPage 5
Plan du document
■Motivations■Quel schéma de Base de Données Relationnelle ?
● Processus de conception d’une BD (rappel)● Entité/Association versus diagramme de classes UML● Existe t-il un modèle relationnel pour un diagramme de
classes ?● Diagramme de classes de la médiathèque● 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
2012
1 la généralisation/spécialisation est appelée dans ce cours héritage
Institut Mines-TélécomPage 6
Processus de conception d’une BD (rappel)
2012
Monde réel
Recueil des besoins et analyse
Besoin de la BD
Conception logique
Schéma conceptuel (haut niveau)
Transformation du modèle
Schéma conceptuel (spécifique SGBD)
Conception physique
Schéma physique (spécifique SGBD)
Indépendant du SGB
DSpécifique à un SG
BD
Prise en compte des particularités du SGBD
Contrat
E/A UML
Placement DisqueOptimisation
RelationnelRéseauHiérarchique
Institut Mines-TélécomPage 7
Entité/Association versus diagrammes de classes et d’objets UML
SI-BD
Entité/Association
Génie logiciel - langages
Diagramme de classe
Entité Classe
Entité faible Composition
Association sans attribut Association
Association avec attribut(s) Classe d’association
(Héritage), association « est un » << Héritage – Généralisation, spécialisation
Clé
Identité d’objet
Attribut calculé Attribut dérivé
Opération
Cardinalités Cardinalités, multiplicités
Attribut d’une entité de paramètres
Attributs de classe
2012
Modèles de conception
Institut Mines-TélécomPage 8
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
■ 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
■ Problème hypothèse 1 : héritage
2012
Institut Mines-TélécomPage 9
Diagramme de classes de la médiathèque
2012
Institut Mines-TélécomPage 10
Revenons sur la sémantique de l’héritage
■ Classe enfant hérite des attributs de sa classe parent
■ Spécialisation peut être :● Totale ou partielle :
− Totale : toute instance est spécialisée dans au moins une classe enfant
Classe abstraite− Partielle : une instance peut
ne pas être spécialisée● Une partition ou un
recouvrement :− Partition : une instance est
spécialisée dans au plus une classe enfant
− Recouvrement : une instance peut être spécialisée dans plusieurs classes enfants
Héritage multiple
2012
Personnenomprénomadresse
TotaleRecouvrement
Personne = Etudiant SalarieEtudiant Salarié
TotalePartition
Salarie = Prive PublicPrive Public =
EtudiantnoEtudcycle
Salariesalaire
Publicindice
Priveprime
X
Doctorantvacataire
Institut Mines-TélécomPage 11
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
■ Ne s’appliquent pas à toutes les typologies d’arbre d’héritage
● totale/partielle● partition/recouvrement
2012
Institut Mines-TélécomPage 12
Correspondance directe (n° 1)
■Une classe une relation BD
■Liaison entre les relations se fait via la clé
■Correspondance de l’arbre de Document
2012
DocumentcodetitreauteuranneeempruntableempruntenbEmprunts
Audiocodeclassification
VideocodedureeFilmmentionLegale
LivrecodenbPages
Créationd’une clé
Clé + clé étrangère
Relationclé
Contrainte d’intégritéréférentielle
Institut Mines-TélécomPage 13
Correspondance directe (n° 1) - suite
2012
DocumentcodetitreauteuranneeempruntableempruntenbEmprunts
Audiocodeclassification
VideocodedureeFilmmentionLegale
LivrecodenbPages
Relationclé
Contrainte d’intégritéréférentielle
create view vueDocument(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 where audio.code = document.code union select document.code, titre, auteur, annee, empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts,'Video', null, null, dureeFilm, mentionLegale from video, document where video.code = document.code union select document.code, titre, auteur, annee, empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts,'Livre', null, nombrePages, null, null from livre, document where livre.code = document.code ;
DocumentcodetitreauteuranneeempruntableempruntenbEmpruntsTypedocClassificationnombrePagesDurrefilmMentionlegale
Vue
Construction de la vue par requête
Institut Mines-TélécomPage 14
Correspondance directe pour la médiathèque
2012
DocumentcodetitreauteuranneeempruntableempruntenbEmpruntsnomGenresallerayon
Audiocodeclassification
VideocodedureeFilmmentionLegale
LivrecodenbPages
GenrenomnbEmprunts
Localisationsallerayon
Clientnomprenom adresse nbEmpruntsEffectuesnbEmpruntsDepasses
nbEmpruntsEnCours catclient dateInscription codeReduction dateRenouvellement
CategorienomnbEmpruntsMaxtarifInscriptioncoefDureecoefTarifcodeReducUsed
FicheEmpruntnomprenom code dateEmprunt dateLimite
depasse
Dénormalisation
Solution retenue pour le TP
Documentcodetitre…
Institut Mines-TélécomPage 15
Spécialisation Spécialisation Remarques
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 : non duplication de clé entre « relations enfants »
OK Reconstitution de l'objet par jointure
Sémantique très proche du modèle objet
Fonctionne quelle que soit la typologie d’arbre d’héritage
2012
Correspondance directe et typologie des arbres d’héritage
Institut Mines-TélécomPage 16
Correspondance ascendante (n° 2)
■Chaque classe spécialisée une relation BD
■Classe parent une vue
■Correspondance de l’arbre de Document
2012
CREATE VIEW Document AS SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM AudioUNION SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM VideoUNION SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM Livre
DocumentcodetitreauteuranneeempruntableempruntenbEmprunts
AudiocodetitreauteuranneeempruntableempruntenbEmpruntsclassification
VideocodetitreauteuranneeempruntableempruntenbEmpruntsdureeFilmmentionLegale
LivrecodetitreauteuranneeempruntableempruntenbEmpruntsnbPages
Vue
Construction de la vue par requête
Institut Mines-TélécomPage 17
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
2012
Audiocode
Videocode
Livrecode
Documentcode
FicheEmpruntAudiocodenomprenom
Clientnomprenom
FicheEmpruntVideocodenomprenom
FicheEmpruntLivrecodenomprenom
FicheEmprunt
Institut Mines-TélécomPage 18
Correspondance ascendante et typologie des arbres d’héritage
2012
Spécialisation Spécialisation Remarques
Totale Partielle Partition Recouvrement
OK KO OK KO
Redondance de données
Multiplie les relations
Évite les jointures pour reconstruire les objets
Spécialisation totale. Classe abstraite = vue (relation virtuelle)
Pas possible d’assurer simplement l’unicité des identificateurs
Institut Mines-TélécomPage 19
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
2012
CREATE VIEW Audio ASSELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts, classificationFROM DocumentWHERE typeDocument=‘Audio’
DocumentcodetitreauteuranneeempruntableempruntenbEmpruntstypeDocumentclassificationdureeFilmmentionLegalenbPages
Audiocode…classification
Videocode…dureeFilmmentionLegale
Livrecode…nbPages
Institut Mines-TélécomPage 20
Correspondance par aplatissement 3.1 pour la médiathèque
2012
DocumentcodetitreauteuranneeempruntableempruntenbEmpruntsnomGenresallerayontypeDocumentclassificationdureeFilmmentionLegalenbPages
GenrenomnbEmprunts
Localisationsallerayon
Clientnomprenom adresse nbEmpruntsEffectuesnbEmpruntsDepassesnbEmpruntsEnCourstypeClientdateInscriptiondateRenouvellementcodeReduction
dateCotisation
FicheEmpruntnomprenom code dateEmprunt dateLimite
depasse
Solution retenue pour le TP
CategorienomnbEmpruntsMaxtarifInscriptioncoefDureecoefTarifcodeReducUsed
Institut Mines-TélécomPage 21
Correspondance par aplatissement 3.1 et typologie des arbres d’héritage
2012
Spécialisation Spécialisation Remarques
Totale Partielle Partition Recouvrement
OK OK
Si attribut donnant le nom de la
classe autorisé à
null
OK KO É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
Institut Mines-TélécomPage 22
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 …
2012
CREATE VIEW Audio ASSELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts, classificationFROM DocumentWHERE AudioB = 1
DocumentcodetitreauteuranneeempruntableempruntenbEmpruntsAudioBVideoBLivreBClassificationdureeFilmmentionLegalenbPages
Institut Mines-TélécomPage 23
Spécialisation Spécialisation Remarques
Totale Partielle Partition Recouvrement
OK OKSi tous les
attributs booléens correspondant
aux classes enfants sont
autorisés à NULL
Non pertinent OK idem 3.1
2012
Correspondance par aplatissement 3.2 et typologie des arbres d’héritage
Institut Mines-TélécomPage 24
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 ?● Étapes d’interaction avec le SGBD● Politique de gestion de la persistance
2012
Institut Mines-TélécomPage 25
Qu’est ce que JDBC ?
■ Java DataBase 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)−Dépendants des SGBDs cibles−« Tout » SGBD a un pilote JDBC−4 catégories de pilotes en fonctions de :
• La présence ou non de pilote SGBD (non Java) sur le client
• Protocole de communication entre le client Java et le serveur
2012
SGBD
Application javaPilote
Protocole du SGBD
Type 4
Institut Mines-TélécomPage 26
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" );
2012
Institut Mines-TélécomPage 27
É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 dans une instance de Statement, PreparedStatement ou CallableStatement
3. Demander l’exécution de ces instructions par le SGBD :● Requête d’interrogation (SELECT) : méthode
executeQuery() sur le *Statement● Requête de mise à jour (INSERT, UPDATE, DELETE) :
méthode executeUpdate() sur le *Statement● autre ordre SQL (appel de procédure stockée) :
execute() sur le *Statement4. Fermer la connexion : méthode close() sur la connexion
2012
Institut Mines-TélécomPage 28
Connection versus Statement
2012
Application java
Pilo
te M
ySQ
L
SGBDPostgresSQL
Statement statement1 « SELECT * FROM Document »
Statement statement2
Statement statement3
Media : Mediatheque
Nom : string….Connection : @Connection
Constructeur()rechercheBD()miseAJourBD()Destructeur()
Institut Mines-TélécomPage 29
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
Institut Mines-TélécomPage 30
2 et 3. Exécuter une requête SELECT
try { stmt = laConnexion.createStatement();ResultSet rset = stmt.executeQuery ("select * from localisation"); while (rset.next()) {
String s = rset.getString("salle"); String r = rset.getString("rayon"); Localisation loc = new Localisation(s,r);
lesLocalisations.addElement(loc); }
} catch(SQLException se) { throw new OperationImpossible("Echec acces Localisation- " +se.getMessage());
}
2012
Institut Mines-TélécomPage 31
2 et 3. Exécuter une requête SELECT Méthode executeQuery()
■executeQuery() renvoie une instance de ResultSet
■L’instance de ResultSet se parcourt itérativement ligne par ligne
■Les colonnes sont référencées par leur numéro ou par leur nom
■L'accès aux valeurs des colonnes se fait par les méthodes ● getXXX() où XXX représente le type de l'objet● ou bien par un getObject() suivi d’une conversion
explicite
2012
Institut Mines-TélécomPage 32
Correspondance de type SQL/Java
Type SQL Méthode recommandée
numeric Java.Math.BigDecimal GetBigDecimal()
integer int getInt()
float double getDouble()
char, varchar String getString()
date java.sql.Date getDate() java.util.Date
2012
Institut Mines-TélécomPage 33
2 et 3. Exécuter une requête de mise à jour (1)
private void insererBD(Document doc) throws perationImpossible {
try {PreparedStatement stmt = null;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
}
2012
Institut Mines-TélécomPage 34
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);}
}
2012
Institut Mines-TélécomPage 35
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 ?
2012
Institut Mines-TélécomPage 36
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’infos)● Dynamique : dans les opérations de mise à jour
2012
Institut Mines-TélécomPage 37
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
2012