Professional Documents
Culture Documents
MEMOIRE
INFORMATIQUE
Par
OLLIVIER Philippe
___________
Version finale
JURY
Les travaux dcrits dans la premire partie ont t raliss au Ministre des
Affaires trangres (MAE) Nantes dans la division des Projets du Systme
dInformation. Je remercie Messieurs Nicolas TISSOT et Thierry CHAMPENOIS
pour mavoir accueilli dans leur service et mavoir propos un sujet de travail
intressant. Je remercie galement Monsieur Yves GRUAU Directeur
Commercial chez ASI pour mavoir mis en relation avec le MAE.
Enfin je tiens remercier tout particulirement la femme que jaime pour mavoir
soutenu pendant mon mmoire et nos enfants pour leur joie de vivre.
Table des matires
1. INTRODUCTION.......................................................................................................... 6
2. PARTIE 1 : LE PROJET RENDEZ-VOUS ........................................................... 8
2.1. INTRODUCTION ........................................................................................................... 9
2.2. ETAT DE LART DU DEVELOPPEMENT DAPPLICATION WEB ......................................... 9
2.3. METHODES POUR LA CREATION DAPPLICATIONS WEB ............................................. 21
2.4. ORGANISATION DU MAE.......................................................................................... 27
2.5. SOLUTIONS EXISTANTES POUR LA PRISE DE RENDEZ-VOUS ....................................... 29
2.6. OUTILS ACUBE ......................................................................................................... 32
2.7. NORMES ACUBE ....................................................................................................... 35
2.8. METHODOLOGIE DE PROJET ACUBE .......................................................................... 36
2.9. UML DANS ACUBE ................................................................................................... 38
2.10. PRESENTATION DU PROJET RENDEZ-VOUS DU MAE ................................................. 39
2.11. MA CONTRIBUTION AU PROJET RENDEZ-VOUS DU MAE ........................................... 41
2.12. CONCLUSION ............................................................................................................ 45
3. PARTIE 2 : CREATION DUNE VERSION SIMPLIFIEE DE LAPPLICATION
RENDEZ-VOUS AVEC J2EE ........................................................................................ 46
3.1. INTRODUCTION ......................................................................................................... 47
3.2. CAHIER DES CHARGES DE LAPPLICATION RENDEZ-VOUS SIMPLIFIEE.................. 47
3.3. SELECTION ET INSTALLATION DE LOUTILLAGE ........................................................ 51
3.4. FORMATION J2EE..................................................................................................... 60
3.5. PRESENTATION DE LAPPLICATION RENDEZ-VOUS REALISEE .................................. 100
3.6. CONCLUSION .......................................................................................................... 105
4. CONCLUSION........................................................................................................... 106
5. GLOSSAIRE............................................................................................................... 107
6. BIBLIOGRAPHIE ..................................................................................................... 109
7. ANNEXES................................................................................................................... 110
7.1. FILEZILLA ............................................................................................................... 110
7.2. GIMP ..................................................................................................................... 110
7.3. IRFANVIEW ............................................................................................................. 110
7.4. JARSBROWSER 3.0.................................................................................................. 110
7.5. FREEDIFF................................................................................................................ 110
7.6. JDECOMPILER ......................................................................................................... 111
Table des figures
FIGURE 1 : LE CLIENT-SERVEUR A CLIENT PASSIF ........................................................................ 9
FIGURE 2 : LE CLIENT-SERVEUR DE DONNEES ............................................................................ 10
FIGURE 3 : LE CLIENT-SERVEUR DISTRIBUE ............................................................................... 10
FIGURE 4 : LE CLIENT-SERVEUR HTML/WEB ........................................................................... 11
FIGURE 5 : DEROULEMENT DE L'EXECUTION D'UN PROGRAMME CGI ........................................ 13
FIGURE 6 : EXECUTION DUNE APPLICATION PHP ..................................................................... 15
FIGURE 7 : ARCHITECTURE D'UN SERVEUR D'APPLICATION J2EE .............................................. 16
FIGURE 8 : LE COMMON RUNTIME LANGAGE ............................................................................ 18
FIGURE 9 : ITERATIONS, PHASES RUP ET JALONS PRINCIPAUX .................................................. 23
FIGURE 10 : L'APPROCHE MATRICIELLE D'UNIFIED PROCESS ..................................................... 24
FIGURE 11 : ORGANISATION DU MAE....................................................................................... 27
FIGURE 12 : RECAPITULATIF DES LIVRABLES............................................................................. 37
FIGURE 13 : MAQUETTE - GESTION DES SEMAINES TYPES ......................................................... 43
FIGURE 14 : MODELISATION DES DONNEES REALISEE AVEC DBDESIGNER ................................. 48
FIGURE 15 : MODELISATION DES DONNEES SIMPLIFIEE.............................................................. 49
FIGURE 16 : DIAGRAMME DES CAS D'UTILISATION REALISE AVEC ARGOUML ........................... 50
FIGURE 17 : ARCHITECTURE RETENUE POUR LAPPLICATION RENDEZ-VOUS ............................. 53
FIGURE 18 : ARCHITECTURE DE SPRING .................................................................................... 58
FIGURE 19: ARCHITECTURE COMBINANT LES FRAMEWORKS STRUTS, SPRING ET HIBERNATE... 58
FIGURE 20 : CREATION D'UN DIAGRAMME DE CLASSES AVEC ARGOUML .................................. 59
FIGURE 21 : EXEMPLE HTML ................................................................................................... 62
FIGURE 22 : COMPOSANTS DU PATTERN MVC TYPE 2............................................................... 75
FIGURE 23 : STRUTS ET LE MODELE MVC ................................................................................. 77
FIGURE 24 : PAGE CREEE AVEC LA TECHNOLOGIE TILES ............................................................ 90
FIGURE 25 : ARCHITECTURE DHIBERNATE ............................................................................... 92
FIGURE 26 : REGLES DE NAVIGATION ...................................................................................... 100
5
1. INTRODUCTION
Contexte gnral
tre capable de dvelopper pour un cot raisonnable des applications web robustes
et faciles faire voluer est devenu aujourdhui un enjeu important.
Objectifs du mmoire
Il est ncessaire pour le chef de projet charg de raliser une proposition pour un
client de bien comprendre le besoin de ce dernier et destimer au plus juste la charge
de travail. Une bonne comprhension des contraintes techniques du projet peut lui
permettre destimer les travaux en limitant les risques et sans avoir prendre conseil
auprs dexperts. De mme, les comptences techniques du chef de projet peuvent
lui tre utiles lorsquil est charg de raliser un recrutement, lorsquil doit dfendre
une proposition devant un client ou lorsquun problme se pose pendant le
dveloppement.
Aujourdhui, les technologies java et open source 2 sont beaucoup utilises pour
dvelopper des applications web.
1
Navigateur (Web Browser) : Logiciel dont la fonction premire est d'interprter les
adresses des pages Web, de les afficher et d'exploiter les liens hypertextes
l'intrieur de celles-ci (ex : Internet Explorer de Microsoft).
2
Open Source : FONTAINE (2003) donne une dfinition prcise des logiciels Open
Source en sappuyant sur celle donne par les membres de la FSF (Free Software
Foundation). Nous retiendrons que les logiciels Open Source doivent tre distribus
gratuitement et que le code source complet doit tre disponible. Enfin il est possible
de modifier un logiciel Open Source, de distribuer la version modifie et de lexcuter
pour n'importe quel usage.
6
Lobjectif de ce mmoire qui sest droul sur la priode de septembre 2005 juin
2006 tait de me permettre dapprofondir mes connaissances dans le domaine du
dveloppement web et notamment en ce qui concerne les outils puisque je ne
possde pas cette exprience et que je la juge ncessaire pour la profession que
jexerce actuellement savoir celle de chef de projet informatique.
Plan du mmoire
Aprs une conclusion qui sera loccasion de faire le bilan sur les sujets tudis et de
parler des perspectives venir, vous trouverez en annexe la description de quelques
outils dont la connaissance peut savrer utile pour le dveloppeur ou le chef de
projet J2EE.
Avertissement
3
Acube, RUP, XP, J2EE, Struts, Hibernate : Les acronymes prsents dans
lintroduction seront explicits dans la suite de ce document ainsi que dans le
glossaire.
7
Partie 1
8
Partie 1
2.1. Introduction
De Septembre 2005 Dcembre 2005, jai particip en tant que chef de projet au
lancement et lanalyse des besoins du projet rendez-vous au sein du
dpartement des applications Diplomatiques et Consulaires (CXI/PSI/DC) du
Ministre des affaires trangres (MAE) Nantes. Cette partie se rapporte
lexprience acquise au cours de cette priode.
Cest la rpartition de ces trois composantes entre le client et le (ou les) serveur(s)
qui caractrise les diffrentes architectures.
Terminal ou Mainframe
mulateur
Logique de
prsentation +
Donnes Traitements
Dans cette architecture apparue bien avant les technologies Internet, toute la logique
et les donnes sont sur le serveur. Le terme client-serveur appliqu ce type
darchitecture est un peut abusif puisque le client nexcute rien. Cette solution est
scurise, robuste et le dveloppement des applications est simple. Linterface
9
Partie 1
PC
SGBDR
Flux de
donnes
Traitements Donnes
Ce type darchitecture est apparu au milieu des annes 80. Tout est sur le client,
sauf les donnes. Linterface utilisateur est plus conviviale, mais le dploiement
grande chelle est complexe et coteux.
PC Serveur Serveur de
Middleware RPC
Middleware RPC
1 dapplication 2 donnes
Appels Flux de
RPC donnes
Traitements Traitements (SGBDR, )
Dans cette architecture le client se trouve dcharg dune bonne part des traitements
et les donnes ne circulent presque plus quentre le serveur dapplication et la base
de donnes. Ces systmes sont bass sur des technologies en gnral propritaires.
Ils ne solutionnent pas compltement la problmatique de dploiement.
10
Partie 1
API
Navigateur 1 Serveur Serveur Serveur de
Internet Web dapplication 3 donnes
Visualise 2
5
les pages
donnes
prsentation
Flux de
Logique de
HTML
Traitements (SGBDR, )
(HTML)
Cette architecture est la plus rpandue aujourdhui pour les applications web. Le
navigateur agit comme un simple afficheur de pages HTML 4 et nexcute aucun
traitement (sauf peut-tre des traitements locaux comme par exemple la gestion des
erreurs de saisie en JavaSript). Lappel dune page dynamique se droule de la
faon suivante
Le rle du serveur Web est indispensable mais relativement limit sur le plan
applicatif. Grossirement, il transmet au client lui ayant fait une demande HTTP via
4
HTML (Hyper Text Mark-up Language) : Langage utilis pour dcrire les pages
web. Des balises sont insres dans le texte pour dfinir les fontes de caractres, les
styles, ainsi que les liens vers d'autres documents.
5
http (Hypertext Transfer Protocol) : Protocole rgissant les communications entre
les serveurs du Web. Sa fonction premire est d'tablir la connexion avec un
serveur, qui contient la page que l'on veut voir afficher, et de rapatrier cette page sur
le poste de l'internaute.
6
URL : Une URL (Uniform Resource Locator) est ladresse dune ressource sur
Internet. Pour une page par exemple, son URL est compose du protocole http://
suivi du nom de domaine du serveur, puis du chemin daccs la page.
11
Partie 1
URL, les fichiers statiques prsents sur le disque dur (pages HTML , images, fichiers
CSS,...).
Le march des serveurs Web est largement domin par Apache, un serveur Web
issu du logiciel libre. Si on ajoute aux parts de march d'Apache celles de Microsoft
IIS, on couvre plus de 90% du march.
Java 2 Entreprise edition (J2EE) soutenu par Sun, IBM, Oracle, HP, BEA,
etc. ;
.NET propos et soutenu par Microsoft.
Les applications Web peuvent sappuyer sur une architecture lgrement diffrente
(ex : architecture code mobile). Elles sappuient cependant toujours sur la
technologie Internet (navigateur internet, HTML, serveur http, ). A la diffrence des
sites Internet qui sont statiques, une application web permet daccder de manire
dynamique une base de donnes par le biais de requtes.
CLOUX (2002) nous rappel que CGI (Common Gateway Interface) est une norme
apparue presque en mme temps que les premires spcifications de HTML avec
pour objectif la cration de documents HTML de manire dynamique.
12
Partie 1
Le droulement de lappel dun programme CGI peut tre reprsent par la figure
suivante :
Submit 6
5
Document
HTML 2
Document
HTML
3 Variables
denvironnement
13
Partie 1
Pour raliser des programmes CGI, le langage le plus utilis est le langage Perl. Il
est possible dutiliser dautres langages comme le langage C par exemple. Le
langage Perl est un langage de script bien connu des dveloppeurs du monde Unix,
bien que moins performant que le C car interprt, il est aussi beaucoup plus simple
utiliser.
Larchitecture CGI est simple, mais associe des performances mdiocres lorsque
le nombre dutilisateurs connects simultanment au mme serveur Web augmente.
En effet, pour chaque appel dune page dynamique, un nouveau processus est
lanc. Or lallocation dun nouvel espace mmoire avec un nouvel environnement
dexcution est consommateur de ressources systme.
Dautre part, lorsque des oprations sont effectues sur une base de donnes, une
connexion au SGBD est initie pour chaque page Web dynamique. Cette connexion
est ensuite ferme ds que la requte pour cette page est termine. Les temps de
rponse sen trouvent nettement allongs.
Enfin, les applications CGI sont caractrises par labsence de sparation des
traitements et de linterface graphique. Le programme CGI produit un cran HTML en
rponse une requte du client. Toute modification de laspect de cet cran
ncessite une modification du code du programme, ce qui peut poser dimportants
problmes de maintenance.
2.2.3. PHP
FONTAINE (2003) crit que le PHP est un langage de script open source fortement
inspir du C et de Perl. Cest le 5ime langage le plus utilis dans le monde. Il est
interprt et ne ncessite pas dtre compil pour tre excutable. Il est souvent
associ la base de donnes open source MySQL et au serveur Apache pour
raliser des sites web dynamiques. Il permet dexploiter bien dautres bases de
donnes, notamment celles dotes dun pilote ODBC (Open Database Connectivity).
Les applications dveloppes avec PHP / MySql peuvent tre hberges pour un
prix modeste. PHP est support par le serveur Web Apache, mais fonctionne
galement avec dautres serveurs Web (IIS de Microsoft, IPlanet, ).
14
Partie 1
Exemple : MaPage.PHP
<html>
<head>
<title>Exemple</title>
</head>
<body>
<?php
echo "Message affich par un script PHP";
?>
</body>
</html>
Le code PHP est inclus entre une balise de dbut et une balise de fin, directement
dans la page HTML. Ce code est excut sur le serveur (dans lexemple ci-dessus
ce code permet laffichage dun texte). Le client ne reoit que le rsultat du script,
sans aucun moyen d'avoir accs au code qui a produit ce rsultat.
2
Navigateur 1 Serveur
Interprteur
Internet Web Page HTML
PHP
avec du
code PHP
5 Intgr 3
PHP fonctionne sur de multiples plates-formes (Windows, Unix, Linux, Mac OS). Des
extensions dynamiques permettent au PHP de gnrer des fichiers PDF, de
sinterfacer avec des serveurs de messagerie, des serveurs LDAP, de gnrer de la
cartographie, des images et graphiques la vole, ou encore de gnrer des
animations flash.
15
Partie 1
Grce lintgration dun vrai modle objet, du support de XML et des services web,
PHP 5 saffirme aujourdhui comme une plate-forme de dveloppement concurrente
de J2EE et de .NET.
2.2.4. J2EE
J2EE est une norme qui dfinit une infrastructure dexcution (pour faire tourner les
applications) et un ensemble de services accessibles via lAPI J2EE. Le standard
J2EE sappuie sur plusieurs piliers :
La spcification J2EE ;
Une suite de tests de compatibilit (J2EE compatibility test suite) qui garantit
le respect des spcifications par les diteurs ;
Une implmentation de rfrence
Cette implmentation de rfrence est produite par JavaSoft (filiale de Sun) et est
nomme JAVA EE 5 SDK. Il sagit dune implmentation des API J2EE qui na pas
pour vocation dtre utilise en production. Tomcat est l'implmentation de rfrence
pour la partie Conteneur de Servlets.
J2EE est aujourdhui support par de nombreux serveurs. Au total, on compte prs
dune trentaine dimplmentations commerciales ou Open Source de la spcification
J2EE.
Serveur J2EE
Conteneur de Servlets
Client
(navigateur)
Servlet JSP
Client
(navigateur,
application) EJB EJB
Base de
donnes
Conteneur dEJB
Une Servlet est un programme java excut ct serveur dans un conteneur. Une
JSP (Java Server Pages) est une page HTML contenant du code java. Les JSP sont
transformes en servlets lexcution. La technologie JSP permet de gnrer des
16
Partie 1
pages web dynamiques partir dun principe assez proche de celui dont nous avons
parl pour PHP. Nous reviendrons sur ces notions en partie 2.
Les EJB (Entreprise Java Beans) sont le moyen dimplmenter les technologies
composants pour J2EE. Un EJB est un composant Java. Il sexcute dans un
conteneur qui lui fournit des services tels que la persistance.
Lutilisation des EJB nest pas indispensable pour dvelopper une application web
avec J2EE. Il est possible dutiliser un serveur dapplication qui ne gre pas les EJB
mais uniquement les Servlets (ex : Tomcat est un conteneur de Servlets). Cest le
choix qui sera fait dans la suite de cette tude. Les EJB ne seront donc pas tudis
plus en dtail dans ce mmoire.
Des API (JDBC, JNDI, JTA, JavaMail, JMS, JAAS, ) sont employes pour fournir
des fonctionnalits aux applications crites en Java (connexion une base de
donne, localisation et utilisation de ressources, utilisation de transactions, envoi et
rception de courriel, envoi et rception de messages, gestion de laccs aux
ressources).
La solution J2EE repose sur le langage java. Le code source java transform en
bytecode est interprt par une machine virtuelle (JVM : Java Vitual Machine) lors de
lutilisation de lapplication. Ceci permet de crer des applications portables
(indpendantes de toute plate-forme). Il est possible de dvelopper une application
web J2EE sous MS Windows puis de la dployer sur un autre systme (linux par
exemple).
2.2.5. .NET
7
Framework : Bibliothque de classes fournissant une ossature gnrale pour le
dveloppement d'une application. Struts est un exemple de framework en Open
Source, bas sur l'architecture MVC.
Struts, MVC : Ces notions sont dfinies plus loin.
17
Partie 1
Grce au CLR, un programme ralis dans un langage X peut crer des objets qui
hritent dobjets crs dans un langage Y (diffrent de X). Pour quun programme
soit excutable par CLR il ne doit pas tre compil en code natif excutable mais en
un code intermdiaire appel MSIL pour MicroSoft Intermediate Langage.
Code MSIL
source Compilateur
Class Loader
MSIL
CLR
.NET contient encore dautres outils qui peuvent tre compars avec ce qui existe
dans le monde Java (ex : les assemblies sont des fichiers darchive destins
simplifier le dploiement. Il sont quivalents aux fichiers jar du langage java).
18
Partie 1
Ruby on Rails, galement appel RoR ou Rails est un framework crit en Ruby dont
la premire version est apparue en 2004.
Ruby est un langage de programmation objet disponible depuis 1995. Il s'agit d'un
langage interprt dont la syntaxe est relativement proche de Perl. Ruby se veut tre
un langage simple (grce une syntaxe cohrente) et surtout puissant. Cette
puissance vient notamment du fait que tout est objet en Ruby, mme les entiers ou
les chanes de caractres par exemple. En outre, le langage comprend aussi la
notion dhritage (mais pas multiple), un ramasse-miettes pour la gestion de la
mmoire (comme en Java), les gestion des exceptions, des expressions rgulires,
etc.
Rails fonctionne selon deux grands principes qui sont ne pas se rpter et
convention plutt que configuration.
Le premier signifie que chaque dclaration ne doit tre faite quune seule fois.
Comme il sagit dun framework en couches complet, la plupart des composants sont
lis entre eux. Par exemple, ActiveRecord na pas besoin quon lui fournisse les
colonnes des tables de la base de donnes. Il les trouve tout seul.
Le second, lui, explique que le programmeur ne doit programmer que ce qui nest
pas conventionnel. Par exemple, les noms de contrleurs sont associs
automatiquement la table ayant le mme nom queux au pluriel. Si la table ne porte
pas ce nom, il faut le spcifier au contrleur.
Rails est bas sur une architecture MVC (Modle Vue Contrleur) 8 .
Les modles
Ils maintiennent ltat de lapplication et imposent toutes les rgles mtier qui
sappliquent aux donnes. Ce sont, en quelque sorte, les gardiens de lintgrit des
donnes.
8
MVC (Model View Controller) : Ce pattern architectural est recommand pour la
conception des applications web dynamiques. Il propose dorganiser lapplication en
3 couches spares. Le but est de sparer, lors de la conception, laccs la base
de donnes (M), la partie visible par lutilisateur (V) et la distribution des requtes aux
composants appropris en fonction de la logique de lapplication (C).
19
Partie 1
Dans Rails, cest ActiveRecord qui gre les modles et regroupe les classes
assurant la gestion des donnes, venant des bases de donnes. Il suffit donc de
crer un contrleur hritant de ActiveRecord pour que Rails dtecte
automatiquement les tables a utiliser et les grer avec des commandes simples.
Les vues
Dans le cas de Rails, il sagit de fichiers .rhtml contenant du code html ainsi que du
script Ruby afin de les lier lapplication.
Les contrleurs
Rails offre un systme appel scaffolding (que lon peut traduire par chafaudage ou
structure en franais). Cette baguette magique permet de gnrer trs rapidement
les lments Vue et Contrleur ncessaires la gestion courante des donnes
issues du Modle (Ajout, Affichage, Modification, Suppression), sans avoir crire
une seule ligne de code. Il est bien entendu possible dtendre ce fonctionnement,
ou tout simplement de tout construire manuellement.
Bases de donnes
Serveur HTTP
Rails est install avec WEBrick (serveur http crit en Ruby). Idal pour une petite
structure car trs simple dutilisation. Si le serveur doit accueillir beaucoup de
demandes, lutilisation de serveurs plus puissant comme Apache est recommande.
Rails et Ajax
20
Partie 1
AJAX (Asynchronous JavaScript and XML) est une mthode apparue en 2005 pour
dvelopper des applications web. AJAX est base sur un ensemble de technologies
couramment utilises sur le web :
AJAX permet de charger lessentiel de la page une seule fois (les donnes variables
de la page sont mises jour de faon asynchrone sans avoir recharger la page
complte chaque fois).
Modules
CLOUX (2003) prsente les solutions qui peuvent tre adoptes pour tenter de
rpondre ce problme complexe en sappuyant sur deux visions majeures : RUP
(Rational Unified Process) et XP (extreme programming).
9
Le comptage des offres parues dans les numros de juin 2006 de lhebdomadaire
courrier cadres fait ressortir nettement cette tendance. Cet indicateur est cependant
prendre avec prcaution en raison de leffet amplificateur de loffre par rapport au
march rel.
21
Partie 1
Mthodes,
Choix technologiques,
Formation, cohsion et motivation de lquipe de dveloppement.
Les rsultats disponibles fin mars 2002 montrent que parmi 1158 organismes stant
auto-valus :
Promu par Rational, RUP propose la fois une mthodologie (UP) issue des
meilleures pratiques en gnie logiciel et un outil constitu essentiellement de
documents types (modles de documents, canevas de projets).
Vocabulaire et concepts :
22
Partie 1
Fondements de RUP :
RUP est :
Pilot par les cas dutilisations (ceux-ci doivent tre labors avec prcision
le plus en amont possible);
Centr sur larchitecture (la description du systme fait partie du processus
et doit tre ralise selon diffrents points de vue : celui de lanalyste, du
dveloppeur, );
Itratif et incrmental (itratif pour faire diminuer les risques ds le dbut du
projet et incrmental car chaque itration doit enrichir le rsultat final).
23
Partie 1
Le cycle de dveloppement est itratif avec un nombre variable ditrations dont les
terminaisons correspondent des livrables. Au fil de lavancement du projet, les
poids respectifs des diffrentes activits vont voluer (voir la figure ci-dessous).
24
Partie 1
Conclusion
UP ncessite une bonne matrise dUML. Cette mthodologie trs codifie est
davantage concentre sur lanalyse et la conception que sur le code et les
technologies mises en uvre pour raliser un logiciel. Elle est destine des projets
stratgiques ou sollicitant un nombre important dinterlocuteurs.
XP appartient la catgorie des mthodes agiles qui prennent en compte le fait que
les besoins sont susceptibles dvoluer pendant le projet. XP est ax davantage sur
lactivit de production (dveloppement, prototypage rapide, tests) que sur les
phases danalyse et de conception. Il est constitu dun ensemble de meilleures
pratiques de dveloppement concernant le travail en quipe, le transfert de
comptences, les rgles de dveloppement et les tests pour fournir des livrables de
qualit. Il sagit dun processus relativement innovant, bas sur un cycle itratif et
incrmental simple mettre en uvre et adapt de petites quipes de
dveloppement.
RETAILLE (2005) donne une traduction des principes directeurs du manifeste qui
dfinit les bases des mthodes agiles. Les mthodes agiles privilgient :
Les individus et les interactions par rapport aux processus et aux outils,
Les logiciels qui fonctionnent par rapport une documentation complte,
La collaboration avec les utilisateurs par rapport une ngociation
contractuelle,
La rponse aux changements par rapport au respect d'un plan.
25
Partie 1
Soyez extrmement vigilant quand quelquun vous annonce que le projet doit tre
dvelopp avec agilit . Pour MANGOLD (2005) il faut comprendre Nous ne
savons pas trop comment nous y prendre, mais limportant est de commencer. En
cas de problme, nous procderons autrement .
Comme nous le verrons plus loin, le Ministre des affaires trangres (MAE) a dfini
sa propre mthode. Cest une mthode itrative et incrmentale inspire de UP.
Dans la pratique, il est tout de mme ncessaire de sassurer que tous les
participants ont bel et bien compris les principes de la mthode appliquer et que
celle-ci peut vritablement tre applique au cas prsent.
Au final, cest bien souvent lexprience du chef de projet qui fait la diffrence. La
mthode doit sadapter au projet et non linverse.
26
Partie 1
La division des Projets du Systme dInformation (PSI) est lune des 5 divisions
oprationnelles du Service des Systmes dInformation et de Communication (95
agents dont 70 % Paris et 30 % Nantes).
27
Partie 1
Le systme dinformation du MAE est utilis par des agents consulaires (personnel
dun consulat franais ltranger) pour grer des informations concernant les
usagers (individus qui sadressent aux consulats pour obtenir un service). Il existe
deux types dusagers :
Franais ltranger
o Franais rsidant ltranger
Ils effectuent des demandes administratives (ex : demande de
passeport)
Les consulats jouent auprs deux le rle dune
mairie (tat civil) et dune
prfecture (affaires lectorales, )
o Franais de passage ltranger (touristes)
Ils contactent gnralement le consulat uniquement lors dune
situation durgence (perte de documents, papiers provisoires,
). Cette population nest pas concerne par le projet rendez-
vous .
Etranger ltranger
o Ils ralisent des demandes de visa (plusieurs types de visa existent :
visa de touriste pour venir en France ou entrer dans lespace
Schengen)
Tous les consulats ont un site Internet. Chaque consulat est responsable du contenu
de son site.
Ce site donne accs aux sites Internet des diffrents consulats de France
ltranger. Les consulats confient gnralement lhbergement de leur site un
spcialiste local. Lappel de lapplication rendez-vous sera ralis partir de ces
sites.
28
Partie 1
2.4.1. RMV2
RMV2 (Rseau Mondial Visa) permet la gestion des demandes de visa effectues
par les trangers (ex : visa Schengen) :
Il est utilis par le secteur tranger de tous les consulats.
Dans chaque consulat, il existe une base RMV2 locale qui change des
informations avec la base RMV2 centrale situe Nantes la SDCE (Sous
Direction de la Circulation des Etrangers).
2.4.2. Racine
10
Acube : Mthodologie du MAE utilise pour le dveloppement des applications
web de ladministration.
29
Partie 1
Dans le cas dune demande d'inscription au registre des franais tablis hors de
France, le droulement de lapplication est le suivant :
30
Partie 1
La prise de rendez-vous est possible soit par Internet sur le site, soit par
tlphone (service payant).
La procdure diffre en fonction du type de visa (visas de "long sjour", visas pour un
autre pays reprsents par la France).
La liste des documents prsenter le jour du rendez-vous sont prciss sur le site
Internet du consulat, mais pas dans le module de prise de rendez-vous.
31
Partie 1
Contraintes et remarques :
32
Partie 1
Pour dvelopper les applications Acube, les outils suivants sont utiliss :
Serveur Web avec Apache 2.0.52 et Serveur dapplication avec Tomcat 5
(Servlet Container),
Environnement de dveloppement Eclipse 3.0 + Plugins,
Base de donnes relationnelle SQL Server
Outil de modlisation UML et Conceptuel de donnes avec Power AMC 10.
Gestion des anomalies avec Mantis,
Gestion de configuration sous CVS,
Dploiement de lapplication Acube avec ANT ou Marven
Automatisation des tests avec JUNIT (en cours dtude)
2.6.1. Tomcat
Un serveur dapplication J2EE est un logiciel qui met en uvre lAPI J2EE fournie
par SUN. Il existe de nombreuses solutions propritaires (Webshere dIBM, Weblogic
de BEA ) ou open source (Jboss, tomcat ). Tomcat fonctionne sur la plupart des
systmes dexploitations (windows, linux, ). Cest un moteur de servlet. Il permet
de dvelopper des sites dynamiques en Java, mais ne supporte pas les EJB 11 . Les
EJB ne seront pas tudis dans ce mmoire. Tomcat contient un serveur HTTP
(apache).
2.6.2. Eclipse
Il est possible de dvelopper des applications java avec un simple diteur de texte,
mais en pratique, lutilisation dun IDE (Integrated Developpement Environnement)
java est indispensable pour gagner en productivit. Eclipse est un IDE Open Source
qui permet de dvelopper notamment en java. Il fonctionne sur les plate-formes
Windows 98/NT/2000/XP et Linux. Jbuilder de Borland est une alternative
intressante mais cest une solution propritaire. La version de base de Jbuider est
gratuite (mme pour une utilisation commerciale).
11
EJB : La technologie Enterprise JavaBeans est une architecture de composants
logiciels ct serveur pour la plate-forme de dveloppement J2EE.
33
Partie 1
SQL Server est une base de donnes relationnelle distribue par Microsoft. Il existe
des alternatives Open Source. Les plus connues sont PostgreSQL et MySQL.
Power AMC est un outil de modlisation graphique payant distribu par Sybase qui
permet de raliser les 9 diagrammes UML en plus de ceux de la mthodologie
Merise (modle conceptuel de donnes, ). Il nexiste pas doutil aussi puissant et
polyvalent dans le monde Open Source mais lon peut citer ArgoUML pour la
modlisation UML et Dbdesigner pour la reprsentation de la base de donnes.
2.6.5. Mantis
Mantis est un outil Open Source de gestion de bugs consultable via le web. Il peut
tre install sur Windows, Mac ou Linux. Bugzilla (qui est prsent dans ZELLER
2005) est galement un Gestionnaire de bugs Open Source reconnu, mais aprs
avoir compar les deux outils le MAE a retenu Mantis
2.6.6. CVS
HOLZNER (2004) dfinit CVS (Concurrent Versions System) comme un outil Open
Source permettant de dvelopper en quipe (gestion des accs concurrents sur les
fichiers dun projet) et de conserver un historique des diffrentes versions.
2.6.8. Junit
34
Partie 1
1). Le standard XML comme format dchange de linformation est utilis dans les
diffrentes logiques de programmation.
2). Une ergonomie complexe base sur les principes du client riche est applique de
prfrence. Ainsi, une seule page HTML statique est ncessaire pour grer un mtier
ou un cas dutilisation. Seuls les flux de contenu informatif sont gnrs par le
serveur. Ce type dergonomie a pour avantage :
Des flux dchange de taille plus faible et une plus grande capacit de monte
en charge du fait dune sollicitation moindre du serveur.
Une souplesse ergonomique plus importante par lutilisation de zones
dynamiques et une garantie de cohrence avec la charte graphique du MAE
par lutilisation des APIs de gnration dlments constitutifs dune page.
12
Un design pattern est la description dune solution classique un problme
rcurrent, que lon peut rencontrer gnralement un niveau conceptuel,
architectural ou technique. En adaptant un design pattern au contexte dun projet il
est possible de bnficier de lexprience dexperts et donc damliorer la qualit ou
la maintenabilit dune application.
13
DAO : design pattern ddi la persistance dtaill sur le site
http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
14
Log4j : Cest loutil Open Source de traage dapplication le plus utilis (source
FELICITE 2006)
35
Partie 1
Elle est base sur le principe itratif (Unified Process) avec pour objectif :
Pour les trois premires phases, Acube dcrit galement la dmarche adopter
lors :
De lanalyse technique
De lanalyse fonctionnelle
De lanalyse SGBD
De la Modlisation UML et Merise
De la ralisation de la Maquette
Ces comptences peuvent tre rparties sur une ou plusieurs personnes physiques.
36
Partie 1
Livrables
Phase dtude Phase dimplmentation
Analyse technique DA SFDT
Analyse SFG
fonctionnelle
Maquettage Maquette
Modlisation UML Cas Diagrammes de classe et de
dutilisation squence
Analyse SGBD MCD MPD
Figure 12 : Rcapitulatif des livrables
37
Partie 1
Il existe gnralement un foss entre les outils utiliss pour raliser la modlisation
UML et les outils utiliss pour le dveloppement de lapplication. Ceci dbouche le
plus souvent sur un dcalage entre la modlisation et le systme rel. Le maintien de
la cohrence a un cot.
Ceci explique sans doute pourquoi parmi les neuf diagrammes dfinis dans la
notation UML, seuls deux sont couramment utiliss au MAE, et la modlisation est le
plus souvent cre par et pour la matrise duvre alors que les dveloppements
sont dj bien avancs (les diagrammes font partie de la documentation technique
de lapplication).
38
Partie 1
39
Partie 1
3. La rcupration des informations saisies par lusager dans RMV2 ou dans les
applications mtiers du systme Racine. Le principe de rcupration des
donnes dans RMV2 partir dune application web Acube centralise a dj t
mis en uvre dans le projet VISANET15. Un principe similaire sera adopt,
garantissant la scurit et la cohrence des donnes importes.
Lobjectif du projet est de btir une solution pouvant tre utilise par tous les postes,
dans tous les pays o la France est reprsente.
Une maquette exhaustive sera prsente lensemble des postes consulaires via
lintranet pour obtenir la plus grande adhsion avant la ralisation proprement dite.
1 Directeur de projet
1 Chef de projet
3 Responsables fonctionnels pour la partie Visa (RMV2)
2 Responsables fonctionnels pour la partie Racine
1 Responsable mthodologie Acube
1 Architecte logiciel
15
VISANET est un projet Acube permettant d'externaliser la saisie de certaines
demandes de visa.
40
Partie 1
La fin de la premire partie devrait cependant vous permettre de vous faire une ide
assez prcise du travail accompli et de la dmarche adopte.
RMV2 RACINE
3 millions de demandes de visa par an 1 million de franais rsident depuis plus
de 6 mois ltranger. 300 000 nouveaux
franais ltranger par an
41
Partie 1
Enfin jai organis une runion destine identifier les risques du projet et y
apporter des solutions. Les discussions ont port principalement sur la scurit des
donnes. Il a t dcid de crer une base de donnes unique pour grer les
donnes saisies par les usagers et celles saisies par le personnel du ministre des
affaires trangres, mais dattribuer les droits sparment pour ces deux types de
donnes (les usagers ne doivent pas tre autoriss mettre jour les donnes de
paramtrage saisies par le personnel du MAE).
16
Secteur franais : Personnel du Ministre des affaires trangres qui rpond aux
demandes des franais. Le secteur franais utilise RACINE.
42
Partie 1
43
Partie 1
44
Partie 1
2.12. Conclusion
Lors de mon passage au MAE jai t invit une runion de retour dexprience
destine identifier les points damlioration envisager pour la filire Acube. Cette
runion sest droule alors que le premier projet de la filire (VISANET) touchait
sa fin. Les points suivants ont t abords :
17
SFTD : Spcifications Fonctionnelles et Techniques Dtailles
45
Partie 2
46
Partie 2
3.1. Introduction
Cette application pourrait tre utilise par plusieurs socits souhaitant mettre la
disposition du public des rendez-vous de diffrentes natures (exemple : un garagiste
propose des rendez-vous pour changer les pneumatiques et dautres rendez-vous
pour faire une vidange. Un salon de beaut propose des rendez-vous pour une
sance de bronzage et dautres pour une pilation). Chaque socit pourrait grer
plusieurs bureaux mais naurait accs quaux donnes de sa socit. Une socit
pourrait crer des types de rendez-vous et mettre jour le calendrier des jours
ouvrs. Chaque socit aurait une page daccueil spcifique sur laquelle un client
pourrait sidentifier ou senregistrer. Le client pourrait alors choisir un rendez-vous et
le confirmer. Il aurait galement la possibilit de visualiser ses rendez-vous ou
dannuler un rendez-vous.
47
Partie 2
48
Partie 2
Dans un second temps, mon but dans cette deuxime partie tant de me former aux
technologies J2EE, dexprimenter un certain nombre doutils et non de btir une
application commercialisable, jai simplifi radicalement lapplication rendez-vous
pour ne garder que lessentiel. La reprsentation de la base de donnes qui sera
rellement utilise dans la suite de ce document pour btir lapplication simplifie de
prise de rendez-vous est la suivante :
Rendez-vous Creneaux
Personnes --------------- -------------
------------- creneaux_id * creneaux_id *
person_id * person_id * DateHeureDebut
nom ServicePropos
prnom RdvAutoris
tlphone
courriel
login
motdepasse
administrateur
Si un mme service est propos sur plusieurs crneaux il faudra saisir le mme
libell plusieurs fois ce qui est un inconvnient du modle simplifi. Cette solution ne
serait pas acceptable dans le cadre du dveloppement dune application
professionnelle.
49
Partie 2
3.2.1. Acteurs
Les cas dutilisation suivants sont rservs aux autres utilisateurs (clients) :
Prise dun rendez-vous parmi les crneaux non encore affects un rendez-
vous qui sont ouverts la prise de rendez-vous
Liste des rendez-vous de la personne connecte avec possibilit de dtruire
un rendez-vous
Modification des champs Prnom, Nom, Tlphone, Courriel, Login et Mot de
passe de la personne connecte.
50
Partie 2
3.2.4. Navigation
Aprs lcran de connexion (saisie du login et du mot de passe) un menu est affich.
La navigation est ralise partir de ce menu.
Larchitecture propose sinspire des choix raliss par le MAE pour la filire Acube
en remplaant les solutions propritaires ou maison par des solutions open source
reconnues et adaptes :
51
Partie 2
52
Partie 2
Aprs avoir ttonn longtemps pour savoir prcisment quels outils et quelles
versions utiliser pour dvelopper lapplication simplifie de prise de rendez-vous, jen
suis arriv la conclusion que la solution suivante tait un bon compromis :
Navigateur (1)
JAVA (2)
HTTP
Environnement
Serveur dapplication (3) de
dveloppement
Plugin (10) intgr (9)
Application
Couche prsentation (4) rendez-vous
Dploiement
JDBC (7)
Outillage pour crer, administrer
et consulter la base de donnes
(12)
Base de donnes relationnelle (8)
53
Partie 2
Pour chacun de ces outils, voici quelques conseils pour linstallation, une dfinition et
la justification du choix.
J2SE
J2SE (plate-forme Java 2, Standard Edition) est la base indispensable pour raliser
un dveloppement J2EE.
Le JDK n'est pas un logiciel libre. Il est gratuit, mais son usage est rgi par une
licence qui protge les droits du propritaire (Sun).
Eclipse
Pour installer Eclipse sur Windows XP j'ai tlcharg partir du site www.Eclipse.org
dans la section downloads le fichier Eclipse-sdk-3.1.2-win32.zip. J'ai galement
tlcharg les fichiers nlpack1_featureoverlay-Eclipse-sdk-3.1.1.zip et nlpack1-
Eclipse-sdk-3.1.1a-win32.zip pour permettre un affichage des crans en franais.
Nous avons dj vu dans la premire partie quEclipse est un IDE java Open Source.
Je prsenterai quelques fonctions de base dEclipse dans le chapitre consacr
lauto formation J2EE.
Le choix dEclipse sest impos naturellement puisquil fait partie de loutillage Acube.
Tomcat
La version 5.5.15 de Tomcat que jai utilise est tlchargeable sur le site
http://tomcat.apache.org/ (fichier apache-tomcat-5.5.15.exe).
Le serveur dapplication Open Source Tomcat dont nous avons dj parl dans la
premire partie a t choisi car il fait partie de loutillage Acube.
MySQL
BORDAGE et DAVY (2005), indiquent que parmi les SGBD (Systme de gestion de
Bases de Donnes) open source, MySQL est utilis dans 86% des cas et
PostgreSQL dans 10% des cas (plusieurs solutions se partagent les 4% restant). 48
% des utilisateurs sont prts basculer sur une base open source pour leurs
nouveaux projets. Microsoft propose gratuitement une version allge de SQL
Serveur 2005 (baptise SQL Server Express ) pour offrir une alternative
MySQL.
54
Partie 2
MySQL Administrator
Dbdesigner
Driver JDBC
55
Partie 2
Plusieurs plugins peuvent tre ajouts Eclipse pour tendre ses capacits. Le seul
qui me semble indispensable lorsque lon utilise la fois Eclipse et Tomcat est celui
tlchargeable gratuitement sur le site www.sysdeo.fr (jai tlcharg le fichier de la
version 3.1 tomcatpluginv31.zip pour raliser linstallation).
Eclipse Web Tools Platform (WTP) est un plugin Open-Source pour Eclipse
particulirement adapt au dveloppement d'applications web J2EE. WTP
(disponible sur http://www.eclipse.org/webtools/) est compos de nombreux outils
(diteur JSP, diteur XML, etc.) et exemples de programmes. Je nai pas test
personnellement WTP, mais les dveloppeurs J2EE si intressent beaucoup
actuellement.
Struts
Aprs avoir tudi le HTML, CSS, JavaScript, Java et MySQL. Aprs avoir cr mes
premires Servlets et JSP avec Eclipse puis dploy le tout sur tomcat avec lomboz
jtais en mesure de commencer le dveloppement de lapplication de prise de
rendez-vous. Je me suis alors pos plusieurs questions :
Comment implmenter au mieux le design pattern MVC ?
Quelle mthode utiliser pour que les valeurs entres sur un formulaire soient
conserves lors du raffichage de celui-ci ?
Comment faire pour vrifier la validit des donnes entres sur un
formulaire ?
Quelle mthode utiliser pour crer une application multilingue ?
Comment faire pour dvelopper une application, en vitant, tant que faire ce
peut, la duplication de code (pour faciliter la maintenance) ?
SARRION (2005b) propose une solution base sur des JSP et une Servlet unique
pour implmenter le design pattern MVC 2 sans avoir recours un framework tel que
struts. Il propose galement une solution permettant, lorsquun formulaire est
raffich, de conserver les donnes saisies. Il est possible de crer soi-mme une
mthode permettant dafficher des messages derreurs ou de grer laffichage
56
Partie 2
Hibernate
Hibernate est un framework open source qui permet de mapper une base de
donnes relationnelle en objets (POJO 18). Il propose un accs orient objet aux
donnes.
Spring
18
POJO (Plain Old Java Object) : Un POJO est un objet java. Cet acronyme est
principalement utilis pour faire rfrence la simplicit d'utilisation d'un Objet Java
en comparaison la lourdeur d'utilisation d'un composant EJB.
57
Partie 2
Noyau Spring
POA : La Programmation Oriente Aspect est utilise par Spring pour offrir des
services similaires ceux des conteneurs EJB, mais sans leur lourdeur, car ils
sont applicables de simples JavaBeans, ou POJO.
MOR : Mapping Objet / Relationnel
DAO : Objets d'Accs aux Donnes
Spring Web : Module dintgration de frameworks Web
MVC : Modle Vue Contrleur
SPRING s'appuie sur les principes du design pattern IoC (Inversion Of Control ou
Injection de dpendance) et sur la programmation Oriente Aspect (POA). L'ide du
pattern IoC consiste, lorsqu'un objet A besoin d'un objet B, dlguer un objet C
la mise en relation de A avec B. Les notions dinjection de dpendance et de
programmation oriente aspect ne seront pas tudies dans ce mmoire.
La figure ci-dessous montre grossirement comment combiner les frameworks Struts
(pour la couche prsentation), Spring (pour la couche Mtier) et Hibernate (pour la
couche persistance) :
RAIBLE (2005) permet de construire une petite application web (CRUD ou Create
Retrieve Update Delete) utilisant Struts, Spring et hibernate. Jai test lexemple afin
58
Partie 2
ArgoUml
Sur ce site, ArgoUML est prsent comme tant loutil de modlisation UML open
source le plus utilis. Il gre les 9 diagrammes UML. Dvelopp en java, il peut tre
utilis sur tous les systmes supportant java. Il existe des extensions commerciales
bases sur ArgoUML (Poseidon de Gentleware, plugin MyEclipse pour Eclipse).
59
Partie 2
3.3.1. Conclusion
Pour dvelopper une application web, il nest pas indispensable dutiliser des
frameworks tel que Struts ou hibernate. Lutilisation de ces frameworks dans le
cadre de ce mmoire a pour but den mesurer lintrt.
Afin de dvelopper une application web, il est galement possible de crer son
propre framework. Cette dmarche ncessite davoir un grand nombre dapplications
dvelopper pour amortir la cration du framework. Ceci est donc rserve de
grosses structures (trois ans ont t ncessaires au MAE pour btir le framework
Acube). Pour crer un framework maison , on part gnralement dun framework
tel que Struts que lon tend. Cest le cas pour Acube qui est bas sur StrutsCX et
Struts. Le framework StrutsCX (http://it.cappuccinonet.com/strutscx/index.php
) s'utilise avec Struts et permet de renvoyer du XML la place des JSP.
Cette section rsume quelques points importants concernant les outils, langages,
frameworks ou concepts quil ma fallu matriser avant de commencer le
dveloppement de lapplication de gestion des rendez-vous. Il faut savoir quavant
dentamer ce mmoire je nai jamais particip moi-mme au dveloppement dune
application web en tant que dveloppeur et quil mtait donc indispensable de
consacrer le temps ncessaire pour me former.
Pour dvelopper une application web il est ncessaire de connatre le HTML. Ceci ne
reprsente pas une difficult majeure. Il existe de nombreux ouvrages consacrs au
HTML et plusieurs outils de conception de site web commerciaux (ex : frontpage de
Microsoft) ou open source (ex : NVU) qui permettent de gnrer du code HTML au
travers dune interface graphique.
60
Partie 2
<HTML>
<HEAD>
<TITLE>PAGE DE LOGIN - GESTION DES RENDEZ-VOUS</TITLE>
</HEAD>
<BODY BGCOLOR="white">
<H1>Veuillez vous identifier</H1>
<FORM name="login">
<TABLE>
<TR>
<TD> Login </TD>
<TD> <INPUT type="text" value="" name="login"/></TD>
</TR>
<TR>
<TD> Mot de passe </TD>
<TD> <INPUT type="text" value="" name="motdepasse"/></TD>
</TR>
</TABLE>
<INPUT type="submit"/>
</FORM>
</BODY>
</HTML>
61
Partie 2
Lexemple ci-dessous permet dafficher la date actuelle dans une page HTML avec
un format personnalis ( 02/07/2006 devient Dimanche 2 juillet 2006, 17H10 ).
62
Partie 2
<HTML>
<HEAD>
<TITLE>AFFICHER LA DATE</TITLE>
</HEAD>
<BODY BGCOLOR="white">
<H1>Voici la Date</H1>
<SCRIPT src = "dateheure.js">
</SCRIPT>
<SCRIPT LANGUAGE = "JavaScript">
document.write (AffichageDateConviviale (Aujourdhui) )
</SCRIPT>
</BODY>
</HTML>
63
Partie 2
entete
entete2
entete3
menu texte
pied
64
Partie 2
width: 100%;
background-color: rgb(204, 204, 204);
}
.texte10 { font-family: Arial,Helvetica,sans-serif;
font-size: 50px;
}
</style>
</head>
<body>
<div id="conteneur">
<div id="entete">Garage Belle Auto - Prise de rendez-vous</div>
<div id="entete2"> Aide I Contact I Mot de
Passe </div>
<div id="entete3">
<table style="text-align: left; width: 100%;" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="text-align: left;">Texte align gauche (bloc n 3)</td>
<td style="text-align: right;">Texte align droite (bloc n 3)</td>
</tr>
</tbody>
</table>
</div>
<div id="menu">Emplacement du menu javasript</div>
<div class="texte10" id="texte">Contenu de la page. <BR><BR><BR>
</div>
<div id="pied">pied de page</div>
</div>
</body>
</html>
Remarque : Les styles qui apparaissent en gras ci-dessus peuvent tre placs dans
un fichier externe dextension CSS et imports dans la page HTML avec la balise
<link >.
65
Partie 2
Aprs avoir ajout un menu JavaScript deux niveaux dans le bloc menu , la
date du jour formate avec lexemple JavaScript donn plus haut dans le bloc
entete3 et amlior lergonomie, nous obtenons le rsultat suivant :
<Personne>
<Nom>MARTIN</Nom>
<Titre>DIRECTEUR</Titre>
</Personne>
Pour dvelopper une application web J2EE, il est bien sr ncessaire de connatre le
langage java. Il existe de nombreux ouvrages sur java. Jai utilis HUBBARD (2005)
pour me former car cest un ouvrage rcent, peu volumineux, qui sadresse des
dbutants et permet dapprendre le langage java partir dexemples simples.
Java est un langage qui a t dfini partir de 1990, dans le cadre dun projet de
recherche, par Sun Microsystems. Cest un langage objet de haut niveau qui vite au
programmeur les difficults dun langage comme C++. Contrairement aux langages
66
Partie 2
plus anciens qui sparaient les donnes et les traitements, un langage objet comme
java permet de dfinir pour une classe, la fois des donnes (variables dinstance)
et des traitements (mthodes).
A partir dune classe, on peut crer autant dobjets que ncessaire (instances de
classe). Les instances de classe sont cres laide dun constructeur (unit de
code contenu dans la classe dfinissant comment instancier un objet). Une classe
peut contenir plusieurs constructeurs (cest la liste des paramtres qui permet de les
diffrencier).
Pour crer un programme java, il faut crer un fichier ayant lextension .java , puis
compiler ce programme pour gnrer du code interprtable (bytecode). Cette
opration permet la cration dun ou plusieurs fichiers dextension .class . Il est
ensuite possible dexcuter le programme java laide dune machine virtuelle
capable dinterprter le bytecode.
On reproche souvent aux programmes java dtre plus lents que des programmes
compils directement en langage machine. Ceci est vrai lorsque le bytecode Java est
interprt, mais lest moins lorsque celui-ci est converti la vole en code natif par
un compilateur juste temps lors de lexcution. Les applications dveloppes
avec Java ont cependant lavantage dtre portables grce aux machines virtuelles.
Dans les langages objet et donc dans le langage Java, il est possible de dfinir une
classe par hritage dune autre classe et de spcialiser la nouvelle classe (il est
possible de redfinir une mthode de la classe dorigine).
package test;
public class Bonjour {
public static void main(String[] args) {
System.out.println("Bonjour");
}
}
Nous verrons un peu plus loin comment crer ce programme avec Eclipse.
67
Partie 2
CLAVEL (2003) indique que larchitecture J2EE (Java 2 Entreprise Edition) est
aujourdhui le modle le plus utilis pour les applications web Intranet et Internet. Les
applications Intranet reposent sur les mmes principes quInternet (HTML, client
lger, protocole http ) mais accessibles uniquement par les membres de
lentreprise. La tendance actuelle pour beaucoup dentreprises est dutiliser les
technologies Web pour faire voluer leur systme dinformation (y compris les
applications critiques) et non plus uniquement de crer des applications
priphriques (ex : prsentation de la socit, postes pourvoir, ).
Larchitecture J2EE est base sur la notion dapplication n-tiers (certaines couches
peuvent se situer physiquement sur le mme serveur). On identifie quatre couches
implmentables indpendamment les unes des autres :
Prsentation ct client (pas de traitement mtier, uniquement laffichage des
informations fournies par le serveur au format HTML sur le navigateur).
Prsentation ct serveur.
Logique mtier ct serveur.
Systme dinformation de lentreprise.
68
Partie 2
Les EJB et Web services ne seront pas tudis dans ce mmoire. Les servlets et les
JSP sont chargs ct serveur du traitement de la requte et de la mise en page du
document HTML.
Une servlet est une classe Java qui ralise des traitements et inscrit le rsultat dans
un flux en direction du client.
Une JSP est une page HTML qui invoque des traitements et insre les donnes
rcupres en son sein.
SARRION (2005b) explique quune Servlet est une classe Java implmentant
linterface javax.servlet.Servlet qui est stocke et contrle par un serveur
dapplication J2EE (Tomcat dans notre cas). Son invocation est la consquence de
la requte du client, dirige vers cette servlet. Le serveur Web reoit une demande
adresse une servlet sous la forme dune requte http. Il transmet la requte la
servlet concerne. La servlet reoit les paramtres de la requte envoye par le
client. Elle peut alors effectuer toutes les oprations ncessaires pour construire de
manire dynamique la rponse avant de renvoyer celle-ci sous forme de code HTML
au client.
69
Partie 2
La servlet suivante renvoie au client une page HTML qui affiche Bonjour .
Fichier servlet1.java
package testservlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class servlet1 extends HttpServlet
{
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
/* obtention de l'ecrivain */
PrintWriter out = response.getWriter();
/* indiquer que le type de sortie dans la rponse doit tre
interprt en HTML */
response.setContentType("text/html");
/* envoyer du HTML sur le flux de sortie */
out.println ("<h1>Bonjour</h1>");
}
}
Avant de pouvoir appeler cette servlet, il faut la compiler afin de crer le fichier
servlet1.class. Ce fichier servlet1.class peut alors tre copi dans larborescence du
serveur dapplication (certaines rgles propres aux serveurs dapplication sont
respecter). Aprs avoir mis jour le fichier web.xml dans la mme arborescence, il
est alors possible dappeler la servlet.
Fichier web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>testservlet.servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/servlet1.html</url-pattern>
</servlet-mapping>
</web-app>
70
Partie 2
Les JSP (Java Server Page) sont trs proches des servlets (elles servent galement
crer du contenu Web de manire dynamique), mais en diffrent par le fait quelles
sont constitues de code Java insr dans des documents HTML. Le serveur J2EE
compile ces documents pour en faire des servlets qui renvoient aux clients du
contenu HTML.
Fichier nombres.jsp
<h1>Nombres de 1 10</h1>
<% int i;
for (i = 1; i <= 10; i++)
{
out.println(i + "<br>");
}
%>
</body>
</html>
71
Partie 2
Pour crer le programme Java qui affiche bonjour sur la console dont nous avons
dj parl, voici les tapes suivre :
Crer un projet (fichier / nouveau / projet). Le nouveau projet apparat dans la
fentre explorateur de packages ;
Crer une classe java et un package (fichier / nouveau / classe) ;
Complter le code de la classe au centre de lcran et sauvegarder (fichier /
sauvegarder tout) ;
Compiler (projet / gnrer tout) ;
Redmarrer Tomcat avec licne du plugin sysdeo la plus droite
;
Lancer lexcution (Clic droit sur la classe / excuter en tant que / application
java).
72
Partie 2
Une fois le dbogage termin, lutilisateur peut revenir au mode daffichage classique
(fentre / ouvrir la perspective / java).
Eclipse permet dutiliser Junit (librairie open source pour les tests unitaires). Vous
pouvez crer des classes bases sur loutil Junit et des classes normales dans le
mme projet. Le code Junit sert tester les autres classes du projet. Junit permet de
construire un ensemble de jeux de tests. Aprs chaque modification de code,
quelques clics suffisent pour vrifier si lapplication passe avec succs les jeux de
tests.
Dans la classe base sur JUnit (cre par : Fichier / nouveau / scnario de test Junit)
on peut utiliser plusieurs types dassertion pour effectuer les tests (ex :
assertFalse(a) permet de tester si le boolen a est faux). Il est ensuite possible avec
un clic droit sur la classe de test de slectionner loption excuter en tant que / test
Junit pour lancer le test.
DJAAFAR (2005) explique que sous Eclipse la gestion du travail en quipe repose
sur loutil CVS (Concurrent Versions System logiciel open source de gestion de
version). Pour travailler avec CVS, il est ncessaire davoir accs un serveur CVS.
Sous Windows, cest couramment CVSNT (disponible gratuitement sur le site
http://www.cvsnt.org) qui est utilis. Aprs avoir cr un rfrentiel pour le code
source du projet au moyen du serveur CVS et lanc CVSNT Eclipse permet dajouter
un projet et des sources dans le rfrentiel CVS. Le rfrentiel CVS est
gnralement situ sur un serveur partag entre tous les dveloppeurs. CVS gre et
73
Partie 2
stocke toutes les modifications effectues sur un code source en suivant par dfaut
les rgles du verrouillage optimiste. Le verrouillage optimiste autorise diffrents
programmeurs modifier simultanment un mme code source (chacun travaillant
sur sa propre version). Les diffrentes versions sont si possible fusionnes
automatiquement lors de la validation des modifications. En cas de conflits, le
programmeur est inform et il doit les rsoudre manuellement.
Ant, dont nous avons dj parl, est directement install et oprationnel dans
Eclipse. Ant peut automatiser plusieurs dizaines de tches quil aurait fallu raliser
manuellement. Pour travailler avec Ant il faut crer dans le projet un fichier build.xml.
Eclipse reconnat ce fichier comme un fichier Ant.
Plusieurs blocs <target> </target> peuvent figurer dans build.xml. Chaque bloc
permet de raliser une action (ex : crer ou dtruire un rpertoire, compiler
lapplication, crer un fichier JAR ou WAR, crer la documentation javadoc, dplacer
des fichiers, lancer les tests unitaires, ). Les fichiers JAR et WAR sont des
conteneurs de fichiers (comme tar ou zip).
Le design pattern MVC (Modle Vue Contrleur) est prsent dans DUBOIS (2006).
Ce pattern est communment utilis dans les applications Java/J2EE pour raliser la
couche de prsentation des donnes. MVC favorise la sparation entre la
prsentation de lapplication, les interactions avec lutilisateur et des modles de
donnes. Il existe deux types de patterns MVC, le pattern MVC dit de type 1, qui
possde un contrleur par action, et le pattern MVC dit de type 2, plus rcent, qui
possde un contrleur unique. Nous nous concentrerons sur ce dernier, puisque
cest celui sur lequel sappuie Struts.
74
Partie 2
La figure ci-dessous illustre les diffrentes entits du type 2 du pattern MVC ainsi
que leurs interactions lors du traitement dune requte.
Contrleur Modle
Front Controller Worker Contient les
donnes
Aiguille les Ralise le prsenter
requtes vers traitement de la
le bon worker requte
Vue
Construit la vue en
affichant les donnes
prsenter
Une application mettant en uvre le design pattern MVC est gnralement mieux
structure et donc plus facile maintenir. Les donnes dun seul modle peuvent
tre affiches dans plusieurs vues qui disposent de logiques de prsentation
diffrentes.
Struts est un framework de dveloppement apparu en 2000 qui permet de crer des
applications web. C'est une solution open source qui implmente le design pattern
MVC de type 2.
75
Partie 2
Lutilisation de Struts pour des sites ne comportant que quelques pages alourdit
inutilement lapplication et nest donc pas justifie. Struts facilite la maintenance de
lapplication et la rend plus volutive.
Il est vrai que lutilisation de struts nest pas triviale au premier abord. Aprs lavoir
pratiqu quelque peu, on finit gnralement par acqurir certains rflexes et les
choses qui paraissaient embrouilles au dpart finissent par devenir claires. Struts
nest justifi que pour des projets dune certaine taille.
Il existe plusieurs livres en franais sur struts. Jai entrepris la lecture de plusieurs
dentre eux en testant une partie des exemples proposs. Vous trouverez en
bibliographie les livres consacrs struts que jai consults. Certains sont assez
anciens, dautres destins tre utiliss comme aide-mmoire pour des personnes
connaissant dj struts. Parmi ces livres, jai tudi en dtail ceux de CEKVENICH &
GEHNER (2005) et FELICITE (2006) :
76
Partie 2
Dans son implmentation, Struts utilise deux notions principales, qui sont
reprsentes par les classes :
Action : Reprsente une action de lutilisateur, telle que valider une slection.
Cette classe proche du contrleur sert de liant entre le formulaire envoy par
lutilisateur, lexcution de traitements et laffichage dune page Web rsultant
de lopration. Elle reprsente le worker introduit la section prcdente.
Formulaire : Reprsente un formulaire HTML, tel quil a t rempli par
lutilisateur.
Lensemble form par les actions, formulaires et JSP est reli via le fichier de
configuration de Struts, Struts-config.xml. Toute application Web J2EE doit respecter
certaines rgles au niveau de son arborescence afin de pouvoir fonctionner sur un
serveur dapplication. Le rpertoire WEB-INF doit figurer dans cette arborescence.
Le fichier Struts-config.xml doit tre stock dans ce rpertoire.
77
Partie 2
Configuration de Struts
Struts se fonde sur une servlet trs volue pour assurer sa fonction de contrleur
gnrique. Comme pour toute servlet, il faut la configurer dans le fichier web.xml :
()
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
()
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
()
78
Partie 2
validate="true">
<forward name="menuClient" path="/jsp/menuClient.jsp" />
<forward name="editPersonne" path="/jsp/MajMonProfil.jsp" />
</action>
()
</action-mappings>
<message-resources
parameter="de.laliluna.library.struts.ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
79
Partie 2
Actions et formulaires
Les actions et les formulaires sont les classes de base utilises dans Struts.
package de.laliluna.library.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import de.laliluna.library.bl.LibraryManager;
import de.laliluna.library.struts.form.PersonneEditForm;
/** Sauvegarde */
public ActionForward savePersonne(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
System.out.println("savePersonne Dans MajMonProfilAction");
PersonneEditForm personneEditForm = (PersonneEditForm) form;
LibraryManager libraryManager = new LibraryManager();
libraryManager.savePersonne(personneEditForm.getPersonne());
return mapping.findForward("menuClient");
}
}
Cette classe est utilise par le client lorsquil appelle la fonction de mise jour de son
profil partir du menu client et lorsquil valide sa saisie sur lcran de mise jour de
son profil. Dans les deux cas une mthode de la classe libraryManager est appele
(La classe LibraryManager contient toutes les mthodes ncessitant daccder la
base de donnes). Dans le premier cas la mthode de libraryManager permet de
charger dans le formulaire les informations du client modifier. Dans le deuxime
cas la mthode de libraryManager permet de savegarder les lments saisis dans la
base de donnes. Ces mthodes seront dcrites plus en dtail dans la partie
consacre Hibernate.
80
Partie 2
Dans notre exemple, la mthode prepareEdit renvoie sur la page de mise jour du
profil alors que la mthode savePersonne renvoie sur le menu client.
Les formulaires Struts sont des JavaBeans standards qui hritent tous de la classe
ActionForm ou de la classe ValidatorForm (il faut utiliser ValidatorForm lorsque lon
fait appel la validation de la saisie laide de validators).
ValidatorForm
package de.laliluna.library.struts.form;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import de.laliluna.library.Personne;
import org.apache.struts.validator.ValidatorForm;
81
Partie 2
return personne.getCourriel();
}
Lorsque le client est sur la page de mise jour de son profil et quil clique sur le
bouton qui permet denregistrer sa saisie, les donnes prsentes sur la page sont
82
Partie 2
Les balises Struts vitent linsertion de code Java dans les pages JSP. Elles
ressemblent des balises HTML. Struts propose en standard de nombreuses
balises. Il existe dautres bibliothques de balises que celle propose par Struts (ex :
JSLT). La page JSP suivante est extraite du projet rendez-vous :
Page MajMonProfil.JSP
<%@ page language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<html>
<head>
<title>Modifier mon profil - MajMonProfil.jsp </title>
</head>
<body>
<h1>Modifier mon profil</h1>
<html:form action="/SaveMonProfil">
<html:hidden property="id"/>
<html:hidden property="do" value="savePersonne"/>
<html:errors/>
<table border="1">
<tbody>
<tr>
<td>
<bean:message key="personne.prenom" />
</td>
<td>
<html:text property="firstname"/> *
<html:errors property="firstname" header="errors.entete"
footer="errors.pied" prefix="" suffix=""/>
</td>
</tr>
<tr>
<td>
Nom
</td>
<td>
<html:text property="lastname"/>
</td>
</tr>
<tr>
<td>
Téléphone
</td>
<td>
<html:text property="telephone"/>
</td>
</tr>
<tr>
<td>
Courriel
</td>
<td>
83
Partie 2
<html:text property="courriel"/>
</td>
</tr>
<tr>
<td>
Login
</td>
<td>
<html:text property="login"/>
</td>
</tr>
<tr>
<td>
Mot de passe
</td>
<td>
<html:text property="motdepasse"/>
</td>
</tr>
</tbody>
</table>
<br>
<html:submit>Valider</html:submit>
<html:cancel>Menu</html:cancel>
</html:form>
</body>
</html>
Sur cette page, lorsque lutilisateur clique sur le bouton Valider, Laction appeler est
identifie dans le fichier struts-config.xml laide du contenu de la balise suivante :
<html:form action="/SaveMonProfil">
Les balises Struts sont trs nombreuses et bien documentes par les ouvrages
consacrs Struts.
84
Partie 2
Si les rgles de nommage des fichiers de proprits ont t respectes (ex : ajouter
en devant .properties pour le fichier en Anglais), il suffit alors lutilisateur
dajouter et dordonner les langues prfres dans les paramtres de son navigateur
(ex : menu outil puis langue avec Internet Explorer) pour que lapplication saffiche
dans la langue souhaite.
Struts offre une solution appele Validators qui permet de valider les donnes
saisies par lutilisateur sur une page Web. Pour mettre en uvre cette solution, les
fichiers validators-rules.xml et validation.xml doivent tre prsent dans le rpertoire
WEB-INF de lapplication et contenir les informations de validation existantes dans le
projet modle struts-blank.war fourni avec struts. Le fichier validation.xml doit tre
complt avec les rgles de validation que lon souhaite mettre en place.
Dans le projet rendez-vous, pour rendre obligatoire la saisie du champ prnom sur la
page qui permet au client de mettre jour son profil, les lignes suivantes ont t
ajoutes dans validation.xml :
<form name="personneEditForm">
<field
property="firstname"
depends="required"
page="0">
<arg key="personne.errors.prenom"/>
</field>
</form>
85
Partie 2
Pour afficher le message derreur dans la page JSP nous avons ajout le code
suivant dans la page MajMonProfil.JSP :
(..)
<html:errors/>
(..)
<html:errors property="firstname" header="errors.entete"
footer="errors.pied" prefix="" suffix=""/>
(..)
Le code suivant doit tre ajout dans le fichier Struts-config.xml juste avant la
dernire balise :
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
86
Partie 2
Struts-config.xml
(..)
<action
attribute="personneEditForm"
input="/jsp/MajMonProfil.jsp"
name="personneEditForm"
parameter="do"
path="/MajMonProfil"
scope="request"
type="de.laliluna.library.struts.action.MajMonProfilAction"
validate="false">
<forward name="menuClient" path="/jsp/menuClient.jsp" />
<forward name="editPersonne" path="/jsp/MajMonProfil.jsp" />
</action>
<action
attribute="personneEditForm"
input="/jsp/MajMonProfil.jsp"
name="personneEditForm"
parameter="do"
path="/SaveMonProfil"
scope="request"
type="de.laliluna.library.struts.action.MajMonProfilAction"
validate="true">
<forward name="menuClient" path="/jsp/menuClient.jsp" />
<forward name="editPersonne" path="/jsp/MajMonProfil.jsp" />
</action>
(..)
La technologie Tiles
Tiles est une technologie de dcoupage de pages JSP qui sappuie sur les includes
des JSP en les amliorant significativement. En particulier, Tiles permet deffectuer
les tches suivantes :
Afin de montrer le fonctionnement de tiles, nous allons crer un exemple avec une
page contenant 4 parties (entte, menu, cur de page et pied de page) et une autre
87
Partie 2
page identique la premire, mais avec un cur de page spcifique (le titre de la
barre de titre sera galement spcifique).
Pour rendre possible lutilisation des taglib de tiles, nous devons commencer par
ajouter ce qui suit dans le fichier WEB-INF/web.xml :
<taglib>
<taglib-uri>/tags/struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config"
value="/WEB-INF/tiles-defs.xml"/>
<set-property property="moduleAware" value="true" />
</plug-in>
La premire ligne est identique pour les deux pages et est indispensable pour
permettre une interprtation correcte de la balise de la deuxime ligne. La deuxime
ligne indique le nom de la page correspondante dans le fichier tiles-defs.xml.
88
Partie 2
La page nomme page00 contient 4 parties et le titre afficher dans la barre de titre.
La page nomme page01 est identique page00 lexception du cur de la page
(body) et du titre (title).Page00 et par extension page01 dpendent du modle
(template en anglais) /jsp/myLayout.jsp dont le code suit :
Ce modle indique comment crer la page HTML qui doit tre montre lutilisateur.
Cette page rassemble et met en forme les diffrentes parties de la page (titre, entte,
menu, etc.).
89
Partie 2
90
Partie 2
Comme prcis dans CEKVENICH (2005), pour une application Struts, il est inutile
de crer les pages unepage00.jsp et unepage01.jsp car il est possible dappeler
directement le pages page00 et page01 (noms utiliss dans tiles-defs.xml) partir du
fichier struts-config.xml.
Une alternative tiles est SiteMesh. SiteMesh permet d'enrichir la rponse d'une
requte HTTP l'aide de dcorateurs. Cet outil permet par exemple de rajouter
facilement des en-ttes et des pieds de page sur des pages web.
Lavenir de struts
Pour rester comptitif face aux nouveaux frameworks MVC (Spring MVC, Tapestry
Webwork, etc.), les concepteurs de Struts ont lanc le projet Shale. Shale est un
nouveau framework qui intgre des fonctionnalits prouves de Struts tout en
corrigeant la majorit des problmes soulevs lencontre de Struts (difficults pour
effectuer les tests, gestion insuffisante de la scurit et des loggings, mauvaise
gestion des types autre que string, etc.). Transformer une application Struts en
application Shale ncessite des adaptations. La version standard de Struts qui
continue voluer en assurant une compatibilit ascendante reste cependant de loin
la solution MVC la plus utilise pour java.
91
Partie 2
Non seulement, Hibernate s'occupe du transfert des objets Java dans les tables de la
base de donnes (et des types de donnes Java dans les types de donnes SQL),
mais il permet de requter les donnes et propose des moyens de les rcuprer. Il
peut donc rduire de manire significative le temps de dveloppement qui aurait t
autrement perdu dans une manipulation manuelle des donnes via SQL et JDBC.
On peut voir Hibernate comme une fine surcouche de JDBC qui lui ajouterait une
dimension objet. Hibernate est surtout utile pour les applications dont la logique
mtier est implmente dans la couche Java et non dans des procdures stockes.
Les applications qui utilisent Hibernate peuvent facilement migrer vers une autre
base de donnes. Thoriquement il suffit de modifier le fichier de configuration
dhibernate pour remplacer une base de donnes Oracle par MySQL par exemple.
Application
Objet persistant
HIBERNATE
Fichier de configuration Fichier de mapping
92
Partie 2
Base de donnes :
La base de donne de lapplication rendez-vous sera cre dans MySQL laide des
fichiers de mapping dhibernate. Elle devra contenir une table personnes et une
table creneaux. Les rendez-vous pris par une personne seront enregistrs dans une
table intermdiaire.
Rendez-vous Creneaux
Personnes --------------- -------------
------------- creneaux_id * creneaux_id *
person_id * person_id * DateHeureDebut
nom ServicePropos
prnom RdvAutoris
tlphone
courriel
login
motdepasse
administrateur
Classes persistantes
Pour crer une classe persistante (exemple : la classe personne) dans le projet
rendez-vous, il faut crer un JavaBean personne. Celui-ci contient le type java de
tout les attributs de la classe et les mthodes get et set classiques.
personne.java :
package de.laliluna.library;
import ...
public class Personne
{
private java.lang.Integer id;
private java.lang.String firstname;
private java.lang.String lastname;
private java.lang.String courriel;
private java.lang.String login;
private java.lang.String motdepasse;
private java.lang.String telephone;
private java.lang.Boolean administrateur;
...
public java.lang.Integer getId()
{
return id;
}
public void setId(java.lang.Integer id)
93
Partie 2
{
this.hashValue = 0;
this.id = id;
}
...
public java.lang.Boolean getAdministrateur() {
return this.administrateur;
}
public void setAdministrateur(java.lang.Boolean administrateur) {
this.administrateur = administrateur;
}
...
}
creneaux.java :
package de.laliluna.library;
import
public class creneaux
{
Fichiers de mapping :
Il faut ensuite crer pour chaque classe java persistante un fichier de mapping
(fichier XML). Celui-ci ralise une correspondance entre une table de la base de
donnes et une classe java (entre les champs de la table personnes et le JavaBean
personne par exemple). Le fichier de mapping permet galement de dcrire les
associations (exemple : association many to many entre personnes et creneaux).
Plusieurs types dassociations existent dans Hibernate. Les fichiers de mapping sont
lus lorsque lapplication dmarre.
94
Partie 2
personne.hbm.xml :
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="de.laliluna.library">
<class name="Personne" table="personne">
<id name="id" column="person_id" type="java.lang.Integer">
<generator class="increment"/>
</id>
<property name="firstname" column="firstname" type="java.lang.String" />
<property name="lastname" column="lastname" type="java.lang.String" />
<property name="telephone" column="telephone" type="java.lang.String" />
<property name="courriel" column="courriel" type="java.lang.String" />
<property name="login" column="login" type="java.lang.String" />
<property name="motdepasse" column="motdepasse" type="java.lang.String" />
<property name="administrateur" column="administrateur" type="java.lang.Boolean" />
<set name="creneaux" table="rendez_vous" >
<key column="person_id"/>
<many-to-many column="creneau_id" class="Creneau"/>
</set>
</class>
</hibernate-mapping>
creneaux.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="de.laliluna.library">
<class name="Creneau" table="creneau">
<id name="id" column="creneau_id" type="java.lang.Integer">
<generator class="increment"/>
</id>
<property name="dateheuredebut" column="dateheuredebut" type="timestamp" />
<property name="servicepropose" column="servicepropose" type="java.lang.String" />
<property name="rdvautorise" column="rdvautorise" type="java.lang.Boolean" />
<set name="participants" table="rendez_vous" inverse="true" >
<key column="creneau_id"/>
<many-to-many column="person_id" class="Personne"/>
</set>
</class>
</hibernate-mapping>
95
Partie 2
Configuration dHibernate :
Pour se connecter la base de donne bd_rdv4 de MySQL qui contient les tables de
lapplication rendez-vous, Hibernate a besoin dinformations de connexion. Ces
connexions sont tablies travers un pool de connexions JDBC, que nous devons
aussi configurer. Cette configuration est ralise laide du fichier hibernate.cfg.xml
qui pour lapplication rendez-vous contient les informations suivantes :
Session Hibernate :
package de.laliluna.library;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
96
Partie 2
Le HQL est le moyen le plus utilis. Il consiste en une encapsulation du SQL selon
une logique oriente objet et permet de crer des requtes complexes. Les requtes
HQL sutilisent directement dans le code Java, elles sappuient sur les noms des
objets Java, mais leur syntaxe reste malgr tout trs proche du SQL.
97
Partie 2
package de.laliluna.library.bl;
import ...
import de.laliluna.library.Creneau;
import de.laliluna.library.Personne;
import de.laliluna.library.HibernateSessionFactory;
public class LibraryManager {
...
public void savePersonne(Personne personne) {
Session session = null;
Transaction tx = null;
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
if (personne.getId() == null || personne.getId().intValue() == 0)
session.save(personne);
else {
Personne toBeUpdated = (Personne) session.get(Personne.class,
personne.getId());
toBeUpdated.setTelephone(personne.getTelephone());
toBeUpdated.setLastname(personne.getLastname());
toBeUpdated.setFirstname(personne.getFirstname());
toBeUpdated.setCourriel(personne.getCourriel());
toBeUpdated.setLogin(personne.getLogin());
toBeUpdated.setMotdepasse(personne.getMotdepasse());
toBeUpdated.setAdministrateur(personne.getAdministrateur());
session.update(toBeUpdated);
}
tx.commit();
}
...
public Personne[] getAllPersonnes() {
List personnes = new ArrayList();
Session session = null;
Transaction tx = null;
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
List tmpPersonne = session.createQuery(
"select c from Personne as c order by c.lastname").list();
for (Iterator iter = tmpPersonne.iterator(); iter.hasNext();) {
personnes.add((Personne) iter.next());
}
tx.commit();
return (Personne[]) personnes.toArray(new Personne[0]);
}
98
Partie 2
Pour MOLIERE (2005), Log4J (Log for Java) est une API de journalisation open
source couramment utilise dans le monde Java (tlchargeable sur
http://logging.apache.org/ log4j/docs/download.html).
log4j.rootLogger=DEBUG, A
log4j.appender.A=org.apache.log4j.ConsoleAppender
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d %-5p - %m%n
Les messages sont classs par niveau de gravit (DEBUG, INFO, WARN, ERROR,
et FATAL). La premire ligne du fichier de configuration prsent ci-dessus indique
que les messages de niveau DEBUG et suprieurs seront ajouts la log. Cette
option est souvent utilise pendant la phase de dveloppement. Lors de la mise en
production de lapplication, la premire ligne pourra tre modifie pour indiquer que
lon ne souhaite afficher dans la log que les messages de niveau WARN et
suprieurs.
Les lignes suivantes peuvent tre ajoutes dans lapplication pour vrifier le
fonctionnement de log4j :
import org.apache.log4j.*;
log.debug("Premier message");
log.info("Deuxieme message");
Lors de lexcution de cette portion de code, le rsultat sur la console est le suivant :
99
Partie 2
Vous trouvez ci-dessous une reprsentation graphique des rgles de navigation puis
les images cran des principales fonctions de l'application de prise de rendez-vous
dveloppe avec struts et hibernate.
100
Partie 2
101
Partie 2
102
Partie 2
103
Partie 2
104
Partie 2
3.6. Conclusion
Etudier et mettre en uvre les technologies J2EE en tant livr moi mme aura
t un vritable chalenge. Il est en effet ncessaire de matriser de nombreux outils
et dviter de se disperser tant il en existe. Je pense avoir atteint les objectifs que je
mtais fixs car jai russi crer une application J2EE et beaucoup de notions qui
me paraissaient obscures, avant de dbuter ce travail, me sont aujourdhui
familires. Cela ne se sera cependant pas fait sans difficults, car mme sil existe
de trs bons ouvrages sur le domaine, il mest arriv frquemment de rester bloqu
sur des problmes quun dveloppeur confirm contourne rapidement pour y avoir
dj t confront. Avec laide des auteurs, dinternautes ou de recherches
approfondies je suis toujours parvenu rsoudre les problmes rencontrs. Je dois
avouer tre cependant impatient de travailler nouveau en quipe pour le plaisir et
lefficacit que cela apporte.
105
4. CONCLUSION
La panoplie du parfait dveloppeur dapplication J2EE est aujourdhui mature. Les
outils Open Source tudis donnent de bons rsultats. Il est cependant important de
garder lesprit que la gratuit des licences nentrane pas ncessairement une
rduction du cot des applications dveloppes et quil reste indispensable de bien
former et encadrer lquipe de dveloppement en appliquant des mthodes
adaptes. J2EE connat aujourdhui un franc succs pour le dveloppement
dapplications web notamment dans les grandes entreprises. Il reste cependant
encore une place pour des solutions qui permettrons de simplifier et dindustrialiser le
processus de dveloppement, pour permettre de dvelopper ou faire voluer
toujours plus vite des applications dont le cycle de vie se raccourcit, alors que leur
complexit augmente. La solution se trouve peut-tre en partie dans lutilisation de
nouveaux frameworks (JSF, Spring, ) ou langages (RoR) Open Source. Ou
pourquoi pas, dans lutilisation de solutions intgres comme Visual Studio Team
System de Microsoft qui couvre tout le cycle de vie des logiciels et s'adresse
l'quipe de dveloppement toute entire (chefs de projets, architecte, dveloppeurs
et testeurs). Loffshore va t-il se dvelopper ? On le voit, lhistoire de linformatique
nest pas prte de sarrter et il est important de rester inform sur ce que propose le
march pour rester concurrentiel.
Ce mmoire maura permis dacqurir une vision plus claire sur le dveloppement
dapplications web avec J2EE et de mieux apprhender les problmes que peut
rencontrer un dveloppeur. Bien des domaines restent tudier. Ce nest donc pas
la fin.
106
5. GLOSSAIRE
107
trangres
Racine Ensemble des applications du MAE permettant de grer les services
offerts aux franais ltranger.
RMV2 Application du MAE permettant de grer les demandes de visa
manant des trangers souhaitant venir en France.
RUP RUP (Rational Unified Process) est lune des plus clbres
implmentations de la mthode UP.
Struts Struts est un Framework Open Source utilis pour dvelopper des
applications WEB J2EE. Il sagit dun squelette dapplication
sappuyant sur le MVC et fournissant des outils supplmentaires pour
aider le dveloppeur raliser ses applications.
UP Le Processus Unifi (UP) est un processus de dveloppement
logiciel itratif et incrmental, centr sur larchitecture, conduit par
les cas dutilisation et pilot par les risques .
URL Une URL (Uniform Resource Locator) est ladresse dune ressource
sur Internet. Pour une page par exemple, son url est compose du
protocole http:// suivi du nom de domaine du serveur, puis du chemin
daccs la page.
Visanet Projet Acube permettant d'externaliser la saisie de certaines
demandes de visa.
XP L'Extreme Programming (XP) est une mthode agile de gestion de
projet informatique adapte aux quipes rduites avec des besoins
changeants. Elle pousse l'extrme des principes simples.
108
6. BIBLIOGRAPHIE
BENARD J.L., BOSSAVIT L., 2002. Gestion de projet eXtreme Programming,
Eyrolles, Paris, 316 p.
BENARD J.L., MERAND F., 2005. Approches pragmatiques pour industrialiser le
dveloppement dapplications, BrainSonic, Paris, 88 p.
BORDAGE F., DAVY P., PARPINELLI S., 2005, MySQL aux trousses des gants du
SGBD, 01 informatique du 21/10/2005, 6-8.
CEKVENICH V., GEHNER W., 2005. Struts, Dunod, Paris, 219 p.
CLAVEL G., 2003. Java la synthse, Dunod, Lige, 403 p.
CLOUX P.Y., DOUSSOT D., 2002. Technologies et architectures Internet, Dunod,
Paris, 254 p.
CLOUX P.Y., 2003. RUP XP, Dunod, Paris, 277 p.
DJAAFAR K., 2005. Eclipse et Jboss : Dveloppement dapplications J2EE
professionnelles, de la conception au dploiement, Eyrolles, Paris, 627 p.
DUBOIS J., 2006. Spring par la pratique, Eyrolles, Paris, 517 p.
FELICITE J.C., 2006. Dveloppement java sous struts, Eni ditions, Nantes, 415 p.
FONTAINE A., 2003. Dveloppement open source avec Windows, Dunod, Paris, 320
p.
GOODWILL J., 2003. Jakarta Struts par la pratique, Eyrolles, Paris, 330 p.
HOLZNER S., 2004. Eclipse, OReilly, Paris, 324 p.
HUBBARD J., 2005. Programmation java, EdiScience, Baume les dames, 388 p.
LANCKER L.V., 2003. HTML Entranez-vous matriser le code source, Eni ditions,
Nantes, 295 p.
MANGOLD P., 2005. Gestion de projet informatique, Eyrolles, Marsat, 120 p
MOLIERE J., 2005. J2EE, Eyrolles, Paris, 220 p
PATRICIO A., 2005. Hibernate 3.0, Eyrolles, Paris, 317 p.
RAIBLE M., 2005. Spring live, SourceBeat, 13-57,
http://www.sourcebeat.com/TitleAction.do?id=7
RETAILLE J.P., 2005. Refactoring des applications Java/J2EE, Eyrolles, Paris, 390
p.
ROQUES P., 2002. UML - Modliser un site e-commerce, Eyrolles. Paris, 152 P.
ROQUES P., VALLEE F., 2004. UML 2 en action de lanalyse des besoins la
conception J2EE, Eyrolles, Paris, 385 p.
SARRION E., 2005a. CSS et JavaScript, OReilly, Paris, 305 p.
SARRION E., 2005b. J2EE, OReilly, Paris, 235 p.
TURNER J., BEDELL K., 2003. Struts, CampusPress, Paris, 407 p.
ZELLER A., KRINKE J., 2005. Essential open source toolset, Wiley, Heidelberg, 392
p.
109
7. ANNEXES
Les outils prsents ci-dessous ont t tests sous Windows XP durant mon
mmoire et peuvent tre utiles pour dvelopper une application J2EE.
7.1. Filezilla
FileZilla est un logiciel open source permettant de se connecter distance (en FTP)
sur un serveur pour y tlcharger des fichiers.
http://filezilla.sourceforge.net/
7.2. GIMP
Le logiciel GIMP est un puissant outil de manipulation d'images. C'est un logiciel libre
et gratuit, dvelopp par la communaut du logiciel libre. Ses spcialits vont de la
retouche de photographies numriques la cration d'images.
http://gimp-win.sourceforge.net/stable.html
7.3. Irfanview
Ce logiciel de retouche dimages gratuit ne permet pas de tout faire (dessiner, faire
des dgrads, ...) mais il est trs pratique pour changer la dimension d'une image,
recadrer une image, changer le type de fichier " image ", corriger les couleurs d'une
image.
http://info.sio2.be/divers/irfanview/index.php
Cet outil gratuit permet de trouver dans un ensemble de fichiers jar ou war celui qui
contient une classe donne.
http://cmarton.free.fr/jarsbrowser/
7.5. FreeDiff
FreeDiff est un logiciel gratuit qui permet de visualiser les diffrences entre deux
fichiers.
110
http://www.freediff.com/
7.6. JDecompiler
Cet utilitaire permet de dcompiler une classe java (cration du fichier d'extension
java partir de celui d'extension class). Il est utilisable pendant 15 jours
gratuitement. Il existe des quivalents comme JCavaj (gratuit) ou DJ Java
Decompiler (10 essais gratuits).
http://www.shareup.com/JDecompiler-download-43149.html
111
OLLIVIER Philippe
RSUM
Aujourdhui, les concepteurs dapplications estampilles nouvelles
technologies base de serveur dapplication, sont confronts ce que le
Gartner Group nomme lexplosion de la complexit . Les dveloppeurs
doivent avoir recours un panel doutils et de technologies toujours plus larges.
Mots-clefs : J2EE, MVC, UP, UML, XML, Normes, Mthodes, Outils, Java,
HTML, Struts, Hibernate, application Web, Open Source