Maîtrisez l’intégration du framework java Spring et et du framework java Hibernate en utilisant l’injection de dépendances, concept technique clé mis en oeuvre dans notre tutoriel Spring N°2. A travers une technique similaire à celle de l’accès aux données JDBC (voir notre tutoriel Spring N°4 ), utilisez les classes HibernateTemplate et HibernateDaoSupport fournies par le framework Spring. Créez enfin un DAO ‘non intrusif’ dont les transactions seront gérés via un aspect spring AOP.
Objis, spécialiste de la formation Java, est heureux de vous offrir ce
tutoriel, extrait de séances pratiques de notre formation SPRING.
Les + objis
70% de travaux pratiques
Clé USB avec tous les outils utilisés + Corrigés TPs
Bilan pédagogique individuel + conseils
Liens utiles
+ de 100 tutoriaux java/jee Objis
10 tutoriaux spring framework objis
Objis, spécialiste formation java depuis 2005
Tutoriel intégration Spring / iBatis
Documentation Spring 3 : Couche ORM Hibernate – non intrusif
Prérequis, outils et versions
Tutoriel Spring N°2 : injection de dépendances
Tutoriel Spring N°5 : accès aux données avec Spring JDBC
Formation Architecture Java
Soyez prêt pour des projets ambitieux : formation architecture Java Objis
Objectifs
Comprendre la stratégie d’intégration de Spring avec le framework Hibernate
Mettre en oeuvre la classe HibernateTemplate fournie par Spring
Mettre en oeuvre la classe HibernateDaoSupport fournie par Spring
Comprendre les impacts du choix du DAO sur le caractère intrusif du code
Créer un DAO non intrusif grance Spring et la programation orientée aspects.
Liens utiles
Documentation officielle Spring et frameworks de mapping Objet relationnel
10 tutoriaux spring framework objis
Programme
Introduction
Partie 1 : préparation de l’environnement (projet eclipse + données)
Partie 2 : domaine métier
Partie 3 : librairies Spring / Hibernate / Log4j / Accès DB
Partie 4 : couche DAO v1 : basée sur HibernateTemplate
Partie 5 : test JUnit
Partie 6 : couche DAO v2 : basée sur HibernateDaoSupport
Partie 7 : couche DAO v3 : non intrusif
Partie 8 : optimisations
Partie 9 : annotation @Repository
Durée
1h30.
Introduction
Le Tutoriel Spring N°5 : accès aux données avec Spring JDBC a permis de mettre en oeuvre les classes JdbcTemplate et JdbcDaoSupport pour se connecter via Spring à une base de données relationelle, et y réaliser opérations CRUD (Create, Retrieve, Update, Delete) pour un objet Employe.
Vous allez réaliser un travail similaire avec Hibernate, qui propose le Template : HibernateTemplate et le DAO HibernateDaoSupport ainsi qu’une technique dite ‘non intrusive’ à travers laquelle aucun code Spring ne figurera dans votre DAO.
Partie 1 : préparation de l’environnement
création et alimentation de la base de données
Reprendre les parties 2 du tutoriel ‘accès aux données avec Spring JDBC‘
Création du projet ‘demospring3hibernate’
Partie 2 : domaine métier
Créez un package ‘domaine’ dans src
Ajouter dans ce package la classe métier ‘Employe’ ainsi que son fichier de mapping objet-relationnel Employe.hbm.xml.
Aperçu classe métier
Expliquer le constructeur d’Employe.
Aperçu fichier de mapping Employe.hbm.xml
Expliquer la technique de génération de la clé primaire.
Le projet devient :
Partie 3 : librairies
Créez un répertoire ‘lib’
Vous allez par la suite ajouter dans ce répertoire les jars Spring et Hibernate nécessaire pour la première architecture d’intégration Spring / Hibernate (basée sur HibernateTemplate) :
Librairies Spring
Notez , en plus des librairies utilisées lors du TP Spring JDBC, l’utilisation de la librairie ORM ( ici org.springframework.orm-3.0.7.RELEASE.jar ) qui contient les classes d’intégration de Spring avec frameworks de mapping du marché.
Librairies Hibernate
Avec Hibernate 3.6 :
— > Le jar hibernate
— > Le dépendances ‘obligatoires’ (répertoire ‘required’)
— > La dépendance ‘jpa’ (répertoire ‘jpa’)
Après l’ajout des librairies Spring et Hibernate, le projet devient :
Log4j
— > jar Commons-Logging (à partir du site téléchargement commons-logging)
— > jar Log4j
— > fichier log4j.xml
INFO : vous avez aussi besoin d’ajouter la librairie slf4j-log4j12-1.6.4.jar d’adaptation SL4J pour log4j ( jar à récupérer dans zip téléchargé du site produit SL4J)
Pool de connexion
— > jar commons-dbcp (à partir du site commons-dbcp)
— > jar commons-pool (à partir du site commons-pool)
> jar mysql
Ajout librairies dans Classpath Eclipse
Sélectionner toutes les librairies puis click-droit Add build Path
Couche DAO basée sur HibernateTemplate
Etape 1 : interface
créez un package com.objis.spring.dao
créez une interface Dao
Ajoutez le fichier db.properties dans ce package.
A quoi sert ce fichier ? Comment sera t’il exploité par Spring ? Qu’est ce que le Property PlaceConfigurer ?
Etape 2 : classe DAO
Créez un package com.objis.spring.dao.hibernate
Ajoutez le code de notre première version du DAO Hibernate :
Expliquez les lignes 23, 29, 34, 38
Etape 3 : fichier de configuration Spring
Créez un fichier de configuration spring-data.xml dans ‘src’
Expliquez les 4 parties de la configuration suivante de spring-data.xml :
— Partie 1 : Configuration bean ‘dataSource’
— Partie 2 : Configuration bean ‘sesssionFactory’
— Partie 3 : Configuration bean ‘hibernateTemplate’
— Partie 4 : Configuration bean DAO
Partie 5 : test jUnit 4
Librairie jUnit
Ajouter au projet la librairie jUnit 4 en 4 étapes :
ça y est , JUnit 4 est disponible pour votre projet.
Nous allons désormais créer un package de test et une classe de test afin de tester notre DAO basé sur un template HibernateTemplate.
Classe de test
Analysez le code suivant
Expliquez les lignes 11, 17, 24, 29
Expliquez ensuite les lignes 14, 21, 26, 33
QUESTION : quelle valeur ajoutée de la déclaration ligne 14 :
— private IEmployeDao springHibernateDao1 ;
par rapport à la déclaration suivante :
— private HibernateEmployeTemplateDao springHibernateDao1 ;
Expliquez
Partie 6 : couche DAO v2 – basée sur HibernateDaoSupport
Proposez un code et une configuration pour le deuxième DAO (EmployeHibernateDaoSupport) qui étendra la classe HibernateDaoSupport de Spring (com.springmvcframework.hibernate3.support.HibernateDaoSupport)
Partie 7 : couche DAO v3 – non intrusif
Les 2 premières versions de DAOs ont l’inconvénient d’être intrusifs. En effet ils impliquent du code Spring à l’intérieur du DAO.
Proposez une implémentation de DAO Hibernate ayant les caractéristiques suivantes :
1) implémente IEmployeDao
2) ne contient pas de code Spring (Aucun import org.springframework…)
3) bénéficie de la valeur ajoutée de Spring (injection dépendances)
Le prix à payer pour cela : gérer vous même les aspects techniques liées à l’utilisation de la session et de la transaction hibernate, ainsi que gérer les exceptions.
Analysez ce que devient l’implémentation de la méthode saveEmploye :
Expliquez
correction-tutoriel-objis-acces-donnees-dao
Partie 8 : Optimisations
Expliquez la configuration d’hibernate qui permet de réduire l’implémentation de la méthode ci-dessus à ceci :
Analysez l’implémentation de la méthode ci-dessus à ceci :
Notez qu’il n’ya aucune référence à une transaction hibernate.
Un gestionnaire de transaction Hibernate implémenté sous forme d’aspect grace au tisseur d’aspect Spring AOP permet d’alléger le code ainsi.
Celui-ci interceptera tout appel à une méthode du DAO, déclenchera une transaction et ce avant l’exécution de la méthode.
Cette stratégie est présentée dans le chapitre 12 de la documentation Spring
Configuration du gestionnaire de transaction
Les étapes suivantes sont necessaires :
Ajout du bean (myTransactionManager) gestionnaire de transaction Hibernate
Ajout du greffon (txAdvice) gérant l’interception d’appel de tout ou partie des méthodes du DAO
Configuration AOP associant le greffon à la coupe
Ajoutez le code suivant dans le fichier de configuration de Spring
Expliquez la ligne suivante du fichier : ‘tx:method name= »save* » propagation= »REQUIRED »/’
Codez dans la classe de test du DAO la méthode
Pourquoi préférer l’Interface IEmployeDao à une classe concrète ?
Partie 9 : annotation @Repository
Annotez le DAO EmployeHibernateDaoSupport , en utilisant l’annotation @Repository, comme le permet Spring.
Optimisations du fichier spring-data.xml
Réalisez les mêmes optimisations que dans la partie 8 du tutoriel Spring JDBC
Conclusion
Dans ce tutoriel, vous avez pratiqué la mise en oeuvre de l’intégration de Spring avec le framework Hibernate.
Spring sait donc s’interfacer avec un framework de mapping comme Hibernate, mais aussi, et de la même façon (classes Template et DaoSupport) avec d’autres frameworks de mapping comme Toplink ou iBatis.
L’interface avec des frameworks de vue comme Spring et JSF est tout aussi élégant . Découvrez en particlier le cas d’intégration struts / Spring avec notre tutoriel Spring N°8 : intégration Spring / Struts.
Formation Architecture Java
Soyez prêt pour des projets ambitieux : formation architecture Java Objis