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

  • 25
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager