Tutoriel Spring N°7 : intégration Spring 3 / Hibernate

////Tutoriel Spring N°7 : intégration Spring 3 / 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°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

programme-detaille-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.

tutoriel-integration-spring-3-hibernate-0

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’

tutoriel-integration-spring-3-hibernate-1

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

tutoriel-integration-spring-3-hibernate-3

 Expliquer le constructeur d’Employe.

Aperçu fichier de mapping Employe.hbm.xml

tutoriel_spring_objis_hibernate_3.png

 Expliquer la technique de génération de la clé primaire.

Le projet devient :

tutoriel-integration-spring-3-hibernate-2

Partie 3 : librairies

 Créez un répertoire ‘lib’
tutoriel-integration-spring-3-hibernate-8

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

tutoriel-integration-spring-3-hibernate-4

 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

tutoriel-integration-spring-3-hibernate-5

— > Le dépendances ‘obligatoires’ (répertoire ‘required’)

tutoriel-integration-spring-3-hibernate-6

— > La dépendance ‘jpa’ (répertoire ‘jpa’)

tutoriel-integration-spring-3-hibernate-7

Après l’ajout des librairies Spring et Hibernate, le projet devient :

tutoriel-integration-spring-3-hibernate-9

Log4j

— > jar Commons-Logging (à partir du site téléchargement commons-logging)

— > jar Log4j

— > fichier log4j.xml

tutoriel-integration-spring-3-hibernate-10

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)

tutoriel-integration-spring-3-hibernate-20

Pool de connexion

— > jar commons-dbcp (à partir du site commons-dbcp)

— > jar commons-pool (à partir du site commons-pool)

 > jar mysql

tutoriel-integration-spring-3-hibernate-11

Ajout librairies dans Classpath Eclipse

 Sélectionner toutes les librairies puis click-droit Add build Path

tutoriel-integration-spring-3-hibernate-9bjis

Couche DAO basée sur HibernateTemplate

Etape 1 : interface

 créez un package com.objis.spring.dao

 créez une interface Dao

tutoriel_spring_objis_hibernate_2.png

 

tutoriel-integration-spring-3-hibernate-12

Ajoutez le fichier db.properties dans ce package.

db

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

tutoriel-integration-spring-3-hibernate-13

 Ajoutez le code de notre première version du DAO Hibernate :

tutoriel-integration-spring-3-hibernate-14

 Expliquez les lignes 23, 29, 34, 38

Etape 3 : fichier de configuration Spring

 Créez un fichier de configuration spring-data.xml dans ‘src’

spring-data

 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

tutoriel-integration-spring-3-hibernate-21

Partie 5 : test jUnit 4

Librairie jUnit

 Ajouter au projet la librairie jUnit 4 en 4 étapes :

tutoriel-integration-spring-3-hibernate-15

 

tutoriel-integration-spring-3-hibernate-16

 

tutoriel-integration-spring-3-hibernate-17

 

tutoriel-integration-spring-3-hibernate-18

ç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

tutoriel-integration-spring-3-hibernate-19

 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 :

tutoriel-spring-acces-donnees-hibernate-dao-non-intrusif

 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 :

tutoriel-spring-acces-donnees-hibernate-dao-non-intrusif-2

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

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

programme-detaille-formation-architecture-java-objis

2018-01-27T15:09:13+01:00

Contactez nous

241 rue DUGUESCLIN, 69003 Lyon

Web : Objis : spécialiste formation Java