vers l'accueil formulaire de contact

Tutoriel Spring N°6 : intégration Spring / Hibernate

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°5 ), 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.

Ce tutoriel est un extrait de séances pratiques de la formation SPRING dispensée par Objis.

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
- Site officiel Spring IDE
- Site officiel Spring Source Tool Suite (STS)

Prérequis, outils et versions

- JDK 6
- Eclipse 3.3.2 europa Entreprise
- Spring 2.5.4
- Spring IDE 2.1.0
- Tutoriel Spring N°2 : injection de dépendances
- Tutoriel Spring N°5 : accès aux données avec Spring JDBC

Pour ce Tutoriel, le plugin Eclipse Spring IDE doit être au préalable correctement installé. Le tutoriel ’Installation plugin Spring IDE’ vous permet de maîtriser l’installation de Spring IDE.

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
- Partie 2 : Mise en oeuvre HibernateTemplate
- Partie 3 : Mise en oeuvre HibernateDaoSupport
- Partie 4 : DAO hibernate non intrusif
- Partie 5 : 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.

Partie 1 : préparation de l’environnement

Reprendre les parties 2, 3, 4, 5 du tutoriel ’accès aux données avec Spring JDBC’ avec cette fois le nom de projet eclipse ’springdemohibernate’

Rappel :
- Partie 2 : création et alimentation de la base de données
- Partie 3 : création du projet Spring (ici ’springdemohibernate’)
- Partie 4 : beans pour l’accès aux données
- Partie 5 : domaine métier (classe Employe)

Domaine métier

Partie 2 : Mise en oeuvre HibernateTemplate

- A l’aide de la Documentation de référence de Spring, mettez en oeuvre la stratégie de création d’un DAO via la classe HibernateTemplate à travers la méthode saveEmployeHibernateTemplate(Employe)

REMARQUE : Il vous faudra mettre dans le Classpath de votre application TOUS les jars de l’API Hibernate 3.2.6 (core).

Partie 3 : Mise en oeuvre HibernateDaoSupport

Proposez dans un package com.objis.dao.hibernate une mise en oeuvre de 2 DAOs implémentant une interface IEmployeDao avec méthodes :

DAO via classe HibernateTemplate

Le premier DAO (EmployeHibernateDaoTemplate) mettra en oeuvre une injection du HibernateTemplate.

bean SessionFactory

Déclaration Dao

DAO via classe HibernateDaoSupport

Le deuxième DAO (EmployeHibernateDaoSupport) étendra la classe HibernateDaoSupport de Spring (com.springmvcframework.hibernate3.support.HibernateDaoSupport)

Partie 4 : DAO hibernate non intrusif

Les 2 DAOs de la partie 2 ci-dessus ont l’inconvénient d’être intrusifs. En effet ils impliquent du code Spring à l’intérieur du DAO.

- Imaginez 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.

Analysez ce que devient l’implémentation de la méthode saveEmploye :

PNG - 14.2 ko
tutoriel-spring-acces-donnees-hibernate-dao-non-intrusif

- Expliquez

Zip - 5.8 Mo
correction-tutoriel-objis-acces-donnees-dao

Partie 5 : Optimisations

- Expliquez la configuration d’hibernate qui permet de réduire l’implémentation de la méthode ci-dessus à ceci :

PNG - 6.3 ko
tutoriel-spring-acces-donnees-hibernate-dao-non-intrusif-2

- Analysez l’implémentation de la méthode ci-dessus à ceci :

PNG - 3.8 ko
tutoriel-spring-acces-donnees-hibernate-dao-non-intrusif-3

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 5 : 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°7 : intégration Spring / Struts.

Prochaine formation SPRING

Le chemin le plus court pour avoir les réflexes et la méthodologie du bon développeur Spring :

Pour aller plus loin : le réseau Objis

Si vous appréciez notre sens du partage, devenez gratuitement membre ’classic’ du Club Objis :
- Votez pour les prochains tutoriaux à publier
- Préparez vos entretiens techniques
- Valorisez votre profil / expertise
- Identifiez des opportunités d’emploi
- Recevez la newsletter objis.com