Maîtrisez la manipulation d’une session hibernate dans une application J2ee. Comprenez les avantages et inconvénients de 2 techniques classiques : la Servlet d’initialisation et le filtre HTTP. Limitez enfin l’utilisation couteuse de la session hibernate en utilisant une session locale au thread (threadLocal)’. Découvrez la notion de ‘conversations longues’ ou encore de ‘transactions d’applications’. Comprenez la notion d’objet détaché et sa valeur ajoutée dans les ‘conversations longues’
Objis, spécialiste de la formation Java, est heureux de vous offrir ce
tutoriel, extrait de séances pratiques de la formation HIBERNATE 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
Prérequis, outils et versions
Tutoriel Hibernate N°2 : votre première application hibernate
Liens utiles
+ de 100 tutoriaux java/jee Objis
Tutoriaux HIBERNATE Objis
Objis, spécialiste formation java depuis 2005
Site hibernate (javadoc, faq)
Documentation (chap. 10) : working with objects
Objectifs
Comprendre les problématiques associées à hibernate en environnement web
Mettre en œuvre Designs patterns avec Hibernate : MVC , DAO, Business Delegate
Créer une couche DAO hibernate
Programme
Contexte
Partie 1 : Comprendre le design pattern MVC
Partie 2 : Technique N°1 de manipulation de session hibernate : Servlet d’initialisation
Partie 3 : Technique N°2 de manipulation de session hibernate : filtre http
Partie 4 : Technique N°3 de manipulation de session hibernate : couche service et délégation
Durée
30 min.
Contexte
Vous allez apprendre à mettre en œuvre une des techniques possibles pour gérer les problématiques suivantes :
— PROBLEMATIQUE 1 : récupérer la Session hibernate à partir de la SessionFactory
— PROBLEMATIQUE 2 : fermer la Session hibernate une fois le travail métier terminé
CAS D’UTILISATION :
> Application simple (moins de 10 objets métiers)
> Choix accès direct à la session par le controleur
— ARCHITECTURE : Pas de couche service. Pas design pattern business delegate)
–INCONVENIENT : vous devez fermer la session hibernate ‘à la main’.
Partie 1 : comprendre MVC
Partie 2 : technique 1 (servlet d’initialisation)
Au déploiement de l’application, charger une Servlet qui va rendre la SessionFactory disponible dans le contexte de Servlet.
Projet eclipse
Servlet d’initialisation : codage méthode init()
Servlet d’initialisation : configuration web.xml
Controleur : obtenir une session
Controleur : fermer session
test: lancer votre application sur un serveur tomcat puis accéder à l’adresse suivante:
http://localhost:8080/demoSessionHibernateWeb1/index.html
puis à cette adresse:
http://localhost:8080/demoSessionHibernateWeb1/test
Corrigé
Partie 2 : technique 2 (filtre http)
test: lancer votre application sur un serveur tomcat puis accéder à l’adresse suivante:
http://localhost:8080/demoSessionHibernateWeb1/index.html
puis à cette adresse:
http://localhost:8080/demoSessionHibernateWeb1/controleur
Corrigé
Partie 3 : technique 3 (Session locale au thread)
Dans les 2 techniques précédentes (Servlet d’initialisation et filtre http), la couche service est encapsulée dans la couche présentation.
Comment passer la Session à la couche Dao ? Comment utiliser cette même session dans une méthode de la couche Dao ?
Dans ce type de contexte (typique de l’utilisation d’un framework de vue type Struts, webwork), le pattern à préférer est le pattern ThreadLocal : la classe java.lang.ThreadLocal créée une session accessible dans le thread applicatif courant.
Cela est particulièrement utile en environnement multithread, comme applications web.
Cette fonctionnalité est activé par la ligne suivante dans le fichier hibernate.cfg.xml:
<property name= »current_session_context_class »>thread</property>
Les couches Service et DAO sont vues en détail dans les TP 11 et 12.
Conclusion
Dans ce tutoriel, vous avez mis en oeuvre plusieurs techniques de gestion de la Session hibernate en environnement j2ee : la servlet d’initialisation et le filtre. Rendez-vous au TP 11 Pour la Session locale au thread (ThreadLocal).