Archive pour la Catégorie 'Spring'

Intégration d’Hibernate avec Spring

L’objectif de cet article est d’exposer les différentes méthodes permettant d’intégrer les frameworks Hibernate et Spring dans une même application.

Intégartion Hibarnate et Spring

Il existe deux méthodes pour intégrer les deux frameworks spring et Hibernate dans une même application :

  • La première méthode consiste à utiliser le module spring ORM.
  • La deuxième c’est d’utiliser le module spring DAO.    

Spring offre, à travers ses deux modules, spring ORM et spring DAO,  une solution pour l’intégration de plusieurs frameworks de mapping (Hibernate, iBatis, JDO, TopLink …).

Le principe des deux modules consiste à faire une abstraction par rapport au framework de mapping utilisé pour accéder à la base de données en offrant un système de management des transactions et d’accès aux données et une hiérarchie d’exceptions génériques.

Dans cet article, nous allons voir comment configurer spring et Hibernate en utilisant les deux méthodes.

Pour les deux méthodes,  il est obligatoire de déclarer un dataSource qui définit la connexion à la base. L’exemple ci-dessous permet de configurer la connexion à une base MySQL.

On peut utiliser un fichier « propreties » pour configurer et définir les paramètres de la dataSource.config

Une fois le dataSource est configurée, il est nécessaire de définir une sessionFactory. L’exemple ci-dessous montre comment définir une sessionFactory pour Hibernate2.

config

Pour utiliser spring et Hibernate, il est obligatoire que le sessionFactory soit une instance de la classe LocalSessionFactoryBean de Spring. Le sessionFactory doit faire référence à la dataSource définit précédemment. Ensuite, il faut préciser les fichiers de mapping d’Hibenate. Enfin, il faut définir les propriétés spécifiques à Hibernate telle que hibernate.dialect qui est spécifique à chaque base et qui permet d’optimiser l’utilisation des spécificités de chaque base, par exemple pour la génération du SQL.

Utiliser Spring DAO

Pour utiliser cette méthode, il faut que les classes DAO héritent de la classe HibernateDaoSupport de Spring. Les beans des DAOs doivent avoir la propriété « sessionFactory » comme le montre l’exemple ci-dessous.

daoconf

 
Utiliser Spring ORM

Cette méthode n’impose aucune contrainte, il suffit juste de définir un HibernateTemplate comme le montre l’exemple ci-dessous :

orm context

HibernatTemplate offre plusieurs méthodes pour accéder aux méthodes offertes par le framework Hibernate. Si vous voulez utiliser des méthodes non supportés par HibernateTemplate vous devez utiliser callback, comme le montre l’exemple ci dessous, et ceci pour accéder aux méthodes de la session Hibernate.

orm dao

Application

Dans cet article, nous allons partir de  l’application  de l’article précédent « intégration spring  struts » pour ajouter le framework Hibernate.

La base de données utilisée est MySQL. La base springdb contient une table user qui contient les champs id, login et password.

L’objectif de l’application est de montrer comment  mettre en place Hibernate et spring sans entrer dans les détails des méthodes des modules spring DAO et spring ORM.

Pour utiliser Spring ORM il faut:

Modifier le fichier de configuration applicationContext.xml  en suivant ce qui est décrit précédement.

Ajouter le fichier de mapping User.hbm.xml.

user hbm

Ajouter les interfaces DAO et UserDAO.

Ajouter la classe UserDAOImpl, l’implémentation de la classe UserDAO.

user dao

Modifier la classe UserManagerImpl pour utiliser la classe UserDAO.

manager
Pour télécharger le code de cette application cliquer ici application

Pour utiliser spring ORM, il suffit  de modifier les fichiers applicationContext.xml et UserDAOImpl comme c’est indiqué dans les exemples du paragraphe « Utiliser Spring ORM ».

Conclusion

Dans cet article, nous avons vu comment intégrer spring et Hibernate dans une même application en utilisant spring DAO et spring ORM. Il reste maintenant à configurer l’application pour gérer les transactions, ceci sera l’objectif du prochain article.

Références

http://static.springframework.org/spring/docs/2.0.x/reference/orm.html

Spring in action Craig Walls & Ryan Breidenbach


Présentation du module spring DAO

L’objectif de cet article est d’expliquer le principe du module spring DAO.

Principe du module spring DAO 

Le principe de spring DAO consiste à faire une abstraction par rapport à la méthode d’accès à la base de données (framework de mapping, jdbc …) en offrant un système de management des transactions et d’accès aux données et une hiérarchie d’exceptions génériques.
Spring devise le processus de manipulation des données en deux parties : une partie invariable  ou commune pour toutes les technologies tels que l’ouverture et la fermeture de la connexion … et une partie variable ou spécifique à chaque technologie tels que la méthode d’exécuter une requête, la récupération du résultat … En se basant sur cette séparation spring définit deux classes : Template et callback qui se chargent respectivement de l’implémentation de la partie fixe et de la partie variable.

Le schéma ci-dessous définit les responsabilités de chaque classe.

springdao

Pour simplifier l’utilisation des classes Template et callback, certaines méthodes  spécifiques aux framework sont implantées par les Templates spécifiques à chaque framework, ce qui permet de les utiliser sans passer par le callback, exemple la méthode update de la classe JdbcTemplate.

Pour accéder aux Templates (JdbcTemplate, HibernateTemplate, JdoTemplate et JpaTemplate), Spring dispose des classes DAO Support, il suffit que les dao de l’application hérite d’un DAO Support pour accéder au Template spécifique exemple pour accéder à HibenateTemplate il suffit que ton dao hérite de la classe HibenateDaoSupport et ensuite utiliser la méthode getHibernateTemplate().

Le schéma ci-dessous explique la relation entre les différentes classes utilisées.

daosupport

Exemple : JdbcTemplate

Pour utiliser jdbc, prenant par exemple le cas d’insertion des données, la méthode doit, obligatoirement, déclarer les ressources, ouvrir la connexion, créer la requête et l’exécuter et en fin gérer les exception. L’exemple ci-dessous montre un exemple d’utilisation du jdbc en cas d’insertion de données.

jdbc_code

Nous allons voir maintenant comment en utilisant spring DAO l’exemple précèdent sera simplifié, le code précèdent sera réduit au code ci dessous :

jdbcTemplate_code

Donc, comme nous avons vu précédemment, en utilisant jdbcTemplate, seulement la partie variable sera implémentée  (la création des requêtes qui dépend de la technologie utilisée), spring DAO se charge de la partie invariable.

Conclusion

Dans cet article nous avons vu comment Spring DAO permet de simplifier et standardiser l’accées à la base de données en faisant abstraction aux technologies utilisées pour accéder et manipuler les données. Mais spring DAO n’est pas la seule solution présentée par spring pour accéder à la BD, il dispose aussi du module spring ORM comme solution pour accéder et manipuler les données.

Références:                                                                                                                                

Spring in action Craig Walls & Ryan Breidenbach

http://static.springframework.org/spring/docs/2.0.x/reference/dao.html

 

Intégration de struts avec spring

L’objectif de cet article est d’exposer les différentes méthodes permettant d’intégrer les frameworks struts et spring dans une même application.

Pour ceci nous allons commencer par une présentation des différentes méthodes d’intégration. Ensuite, dans une deuxième partie nous décrirons un exemple détaillé de l’implémentation d’une application qui se base sur ces deux frameworks.

Introduction

La capacité qu’à spring d’intégrer d’autres frameworks lui a conféré une grande popularité. En effet, les applications se basant sur spring bénéficient d’une grande flexibilité permettant le choix des frameworks spécialisés dans chaque couche de l’application (par exemple hibernate pour la gestion de la persistance, struts pour l’implémentation du modele MVC…)

Intégration de struts avec spring

Il existe deux méthodes pour intégrer les deux frameworks struts et spring dans une même application :

  1. La première méthode consiste à utiliser la classe ActionSupport de spring.
  2. La deuxième c’est d’utiliser le plug-in ContextLoaderPlugin.
  • Utiliser la classe ActionSupport

Pour utiliser cette méthode, les actions doivent hériter de la classe ActionSupport de spring et non de la classe Action de struts, ce qui permet l’accés à la methode getWebApplicationContext() , cette deriniére permet de récupérer le context de spring, à partir de context, ApplicationContext, nous pouvons récupérer les beans définis dans le fichier de configuration de spring.

integration spring struts methode 1

Cette méthode est simple à implémenter mais ne permet pas de manipuler les actions struts comme étant des beans. Pour accéder aux beans il faut les récupérer manuellement en passant par le context. En utilisant cette méthode l’injection de dépendance ne peut pas être implémentée pour les actions. Cette méthode crée aussi une dépendance entre les deux frameworks struts et spring.

  • Utiliser le plug-in ContextLoaderPlugin

le plug-in ContextLoaderPlugin permet de charger le context pour la servlet ActionServlet de struts. Deux méthodes sont disponibles pour intégrer ce plug-in.

La première consiste à utiliser la classe DelegationRequestProcessor de spring au lieu de RequestProcessor de struts.

La deuxième consiste à utiliser la classe DelegationActionProxy et déléguer à spring la gestion des actions struts sous forme de beans.

Dans les deux cas il faut commencer par ajouter le plug-in dans le fichier de configuration de struts : struts-config.xml.

config plugin

Pour utiliser la première méthode il faut remplacer le RequestProcessor de struts par DelegatingRequestProcessor en ajoutant dans le fichier struts-config.xml les lignes suivantes :

config methode1_2
Pour permettre à spring de prendre en charge la gestion des actions sous forme de beans, il faut ajouter aussi la déclaration des actions dans le fichier de configuration de spring applicationContext.xml et dans le fichier action-servlet.xml comme le montre l’exemple ci-dessous :

Dans le fichier applicationContext.xml :

config methode1_3

Dans le fichier action-servlet.xml :

config methode 1_5
Pour utiliser la deuxième méthode, il faut suivre les étapes suivantes :
Dans le fichier struts-config.xml modifier le type des actions : nous ne déclarons plus la classe de l’action mais nous faisons référence à la classe DelegatingActionProxy.

config methode2_1

Ceci permet à spring de prendre en charge la gestion des actions sous forme de beans. Dans le fichier action-servlet.xml il faut déclarer l’action sous forme de bean.

config methode 1_5

L’option singleton= »false » permet d’instancier un bean pour chaque requête. Nous discuterons la configuration des beans dans un autre article.
Le plug-in ContextLoaderPlugin permet d’intégrer le framwork struts avec spring sans modifier le code des actions et sans créer de dépendance entre les deux frameworks, tout en assurant la gestion des actions sous forme de beans et de bénéficier des avantages de l’injection de dépendance apporté par spring. Néanmoins, l’utilisation de cette méthode nécessite une double déclaration des actions : dans le fichier struts-config.xml et le fichier action-servlet.xml ce qui peut être un inconvénient pour certain développeur.

Application

Dans cette partie, nous allons implémenter notre première application qui intègre les frameworks struts et spring en utilisant le plugin ContextLoaderPlugin.

L’application est très simple. Elle contient deux pages une première page d’authentification pour saisir le login et le mot de passe et une deuxième qui s’affichée en cas de «success » de l’authentification.
Le schéma ci-dessous présente la structure de l’application.

spring struts app 1

Dans ce qui suit nous allons décrire « step by step » la création de l’application :

1. Sous eclipse créer un nouveau projet web dynamique.

2. Ajouter les librairies nécessaires pour struts ajouter les lib common-xxx.jar et struts.jar (struts 1.2) et pour intégrer spring ajouter spring.jar.

3. Modifier le fichier web.xml :

integration spring struts app 2
4. Créer le fichier action-servlet.xml :

ss app 3
5. Créer le fichier applicationContext.xml :

ss app4
6. Créer le fichier struts-config.xml :

ss 10 app
7. Créer les actions :
LoginAction : permet de récupérer le login et le mot de passe ensuite utilise un UserManager pour vérifier leur validité. La dépendance entre l’action LoginAction et la classe UserManager est gérée par spring en utilisant l’injection de dépendance.

ss11 app
LogOutAction : permet de retourner à la page de login.

8. Créer la classe User : un java bean qui contient les attributs login et password.

9. Créer la classe UserManagerImpl :

La classe UserManagerImpl implémente l’interface UserManager. Cette classe possède la méthode getUser (String login, String password) qui permet de vérifier la validité du login et le mot de passe. Pour simplifier l’application, la vérification du login et le mot de passe se fait en comparant respectivement le login et le mot de passe aux chaînes de caractères « login » et « pass ».Cependant,  l’utilisation du service UserManager permettra par la suite de modifier la vérification en ajoutant par exemple un accès à la base de données et ceci sans modifier le code des actions.

ss12 app
Conclusion

Dans cet article nous avons exposé comment intégrer les deux frameworks struts et spring dans une même application : comment récupérer les beans dans une action struts, comment configurer les actions struts comme étant des beans gérés par spring et bénéficier de l’injection de dépendance.

Download application :
Vous pouvez télécharger l’application en cliquant sur ce lien application.zip

Références :

http://static.springframework.org/spring/docs/1.1.5/reference/webintegration.html




OCS :: Oracle Collaborative... |
UN PEU SUR JACKS, C'EST COM... |
Mes ordinateurs |
Unblog.fr | Créer un blog | Annuaire | Signaler un abus | MM SITE
| Dahevos L!f3
| bkaurelien