02/12/2013 1 Framework de persistance: Hibernate Présenté par : Nourhène ALAYA
02/12/2013 1 Framework de persistance: Hibernate Présenté par : Nourhène ALAYA 2013-2014 1 Faculté des Sciences de Tunis, Tunisie Persistance des objets et bases de données relationnelles • Majorité de bases de données relationnelles (position dominante sur le marché, théorie solide et normes reconnues) • Nombreuses applications développées en langage de programmation orienté-objet • Modélisation UML ⇓ Comment effectuer la persistance des données d’une application orientée objet dans une base de données relationnelles ? 2 02/12/2013 2 ORM : Object/Relational Mapping • La persistance ▫Stockage, organisation et récupération des données structurées (tri, agrégation) ▫Concurrence et intégrité des données ▫Partage des données • ORM est: ▫Persistance automatisée et transparente d’objets métiers vers une bases de données relationnelles [BK05] ▫ Description à l’aide de méta-données de la transformation réversible entre un modèle relationnel et un modèle de classes [BK05, Pat05] ▫Capacité à manipuler des données stockées dans une base de données relationnelles à l’aide d’un langage de programmation orientée-objet ▫Techniques de programmation permettant de lier les bases de données relationnelles aux concepts de la programmation OO pour créer une "base de données orientées-objet virtuelle" [Wikipedia] 3 Couche d’accès aux données Couche de persistance • Prise en charge de toutes les interactions entre l’application et la base de données • Groupes de classes et de composants chargés du stockage et de la récupération des données • Possibilité de servir de cache pour les objets récupérés dans la base de données pour améliorer les performances 4 02/12/2013 3 Couche de persistance : avec correspondance objet/relationnel • Utilisation de la couche de persistance comme un service rendant abstraite la représentation relationnelle indispensable au stockage final des objets • Concentration du développeur sur les problématiques métier 5 Exemple simple de correspondance • Implémentation POJO (Plain Old Java Object) de la classe Departement: 6 02/12/2013 4 1. Identification des objets • Objet persistant = représentation en mémoire d’un nuplet (enregistrement) Un même nuplet ne doit pas être représenté par plusieurs objets en mémoire centrale pour une même session de travail • Exemple : ▫Création en mémoire d’un objet e1 de la classe Enseignant (à l’occasion d’une navigation à partir d’un objet Enseignement) . Possibilité de retrouver le même enseignant depuis un autre objet Enseignement ou depuis un objet Departement Ne pas créer d’objet e2 de la classe Enseignant en mémoire centrale indépendant de e1 =>doit garantir l’unicité des objets en mémoire par analogie à l’unicité des enregistrements de la base de donnée. Utilisation du cache "Index" des objets créés en mémoire (avec conservation de l’identité relationnelle – clé primaire) Recherche dans le cache avant toute récupération dans la base. 7 Non correspondance : • La correspondance entre le modèle objet et le modèle relationnel n’est pas une tâche facile ▫30% du coût de développement consacré à la mise en correspondance ▫Modélisation relationnelle tributaire de la théorie relationnelle ▫Modélisation orientée-objet sans définition mathématique rigoureuse ni partie théorique Besoin d’utiliser des outils ORM pour la réduction du code de correspondance 8 02/12/2013 5 Les Framework ORM • Normes Java : ▫ EJB (Entreprise Java Beans) : Gestion de la persistance par conteneur (CMP- Container-Managed Persistence et BMP– Beans Managed Persistence) Spécifications EJB3.0 (JSR 220 Mai 2006) ▫ JDO (Java Data Object) : Spécification de Sun 1999 – JDO 2.0 (JSR243 Mars 2006) Abstraction du support de stockage Implémentation libre : JPOX ▫ JPA (Java Persistence API) : Partie des spécifications EJB 3.0 (JSR 220 en Mai 2006 – JSR 316 en cours) concernant la persistance des composants • Implémentation de JPA : ▫ Hibernate (JBoss) : Solution libre faisant partie du serveur d’appli. JBoss – version 3.3 implémentant les spécifications JSR 220 – complète et bien documentée - plugin Eclipse - Gavin King (fondateur) membre de groupes d’expert d’EJB3 ▫ TopLink (Oracle) : Solution propriétaire utilisée par la serveur d’application d’Oracle ▫ TopLink Essentials : version libre disponible dans Netbeans 5.5 ou le serveur d’application (Java EE 5) Glassfish de Sun, integrée dans le projet EclipseLink (version 1 07/2008) ▫ OpenJPA (Apache), Cayenne (Apache) … • "Comparaison " des solutions ORM : ▫ http://se.ethz.ch/projects/shinji_takasaka/master_thesis_shinji_takasaka.pdf ▫ http://laurentbois.com/2006/07/29/jpa-avec-hibernate-et-toplink/ ▫ http://java.dzone.com/news/hibernate-best-choice?page=2 9 Pourquoi on étudiera la norme JPA ? 10 02/12/2013 6 Pourquoi on étudiera Hibernate ? 11Le Framework Hibernate http://www.hibernate.org/ 12 02/12/2013 7 Hibernate : généralités • Outil ORM ou Cadre (Framework) de persistance libre (open source) gérant la persistance des objets Java/J2EE en base de données relationnelle [Wikipédia, Pat05] • Version 3.x (2010:3.6) : implémentation du standard de persistance EJB 3.0 Java Persistence API (JPA) • Possibilité d’être utilisé aussi bien dans un développement client lourd, que dans un environnement web léger de type Apache Tomcat ou dans un environnement J2EE complet. • Code SQL généré à l’exécution via des informations fournies dans un document de correspondance (mapping) XML ou des annotations 13 Architecture du noyau Hibernate • hibernate.properties : Fichier de configuration ▫Version XML : hibernate.cfg.xml permettant un paramétrage plus fin ▫Configuration par programmation • XML mapping ou Annotations : ▫Méta-données (paramètres) décrites sous la forme de fichiers de correspondance XML ou sous forme d’annotation ▫Utilisées pour mettre en correspondance les classes Java et le modèle relation 14 02/12/2013 8 Architecture du noyau Hibernate 15 Architecture du noyau Hibernate 16 • Différents modules : ▫Hibernate Core : API native implémentant les services de base pour la persistance Méta-données au format XML (+ annotations depuis la version 3.6) Langage HQL et interface pour écrire des requêtes ▫Hibernate Annotations (inclus dans Hibernate Core 3.6) : Remplacement des fichiers XML par des annotations JDK 5.0 implémentant les annotations du standard JPA + annotations spécifiques à Hibernate ▫Hibernate Entity Manager : Implémentation de la partie des spécifications JPA concernant Les interfaces de programmation, Les règles de cycle de vie des objets persistants Les fonctionnalités d’interrogation Hibernate Entity Manager = wrapper au dessus du noyau Hibernate 02/12/2013 9 Architecture du noyau Hibernate • SessionFactory (Core) ou EntityManagerFactory (JPA): ▫Cache immuable (threadsafe) des correspondances (mappings) vers une (et une seule) base de données ▫Coûteuse à construire car implique l’analyse des fichiers de configuration ▫Pouvant contenir un cache optionnel de données (de second niveau) réutilisable entre les différentes transactions ▫Construite à partir d’un objet (Ejb3) Configuration • Session (Core) ou EntityManager (JPA) : ▫Objet mono-threadé, à durée de vie courte, représentant une conversation entre l'application et l'entrepôt de persistance (eg. Base de Données) ▫Encapsule une connexion JDBC ▫Contient un cache de premier niveau (obligatoire) et des objets persistants 17 Travailler avec Hibernate Core : • Les fichiers nécessaires sont les suivants : • hibernate.cfg.xml : fichier de configuration globale contenant ▫Les paramètres de connexion à la base de données (pilote, login, mot de passe, url, etc.) ▫Le dialecte SQL de la base de données ▫La gestion de pool de connexions ▫ Le niveau de détails des traces etc. • Pour chaque classe persistante : ▫ClassePersistante.java : Implémentation POJO (Plain Old Java Objects) de la classe similaire à l’implémentation des Bean ▫ClassePersistante.hbm.xml : Fichier XML de correspondance (mapping) ▫ClassePersistanteHome.java ou ClassePersistanteDAO.java Implémentation du DAO (Data Access Object) pour l’isolation avec la couche de persistance – Optionnel ▫ClassePersistante.sql : Code SQL de création de la ou les relations – Optionnel – pouvant être généré par Hibernate 18 02/12/2013 10 Travailler avec Hibernate (JPA) : • Les bibliothèques supplémentaires sont nécessaires : ▫hibernate-annotations.jar Annotations propres à Hibernate ▫ejb3-persistence.jar Annotations du standard EJB3 • Fichiers nécessaires pour Hibernate (JPA) : ▫hibernate.cfg.xml : fichier de configuration ▫ClassePersistante.java : POJO avec annotations ▫ClassePersistante.hbm.xml : optionnel – possibilité de combiner annotations et méta-données XML ▫ClassePersistanteHome.java ou ClassePersistanteDAO.java : Implémentation du DAO (Data Access Object) pour l’isolation avec la couche de persistance – Optionnel 19 Depuis la version 3.5, ces jar font partie de hibernate3.jar • Afin de gérer la configuration et les sessions hibernate, il est fortement conseillé de créer une classes HibernateUtil qui permettra de: •Créer une occurrence de la classe Configuration afin de lire hibernate.cfg.xml •Créer une SessionFactory afin de gérer les transactions et l’interrogation de la base de données. package persistance; import org.hibernate.*; import org.hibernate.cfg.*; public class HibernateUtil { private static SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } public static void shutdown() { getSessionFactory().close(); } } Exemple de travaille avec Hibernate Core 20 02/12/2013 11 La SessionFactory nous permettra d’ouvrir des sessions afin d’effectuer des transactions et interroger la base de données import org.hibernate.*; import persistance.HibernateUtil; public class Tester { public static void main(String[] args) { //ouvrir une session Session session1 = HibernateUtil.getSessionFactory().getCurrentSession(); //commencer une transaction Transaction tx1 = session1.beginTransaction(); //consulter modifier la base //fermer la transaction et la session tx1.commit(); }} 27 Exemple de travaille avec Hibernate Core 21 Le fichier hibernate.cfg.xml 22 02/12/2013 12 Le fichier hibernate.cfg.xml • Déclaration du type de document utilisé par l’analyseur syntaxique (parseur) XML pour valider le document de configuration d’après la DTD de configuration d’Hibernate • Paramètres de configuration nécessaires pour la connexion JDBC : • Spécification de la variante de SQL générée par Hibernate. Elle uploads/Litterature/chapitre3-hibernate 1 .pdf
Documents similaires










-
25
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mar 27, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 1.9203MB