Struts 2 : première application

L'objectif de cet article est d'expliquer comment mettre en place le framework Struts 2 : (configuration des fichiers,  implémentation des actions, implémentation des jsp). Pour ceci, nous allons créer une application de gestion d'utilisateur se basant sur le framework Struts 2. Dans une première étape, nous nous limitons à l'implémentation de l'action d'authentification afin  de se concentrer sur les bases nécessaires pour la configuration et l'utilisation de Struts 2. Ensuite, nous ajouterons d'autres fonctionnalités d'ajout, suppression et modifications des utilisateurs et des droits.

Nous intégrerons par la suite, dans les prochains articles, les framework Freemark, Hibernate et Spring.

Présentation du Struts 2

Contrairement à ce que peut indiquer le nom, Struts 2 n’est pas une continuation de Struts 1 mais une fusion entre les frameworks Struts 1 et WebWork.
Struts 2 est créé pour répondre aux  faiblesses de Struts 1 et particulièrement le fort couplage des actions avec le framework et l’obligation de re-décrire un javabean pour récupérer un formulaire.

Le cycle de vie standard de Struts 2 est définit par le schéma ci-dessous :

cycle de vie de struts
  • Une fois le « dispatcher filter » passé, la requête est soumise aux intercepteurs. Ces derniers ont pour rôle d’effectuer des pre/post traitements sur la requête (gestion des exceptions, upload de fichier, validation...).
  • L’action est instanciée, peuplée puis le formulaire est validé.
  • Invocation de la méthode contenant la logique de l’action.
  • Délégation de l’affichage à la vue.
Application Gestion des utilisateurs

Pour commencer, créez sous eclipse un nouveau projet web « UserAdmin ».
Ajoutez au projet les librairies suivantes :
  1. struts2-core.jar
  2. xwork.jar
  3. ognl.jar
  4. freemarker.jar
  5. commons-logging.jar
Ces librairies sont obligatoires pour créer un projet Struts 2.
La structure du projet est décrite par le schéma ci-dessous :

structure application

Dans ce qui suit, nous allons décrire en détail les fichiers de configuration (web.xml et struts.xml) du projet.

Fichier de configuration web.xml

La configuration minimale du fichier web.xml pour  un projet Struts 2  est la suivante :

web.xml

Les éléments les plus importants dans le fichier web.xml sont filter et filter-mapping utilisés pour la configuration du FilterDispatcher.

Le FilterDispatcher est la servlet de base du framework Struts 2, il permet  de traiter toutes les requêtes en entrée, il permet l'accès aux éléments de base (ConfigurationManager, ActionMapper, ObjectFactory …)  du framework pour traiter les requêtes.

Fichier de configuration struts.xml

struts.xml

Le fichier struts.xml permet de configurer le mapping entre l'URL et l'implémentation de l'action. Ce fichier doit être  dans le dossier  src.

Le fichier struts.xml peut contenir les balises suivantes: constant, package, include, et  bean.
La balise constant :
Struts 2 permet de définir des constantes dans le ficher de configuration struts.xml, ces constantes peuvent être aussi définies dans le fichier de configuration struts.properties.

Il faut juste faire attention à l'ordre de chargement des fichiers de configuration de Struts car une constante définie dans un fichier peut être 'overiden' dans un autre fichier chargé après.

L'ordre de chargement des fichiers de configuration est le suivant:
  1. web.xml
  2. default.properties dans  Struts JAR
  3. struts.properties  dans  WEB-INF/classes
  4. struts-plugin.xml dans chaque plug-in JAR
  5. struts.xml dans WEB-INF/classes
La balise package :
La configuration de l'application peut être fragmentée en package. On peut par exemple créer un package pour chaque module de l'application ou par chaque fonctionnalité.
La synthaxe est la suivante:

<package name="test" extends="struts-default" abstract="false" namespace="/tests" >


</package>
  • name: nom du package, il doit être unique.
  • extends: un package peut extends un autre package, ce qui permet d'accéder à toutes les propriétés du package parent.
  • abstract: si le package est abstract il ne peut pas être accédé à partir d'une URL, il est juste utilisé pour l'organisation de la configuration.
  • namespace: indique le chemin depuis laquelle les actions vont être accessible.
Il est recommandé d'étendre le package par défaut struts-default pour ne pas être obliger à redéfinir des intercepteurs nécessaire pour le fonctionnement de Struts 2.

Les Actions

Créer les actions LoginAction et LogoutAction

actions

La seule contrainte pour les actions, avec Struts 2, est le fait qu’elles doivent implémenter au moins une méthode du type  'no-argument' qui doit retourner un String ou un objet Result, si non on peut utiliser la méthode execute ().

Avec Struts 2, il n'est pas obligatoire d'hériter d'une action générique, mais les actions peuvent hériter de la classe générique ActionSupport  qui implémente la méthode execute().

La classe ActionSupport  implémente plusieurs interface telles que Action, Validateable et  ValidationAware interfaces.

Les jsp

Créer les pages login.jsp et success.jsp

jsp

Pour télécharger l'application cliquez ici application
 
Conclusion
Dans cet article, nous avons vu la configuration minimale pour un projet se basant sur le framework Struts 2. Dans les prochains articles, nous allons voir en détail des aspects plus avancés de Struts 2.

 Référence
Struts 2 in Action par DONALD BROWN, CHAD MICHAEL DAVIS et SCOTT STANLIC

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

Les certifications Java

Dans cet article je vais présenter, brièvement, la notion de certification en Java Entreprise Edition. Quelles sont les certifications et leurs intérêts ?

Les différentes certifications Java proposées par Sun

En java, il y a une série de certifications proposées par Sun qui sont répartis sur 4 niveaux.  Dans chaque niveau, il y a une ou plusieurs certifications possibles et pour pouvoir accéder à des certifications du niveau supérieur, il est nécessaire d’en réussir au moins une du niveau inférieur. A titre d’exemple, si vous désirez passer la certification SCWCD, vous devez passer obligatoirement la certification SCJP.

Le schéma ci dessous montre les différents niveaux de certifications

niveaux de certification

Java Micro Edition (Java ME) : qui cible les terminaux portables.
Java Standard Edition (Java SE) : qui vise les postes clients.
Java Enterprise Edition (Java EE) : qui définit le cadre d'un serveur d'applications et d'intégration.
Au premier niveau « Entry Level », nous trouvons:
  • SCJA : (Sun Certified Java Programmer), il permet de tester les notions de base de la POO et les connaissances générales de java.
Au deuxième niveau « Foundation », nous trouvons:
  • SCJP : (Sun Certified Java Programmer), c’est la certification principale en Java. Elle est la plus connue et la plus passée.
Au troisième niveau « Speciality », il y a 5 certifications:
  • SCJD: Sun Certified Java Developer
  • SCWCD: Sun Certified Web Component Developer
  • SCBCD: Sun Certified Business Component Developer
  • SCDJWS: Sun Certified Developer for Java Web Services
  • SCMAD: Sun Certified Mobile Application Developer
Il est important de savoir que le passage aux certifications de type « Speciality », nécessite l'obtention de la certification SCJP. Cette dernière est le passage obligatoire pour les certifications de type « Speciality ».
Au dernier niveau, une seule certification:
  • SCEA: Sun Certified Enterprise Architec
Les intérêts des certifications

Le but des certifications est d’acquérir une bonne connaissance des bases en Java et JEE pour une meilleure maîtrise de leurs développements
Mais le plus important dans une certification JAVA est de l'avoir préparé car c'est une occasion pour découvrir des détails auxquels on n’a jamais pensé.
La certification reste dans tous les cas utile pour toute personne désirant approfondir ses connaissances en Java.