Vous êtes sur la page 1sur 232

ApacheTomcat6

Guide d'administration du serveur Java EE sous Windows et Linux

tienneLANGLET

Rsum
Ce livre sur Apache Tomcat 6 sadresse toute personne appele mettre en oeuvre ce serveur sous Windows ou Linux, que ce soit
pour des besoins de test, de dveloppement, ou des besoins de production dans un environnement dentreprise.
Aprs quelques rappels essentiels sur les technologies Internet et Java/Java EE, massivement utilises par Tomcat, le livre dtaille les
concepts fondamentaux de la mise en oeuvre de Tomcat 6 et approfondit la mise en place dune vritable infrastructure dentreprise
scurise et performante.
Si le lecteur est familier dune version prcdente de Tomcat, il pourra approfondir ses connaissances en trouvant dans ces pages une
information prcise pour une mise en application immdiate.

L'auteur
Etienne Langlet est formateur, consultant et dveloppeur sur les technologies Java/Java EE mais galement spcialiste des produits
OpenSource. Dans ce contexte, il a eu loccasion de mettre en oeuvre des serveurs Tomcat en environnement d'entreprise et propose
ainsi au lecteur un ouvrage rellement oprationnel sur le sujet.
Ce livre numrique a t conu et est diffus dans le respect des droits dauteur. Toutes les marques cites ont t dposes par leur diteur respectif. La loi du 11
Mars 1957 nautorisant aux termes des alinas 2 et 3 de larticle 41, dune part, que les copies ou reproductions strictement rserves lusage priv du copiste et non
destines une utilisation collective, et, dautre part, que les analyses et les courtes citations dans un but dexemple et dillustration, toute reprsentation ou
reproduction intgrale, ou partielle, faite sans le consentement de lauteur ou de ses ayants droit ou ayant cause, est illicite (alina 1er de larticle 40). Cette
reprsentation ou reproduction, par quelque procd que ce soit, constituerait donc une contrefaon sanctionne par les articles 425 et suivants du Code Pnal.
Copyright Editions ENI

ENI Editions - All rigths reserved

- 1-

RappelsurlesarchitecturesInternet/Intranet/Extranet
Plus quunsimplemoyenpourdiffuserlinformation, lInternet permet aujourdhuiderendreaccessibledesapplications
compltesauxutilisateurs.LutilisationdestechnologiesInternetdansunrseaudentreprise,lIntranet,permettantaux
employs davoir accs aux applications, ou bien dans un rseau dentreprise partiellement ouvert destination de
partenaires,lExtranet.
Les architectures Internet, Intranet, et Extranet ont en commun dutiliser des technologies et protocoles de
communications communs, mais avec une ouverture diffrente. Ainsi, lInternet dsignant le rseau des rseaux, les
applications sont diffuses un trs vaste public, au contraire, lIntranet qualifiant un rseau priv dentreprise, ces
technologies et protocoles sont utiliss pour servir les employs. Entre les deux, lExtranet, est une ouverture dun
Intranetdentreprisedestinationdepartenairesbiendfinis.
Parmilestechnologiescommunesutilises,ontrouvelelangageHTML(HyperTextMarkupLanguage)utilispourconcevoir
les pages diffusant le contenu, et le protocoleHTTP (HyperText Transfer Protocol), ou encoreHTTPS dans sa version
scurise,pourfairetransiterlinformationentreleclient,quiestengnralunnavigateurWeb,etunserveurWebou
autreserveurcapabledecommuniquersurHTTP.

1.LeprotocoleHTTP
LchangedinformationssurInternetsefaitprincipalementenutilisantleprotocoleHTTP,ilpermetlacommunication
entrelenavigateurWebdelinternauteetunserveurdansunformatspcifiqueorientrequte/rponse.
UnerequteHTTPestunedemandederessource(unepageHTMLparexemple),miseparleclientviasonnavigateur,
en cliquant sur un lien, ou bien en saisissant ladresse dun site Web. La rponse HTTP cette demande contient la
ressource demande, ou bien une page derreur dans le cas o cette ressource nexiste pas, ou si son accs est
protgparexemple.CesressourcessontaccompagnesduncodedtatHTTP,permettantdesavoirsilademandea
abouticorrectement,oubien,danslecascontraire,lesraisonsdelerreur.

Exemple : informations transmises dans la requte HTTP lors de la connexion dun navigateur ladresse
http://www.editions eni.fr
GET / HTTP/1.1
Host: www.editions-eni.fr
Donnesreuesparlenavigateur :
HTTP/1.1 200 OK
Date: Fri, 5 Oct 2007 22:03:31 GMT
Server: Microsoft-IIS/6.0
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: text/html; charset=utf-8
Content-Length: 81254
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Editions ENI - Accueil</title>
../..
</html>
IlyatroispartiesdanscetterponsefournieparleserveurWeb.DabordlecodedtatHTTPretournparceserveur
suite la requte, 200 OK dans lexemple cidessus, une section contenant ensuite les enttes HTTP, et enfin les
donnesdelaressourcedemande(engras).

ENI Editions - All rigths reserved

- 1-

LapremireversionpleinementexploitableduprotocoleHTTPfutlaversion0.9,ellepermettaituntransfertdedonnes
simples. Puis par lajout de la notion dentte, la version 1.0 peut ensuite permettre le transfert de donnes
extrmementvaries.
Laversionactuelle,la1.1,aapportdenombreusesamliorations,notamment :

lesconnexionspermanentes,

lesupportdunmcanismedecryptagedesconnexions(viaSSLouTLS),

desmcanismespourlidentificationdesutilisateursdunsite,

desmthodesdetransfertdinformationssupplmentaires,

lhbergementdemultiplessitesWeblammeadresseIP.

HTTP utilise la notion dURL (Uniform Resource Locator) pour permettre la localisation dune ressource sur un serveur
Web.LesURLenHTTPontlasyntaxesuivante :
http://<adresse du serveur>:<port du serveur>/<chemin>/<ressource>
DanscetteURL,leportduserveurestfacultatifsilvaut80,depluslecheminetlenomdelaressourcedoiventtre
saisisenrespectantladistinctionmajuscule/minuscule.

a.LesmthodesHTTP
Le protocole HTTP offre plusieurs possibilits pour grer le transfert des informations entre le client et le serveur,
appeles mthodes HTTP. Les mthodes HTTP les plus communment utilises sont par exemple la mthode GET
pour mettre une demande de ressource telle une page HTML, ou encore la mthode PUT pour transmettre des
donnesdestinationduserveurenutilisantunformulaireHTML.
VoiciunrsumdesdiffrentesmthodesHTTP :
Mthode

Description

GET

Demandeduneressourceauserveur.Cestla
mthodeutiliselorsquunutilisateurcliquesurlelien
dunepageWeb,oubienentreladressedunsite
Webdanssonnavigateur.

POST

Envoidedonnesversleserveur,plusprcisment,
versunprogrammehbergparceserveur,etqui
seracapabledecomprendrecesdonnespourles
traiter.

HEAD

CommepourGET,ellepermetdedemanderune
ressource,maislaressourcenestpasenvoyedans
larponse,cettemthodeestutilisepourfairedes
vrificationsdexistenceduneressource,pourdes
tests

PUT

Permetdenvoyeruneressourceversleserveur.

OPTIONS

Permetdeconnatretouteslesoptionsde
communicationpourobteniruneressource
particulire.

DELETE

Suppressionduneressourcesurleserveur.

TRACE

Mthodedecontrle,elledemandeauserveurde
renvoyerlarequtetellequelleatreue.

ToutescesmthodesHTTPnesontpasautorisesdanslaconfigurationpardfautdunserveurWeb,etcepourdes
raisonsvidentesdescurit,deplus,lanavigationsurInternetnerequiertrarementplusquelesmthodesGETet

- 2-

ENI Editions - All rigths reserved

POST. Les mthodesPUT etDELETE sont quant elle trs pratiques pour un webmaster qui veut mettre son site
Webjour.

b.LescodesdtatHTTP
LorsquunserveurrpondunerequteHTTP,ilrenvoie,enplusdesressourcesdetypepageHTMLetimages,un
codedtatetdesinformationsdecontrle.Cescodesdtatpermettentdeconnatrelissuedelaconversationentre
leclientnavigateurWebetleserveur.
Les codes de la plage 1xx sont des informations communiques au client concernant ltat dune requte. Ils sont
rarementutiliss.
Lescodesdelaplage2xxindiquentquelarequteatreue,compriseetaccepteparleserveur.
Lescodesdelaplage3xxindiquentquelaressourceexistemaisunemplacementdiffrentdeceluidemand.
Lescodesdelaplage4xxindiquentuneerreurdelapartduclient.Parexemple,cicedernierdemandeuneressource
quinexistepassurleserveur,lecode404luiserarenvoy.
Enfin,lescodesdelaplage 5xxindiquentuneerreurdelapartduserveur.Danslecasounprogrammetelquun
CGI,parexemple,rencontreuneerreurlorsdesonexcution.
RsumdescodesHTTPlespluscourants :
Code

Message

Description

200

OK

Larequteatreueettraite
correctementparleserveur,la
rponseestenvoyedansla
suite.

301

Moved

Laressourcedemandeat
dplace.Lanouvelleadressede
laressourceesttransmiseau
clientpourquilpuissefaireune
nouvelledemande.

304

NotModified

Laressourcedemandenapas
tmodifieetpeutdonctre
obtenuepartirducache.

304

BadRequest

Lasyntaxedelarequteest
incorrecte,oucetterequtene
peutpastresatisfaite.

401

Unauthorized

Laressourcedemandencessite
uneautorisationpourtre
obtenue,leclientdoitreformuler
sarequteenincluantles
autorisationsncessaires.

403

Forbidden

Leressourcedemandenestpas
autorisepourceclient.

404

NotFound

Laressourcenepeutpastre
trouvesurceserveur.

500

ServerError

Leserveurarencontruneerreur
pendantletraitementdecette
requte.

503

ServiceUnavailable

Leserveurnepeutpasrpondre,
cestlecasparexemplequandil
esttropsollicit.

c.LesenttesHTTP

ENI Editions - All rigths reserved

- 3-

LesenttesHTTPsontdesinformationsdecontrletransmiseslorsdelacommunicationentreunnavigateurWebet
unserveurWeb.Ilsservent,parexemple,distinguerlalangueprfredunnavigateurWebpourqueleserveur
soitenmesuredeservirlapagedanslalangueadquate.IlconvientdedistinguerlesenttesderequtesHTTPdes
enttesderponsesHTTP.
Pendantceschanges,ilestcourantquedesserveursajoutentleurspropresenttes,cestnotammentlecasdes
serveursproxy,maislesenttessontsuffisammentparamtrablespourquilspuissenttregalementmodifispar
lesdveloppeursdapplicationsWeb.
Enttesderequte :
EntteHTTP

Description

Accept

Typedecontenuacceptparlenavigateur(par
exempletext/html).

AcceptEncoding

Codagededonnesacceptparlenavigateur.

AcceptLanguage

LangageattenduparlenavigateurWeb.

ContentEncoding

Typedecodagedesdonnesdanslecorpsdela
requte.

ContentType

Typedecontenuducorpsdelarequte(parexemple
text/html).

ContentLength

Tailledesdonnestransmises.

Cookie

Utilisparlenavigateurpourenvoyer,dansla
requte,uncookieversleserveur.

Date

Datededbutdetransfertdesdonnes,auformat
GMT.

Referrer

URLdulienpartirduquellarequteateffectue.

UserAgent

Chanedonnantdesinformationssurleclient,comme
lenometlaversiondunavigateur,dusystme
dexploitation.

Enttesderponse :

- 4-

EntteHTTP

Description

ContentEncoding

Typedecodageducorpsdelarponse.

ContentType

Typedecontenuducorpsdelarponse(parexemple
text/html).

ContentLength

Tailledesdonnestransmises.

Date

Datededbutdetransfertdesdonnesauformat
GMT.

Expires

Datelimitedevaliditdesdonnes.

Location

RedirectionversunenouvelleURL.

Server

Caractristiquesduserveurayantenvoylarponse.

SetCookie

Utilisparleserveur,danslarponse,pourenvoyer
uncookiesurlenavigateur.

ENI Editions - All rigths reserved

d.Gestiondessessionsutilisateurs :lescookiesHTTP
Le protocole HTTP est qualifi de protocole sans tat, cestdire quil est absolument incapable de permettre le
maintienduneconversationentreunclientetunserveur,decefait,chaquecouplerequte/rponseesttotalement
indpendantduprcdentetdusuivant.
Cettecaractristiqueestassezgnantepuisquilnestpaspossibledeconserverdesinformationspourunclientlors
desanavigation.
Ainsi,unutilisateurnaviguantsurunsitedecommercelectronique,pourraitchoisirdacheterunlivresurunepagedu
siteWeb,puisencliquantsurunlien,cestdireenformulantunenouvellerequte,dciderdacheterundisquesur
cette nouvelle page. Le fonctionnement par dfaut du protocole HTTP, ferait que ce stade de la navigation, le
serveurauraitdjoublilelivre !
LeprotocoleHTTPutilisedoncunmcanismesupplmentairepourrglerceproblme:ilsagitdescookiesHTTP.Les
cookiesHTTP,ouplussimplementcookies,sontdesinformationssurlanavigationdunutilisateur,quunserveurWeb
peutajouterdanslarponsequilfournit,touteslesrequtessuivantesdecetutilisateurversceserveurinclurontles
cookiesquelenavigateurdjreu.
Illustrationdufonctionnementdescookies :

Les serveurs Web et autres serveurs dapplications tels Tomcat 5, utilisent massivement cette technologie pour
conserverdesinformationssurlanavigationdunutilisateursurunsiteouuneapplication.

2.LesserveursWeb
SurInternet,lerledunserveurWebestderendredisponibleslesdiffrentespagesHTMLquicomposentunsite,ainsi
quelesressourcesquellespeuventcontenircommeparexempledesimages,duson,delavido.
AujourdhuilesserveursWeblesplusutilisssont :

ApacheHTTPServerdelafondationApache,

InternetInformationServerdeMicrosoft,

SunONEdeSunMicrosystems,anciennementiPlanetdeNetscapeCorp.

Chacundecesserveursproposedenombreusesoptionsdeconfigurationetpermettentdhbergerdemultiplessites
etapplications.Deplus,lesconsidrationsdescurittantdactualit,ilsproposentgalementdesfonctionnalitsde
scurit,notammentlesupportduprotocoleHTTPscuris :HTTPS.

3.Lestechnologiesctclient
LestechnologiesctclientsontlestechnologiesdedveloppementdapplicationoubiendesitesWebutilisespour
concevoirlinterfaceutilisateuretprendreenchargelesdiffrentsvnementsdclenchsparlesutilisateurs.
Troistypesdapplicationsclientessontmajoritairementutiliss :

Lesclientslourds,

Lesclientslgers,

Lesclientsriches.

Lesclientslourds

ENI Editions - All rigths reserved

- 5-

Ce sont des clients proposant une interface graphique fentre telle quune application de traitement de texte par
exemple.
Les technologies utiliss sont variables et dpendent du langage de programmation dans lequel lapplication a t
programme.Cetypedapplicationprsente,engnral,uneinterfacericheencontrleetcomposantsvisuellesoffrant
uneergonomiemaximalelutilisateur.
Enplusdelapartieinterfaceutilisateur,cesapplicationsintgrentgalementunepartienonngligeabledelalogique
de traitement, et peuvent sintgrer des ressources dun systme dinformation, tel quun serveur de base de
donnes,parexemple.
Lestechnologiesutilisessont,parexemple :

Les bibliothques de composants graphiques AWT et Swing en Java, MFC et ATL en langage C++ sous
Windows,

LesbibliothquesdaccsauxbasesdedonnesJDBCpourJava,ADOetODBCpourlestechnologiesMicrosoft.

Lesclientslgers
IlsagitmajoritairementdenavigateursWebutilisantlestechnologiesInternetpourproposeruneinterfacegraphique
lutilisateur.Cesapplicationssontenprincipedveloppesenutilisantleslangagesdeprogrammationcomprhensibles
parunnavigateurWeb,maisgalementdautrestechnologiesmoyennantlinstallationdextensions.
Ces diffrentes ressources sont rendues disponibles au client par un serveur Web avec lequel elles communiquent
grceauprotocoleHTTP.Lestechnologiesdedveloppementdeclientslgerssontaujourdhuitrssouventutilises
conjointementavecdestechnologiesctserveurpermettantunegnrationdynamiquedesinterfacesutilisateurs.
Les clients lgers tirent leur nom du fait quils ne sont responsables que de la partie interface utilisateur, tous les
traitementsdelapplicationsontdportssurunserveurspcifique :unserveurWeb,ouunserveurdapplication.
CesapplicationsutilisentlesmmestechnologiesquepourledveloppementdessitesInternet :

HTML :lelangagedeprsentationdesdonnes.

JavaScript :pourajouterdelinteractivitetdudynamismelinterface.

CSS :pourcrerdesstylesdeprsentationrutilisables.

Deplus,cestechnologiesnativementcomprhensiblesparunnavigateurWebpeuventtreenrichiespardautres,qui
ncessitentsouventdesextensionssurlenavigateurWeb :

Applets Java : programmes graphiques Java embarqus dans les pages HTML, cette technologie requiert un
environnementdexcutionJavasurleposteclient.

ActiveX : technologie Microsoft semblable aux Applets, mais uniquement utilisable avec le navigateur Web
InternetExplorer.

Lesclientsriches
Les clients riches sont un compromis entre les clients lourds et les clients lgers. Linterface graphique de ce type
dapplicationestdveloppeenutilisantunlangagedeprogrammationspcifiquequileurconfreuneergonomieaussi
agrable que les clients lourds, quelques traitements basiques sont galement intgrs ces interfaces, mais la
majorit des traitements se font sur un serveur dapplication, comme pour les clients lgers. Ce nouveau type
dapplicationoffredesperspectivesintressantes,commeparexemplelapossibilitdutiliserlinterfaceclientenmode
connectoudconnectduserveurdapplication,trspratiquepourlesutilisateursnomades.
Cetypededveloppementdapplicationtantrelativementrcent,lestechnologiespermettantdelesdveloppersont
assezpeunombreuses :

LaplateformeMicrosoft.NETproposedessolutionspourcetypedapplication,

LenvironnementEclipseRCP (RichClientPlatform),estuneplateformeOpenSourceutilisantlestechnologies
Java.

4.Lestechnologiesctserveur
- 6-

ENI Editions - All rigths reserved

Lestechnologiesctserveurpermettentledveloppementdespartiesduneapplicationquivontraliserleplusgros
destraitementspourcetteapplication.Lescomposantslogicielsainsidvelopps,ontbesoinsdtrehbergsdansun
environnement spcifique, permettant la connectivit avec les parties clientes de ces applications : cest le serveur
dapplications.
Cestechnologiessontgalementutilisespourdvelopperdescomposantscapablesdegnrerdynamiquementles
interfaces graphiques des applications. Par opposition aux ressources statiques, telles que les pages HTML, ces
ressourcessontdynamiques,puisquelecontenugnrlestdynamiquement,enfonctiondelutilisateurparexemple.
Aujourdhuitroisgrandestechnologiessortentdulotpourledveloppementctserveur :

La plateforme Microsoft .NET qui permet le dveloppement de ressources dynamiques avec la technologie
ASP.NET,etlescomposantsmtierenCOM,DCOM,ouplusrcemment.NETremoting.

La technologie PHP, une plateforme Open Source en pleine volution, notamment avec lapport dans la
dernireversiondelorientobjet.

LaplateformeJEE,basesurlelangageJava,quiproposelescomposantsServletetJSP(JavaServerPages)
en tant que ressources dynamiques, et la technologie EJB (Enterprise JavaBeans) et JavaBean pour les
composantsmtier.UneprsentationplusprcisedecescomposantsestproposedanslechapitreLaPlate
formeJEE5decetouvrage,danslamesureocertainsdentreeuxsontutilissavecTomcat.

5.Lesarchitecturesn/tiers
Les architectures de dveloppement ont normment volu avec le temps. La tendance actuelle du dveloppement
dapplication met laccent sur la sparation des traitements afin de mieux matriser la complexit grandissante de ces
applications,etdepermettreunevolutionplusfacile.
Lesarchitecturesclient/serveurproposaientdesapplicationsintgrantlatotalitdelalogiquemtieretutilisantdes
serveursderessourcesetdedonnes.Lapuissancedupostedetravaildelutilisateurtaitalorsutilise.
Lesarchitectures 3/tiers ont ensuite propos un modle de structuration permettant une sparation de linterface
graphique utilisateur, de la logique de traitement de lapplication, et des serveurs hbergeant les donnes et
ressourcesutilisesparcesapplications.
Lesavantagesdecetypedarchitecturessontnotables,notammentparrapportlancienmodleclientserveur :

Lesinterfacesgraphiquesfonctionnantsurleposteclientpeuventtreallges.

Legrosdestraitementsestralissurunserveurdapplication,etnonplussurleposteclient

Lamisejourduncomposantdetraitementsefaitsurleserveuretnimposeaucunemisejourctclient.

Cependant,silapartieclienteestunclientlourd,ilfautinstallercetteapplicationsurchacundespostesutilisateurs.
Exempledarchitecture3/tiers :

ENI Editions - All rigths reserved

- 7-


Les tendances du dveloppement dapplication se sont donc orientes vers un modle encore plus souple, utilisant
massivementlesclientslgersetdonclestechnologiesdelInternet :lesarchitecturesn/tiers.
Danscesarchitectures,lebnficeapportparlinclusiondunserveurdapplicationspourlestraitementsestconserv,
desserveursWebsontajoutspourprendreenchargelesressourcesWebstatiquestellesquelespagesHTMLetles
images.Lesserveursdapplicationvontgalementhbergerlesressourcesdynamiques.
Cetypedarchitecturepermetuneutilisationdestraitementshbergssurleserveurdapplication,aussibienparles
clientslourdsqueparlesclientslgers.
Exempledarchitecturen/tiers :

LestechnologiesJEEabordesdanscetouvrageetsurlesquellesreposentleserveurTomcatprconisentlutilisation
decetypedarchitecture.

- 8-

ENI Editions - All rigths reserved

TomcatetJava
1.LafondationApache
DveloppdansleslaboratoiresduNCSA(NationalCenterforSupercomputerApplications)parRobMcCool,leserveurWeb
httpdestlundestouspremiersvoirlejour.AprsledpartdeRobMcCoolduNCSAen1994,lecodesourceoriginal
du serveur httpd est repris par un groupe de dveloppeurs qui en corrigent les bugs. La premire version de ce
nouveau serveur Web est rendue disponible en Avril 1995 sous le nom dApache. Aujourdhui Apache est disponible
pouruntrsgrandnombredesystmesdexploitationetcestleserveurWebleplusutilisaumonde.
En1999,lesdveloppeurslorigineduserveurApachefondentlApacheSoftwareFoundation(ASF).LASFestune
organisation but nonlucratif cre dans lobjectif de promouvoir les logiciels libres, en aidant et sponsorisant de
nombreuxprojets.Lalistedecesprojetsestdisponibleladressehttp://www.apache.org.

2.LeprojetJakarta
Un des projets de la fondation Apache est le projetJakarta. Ce projet fdre un ensemble de sousprojets lis aux
technologiesJava.Jakartadivisecesprojetsentroiscatgories :

Lesserveursdapplications.

Lesbibliothques,outilsetAPIdedveloppement.

Lesframeworks.

Tomcatappartientlapremiredecescatgories.
ParmilesautressousprojetsdeJakarta,onpeutgalementciter :

JMeter :outildetestetdemesuredesperformancesdesapplicationsWeb.

Log4j :bibliothquedegestiondesfichiersjournaux(Fichierslogs).

Jetspeed :portailInternet/IntranetutilisantlestechnologiesJava.

Struts :probablementleframeworkdedveloppementWebenJavaleplusclbre.

POI :uneAPIdeprogrammationpourgnrerdesdocumentsMicrosoftExcelenJava.

ANT :unoutilpourautomatiserlaconstructiondesapplicationsJava.

Axis :unebibliothquepourledveloppementdeWebServices.

Geronimo :uneimplmentationcompltedeserveurdapplicationscompatibleJEE

Commons :unensembledebibliothquesdeprogrammationJavacommuneauxdiffrentsprojetsJakarta.

3.LesvolutionsdeTomcat
LeprojetJakartaTomcattrouvesesoriginesautoutdbutdelapparitiondestechnologiesServletetJSP(JavaServer
Pages),dontlesconceptsfondamentauxsontprsentsauChapitreLaplateformeJEE5.LesServletsetJSPsontdes
composants logiciels crits en Java qui fonctionnent dans des serveurs Web spcifiques appels Conteneur Web ou
bienMoteurdeServlet.LepremierConteneurWeb,JavaWebServer,atcrparSunMicrosystems,linventeurde
cestechnologies.Paralllement,lafondationApache,adesonctcrJServ,unautreConteneurWebutiliscomme
extensionduserveurWebApache.
En1999,SunMicrosystemsdcidededonnerlecodeduJavaWebServerlafondationApache,cedernieretleprojet

ENI Editions - All rigths reserved

- 1-

JServ vont fusionner pour donner naissance au serveur Tomcat. Aujourdhui, Tomcat est, pour Sun Microsystems,
limplmentationderfrencedestechnologiesServletetJSP.
n tant quimplmentation de rfrence de ces technologies, un des objectifs majeurs du serveur Tomcat est
E
dtrecompltementcompatibleaveclesspcificationstechnologiquesServletetJSPditesparSun.
LapremireversionduserveurTomcatestlaversion3.xquiestlimplmentationderfrencedestechnologiesServlet
2.2etJSP1.1.CetteversionatconuepartirducodedonnparSun,etdumoteurJServ.
En2001,unerefontecompltedelastructureduserveurTomcatdonnenaissancelaversion4.x.Avecunnouveau
moteurdeServletbaptisCatalina,cetteversionestlimplmentationderfrenceServlet2.3etJSP1.2.
Laversion5deTomcatestlimplmentationderfrenceServlet2.4etJSP2.0.Cetteversionaapportbeaucoupde
nouveautsparrapportlaprcdente,notammentauniveaudusupportdeJMX(JavaManagementExtension)pourle
monitoring, ainsi que des optimisations diverses. La version particulire 5.5 intgre le support des nouveauts
apparuesaveclaplateformeJava 5.0.
LadernireversionmajeuredeTomcat(laversion6)est,quantelle,uneimplmentationdestechnologiesServlet2.5
etJSP2.1,depuiscesversions,limplmentationderfrenceestleserveurOpenSourceGlassFishdveloppparSun.

4.LaplateformeJava
a.Historique
En1991,lasocitSunMicrosystemsdmarreunprojetdinformatiqueembarque:leprojet,baptisStar7,vise
permettre lutilisation de terminaux mobiles avec un systme dexploitation. Ces terminaux taient les anctres des
actuellesPDAetPocketPC !
LesingnieursdeSunMicrosystemssonthabitusutiliserlelangageC++pourledveloppement,etcestdonctout
naturellement vers ce langage quils vont sorienter pour le dveloppement du logiciel des terminaux.
Malheureusement, lutilisation de ce langage se rvle inadapte pour ce type de projet, notamment cause de la
gestionmmoiretrscontraignante.
Danslebutdemenerbienleurprojet,lesingnieursdeSunvontcrerleurproprelangagedeprogrammationense
basantsurC++,etenluiretiranttoussesaspectsquilsconsidrentcommegnant.AinsiestnlelangageJava,qui
sappellera dans un premier temps C++ (un nom de laboratoire !), puis OAK, avant dtre baptis de son nom
actuel.
En 1995, la premire version du kit de dveloppement logiciel en Java : le JDK (Java Development Kit), est rendue
disponible. Cette premire version permet la ralisation dapplications graphiques, dapplications client/serveur, et
dapplets, ces dernires tant des programmes, en gnral graphiques, embarqus dans les pages HTML des sites
Internet,leurapportantdespossibilitsdergonomieetdanimationsupplmentaires.
UnedesprincipalescaractristiquesdulangageJava,estdepermettrelaralisationdapplicationsportablesentreles
architecturesmatriellesetlogicielles,etcecisansrecompilationducodesourceJava.
La compilation du code source Java ne donne pas, comme cest le cas avec beaucoup dautres langages, un
excutablenatif,maisunformatdefichierspcifique,appelbytecode,etuniquementinterprtableparunemachine
virtuelle Java. Quelle que soit la plateforme sur laquelle le code source a t compil, le bytecode gnr est le
mme, il suffit simplement ensuite, davoir une machine virtuelle Java dans son architecture pour pouvoir lancer le
programme.
CycledeconceptiondunprogrammeJava :

- 2-

ENI Editions - All rigths reserved

b.Javaaujourdhui
Aujourdhui la plateforme Java est une des platesformes de dveloppement logiciel les plus adoptes par les
entreprises, au vu de sa robustesse, de sa scurit trs prsente en natif, et de ses performances toujours plus
intressantes.
La plateforme Java se dcompose aujourdhui en trois platesformes distinctes selon le type dapplication
dvelopper.
La plateformeJSE(Java Standard Edition), offre une plateforme de base pour le dveloppement dapplications
client/serveur, applications graphiques fentres et applet. La plateforme JSE est disponible sous deux formes,
dabordlekitdedveloppement,leJDK,ncessairepourtoutdveloppementJava,etensuite,leJRE(JavaRuntime
Environment),indispensablepourfairesexcuterlesapplicationsJava.
CetteplateformeconstituelenoyaudurdeJava,elleestconstituedeslmentssuivants :

LaMachineVirtuelleJava (JVM :JavaVirtualMachine):cestlenvironnementdexcutiondesapplications


Java, elle constitue une passerelle entre les applications Java qui sont portables entre les architectures
matriellesetlogicielles,etlessystmesdexploitation. Il existe des versions de machines virtuelles pour la
majoritdesarchitecturesmatriellesetlogicielles.Cettemachinevirtuelleestnotammentresponsabledela
gestionmmoiredesapplicationsdesortequeleprogrammeurnaitpassenoccuper.

La bibliothque de classe Java : un ensemble de composants logiciels prts lemploi. Ces composants
permettentdecouvrirlesbesoinsdebasedudveloppementJavacommeparexemplelagestiondeschanes
decaractres,lesfonctionsmathmatiques,lescomposantsdinterfacesgraphique,lacommunicationrseau,
etc.

Les outils de dveloppement (uniquement dans le JDK) : un compilateur de code source Java (javac), un
interprteur(java),ungnrateurdedocumentation(javadoc).

Historiquement,laversion1.2decetteplateformeamarquuntournantdanslutilisationdulangage,aveclapport
denouvellesfonctionnalits,cetteversion,sortieen1998,marqueledbutdeJava2.
La version 1.5, publie en fin danne 2004 a apport normment de nouvelles fonctionnalits, si bien quelle est
galementappeleJava5.0,pourdistinguerunpeupluscettenouvelleversion.
Ladernireversionendate(sortieendcembre2006)estlaversion1.6ouJava6.0pourcontinuerlanumrotation

ENI Editions - All rigths reserved

- 3-

deversiondmarreavecJava5.Elleapportequelquesnouveautsconcernantledveloppementdesapplicationsde
bureau.Cestgalementpartirdecetteversionquelechiffre2disparatdelacronymeJ2SE(Java2StandardEdition),
utilisjusquel.
La plateforme JEE (Java Enterprise Edition) est une extension de la plateforme JSE. Elle permet le dveloppement
dapplications dentreprise, cestdire des applications qui vont sexcuter dans un contexte de serveur
dapplications. Les applications JEE peuvent tre exploites par des clients lgers, comme les navigateurs Web, ou
bienpardesclientslourds,commedesapplicationsgraphiquesfentres.
Ladernireversiondecetteplateformeestlaversion5,etcellequiestsupporteparlaversion6duserveurJakarta
Tomcat. Ici galement, le chiffre 2 disparat de lacronyme J2EE(Java 2 Enterprise Edition) utilis depuis le dbut de
lexistencedecetteplateforme.
LechapitreLaplateformeJEE5decetouvrageprsenteplusendtaillesdiffrentsaspectsdecetteplateforme.
La plateformeJME (Java Micro Edition) permet le dveloppement dapplications mobiles. Ces applications peuvent
fonctionner sur des priphriques de type tlphones mobiles, Pocket PC, Palm Pilot, etc. Un trs grand nombre de
fabricants de tlphones mobiles ont dj adopt cette technologie, et proposent une large gamme de produits
compatiblesJME.

c.JavaetTomcat
LeserveurJakartaTomcatest,depuissespremiresversions,dveloppenJava,cetteplateformeluiapportanttous
ses avantages en termes de robustesse, de performance, et de scurit. De plus, les applications hberges par
TomcatsontellesmmescritesenJava,lintgrationestdonccomplte.
LesdiffrentesversionsdeTomcatontsusadapterauxvolutionsapportesaulangage,ettouteslesversionsdece
serveursontencoredisponiblesautlchargement,cestlecasnotammentdesanciennesversions3.xquisontles
seulescompatiblesaveclesversionsdeJavaantrieursJava2.
Aujourdhui,laversion6deTomcatsaittirerprofitdesamliorationsapporteslaplateformeJSE,notammenten
termedeperformance.

- 4-

ENI Editions - All rigths reserved

LaplateformeJavaEnterpriseEdition(JavaEE)
LaplateformeJavaoffredetrsnombreusespossibilitsdedveloppementdapplications.LaplateformeJavaEE(JEE)
est probablement la plus riche des platesformes Java, en offrant un environnement standard de dveloppement et
dexcutiondapplicationsdentreprisemultitiers.
La complexit des architectures informatiques dentreprise tant grandissante, les plateformes de dveloppement de
systmesinformatiquesontdprendreencomptecettecomplexitpourlintgrer.
La plateforme JEE fait partie de celles qui ont le mieux russi cette intgration, en offrant des possibilits
dinterconnexionentrelessystmesetlesapplications,auparavantinexistantes.
En tirant parti des avantages de Java, tels que lindpendance de la plateforme, ou bien son orientation objet qui lui
confreunetrsgranderutilisabilit,JEEsimplifielaconceptiondesystmesdentreprise,enfournissant:

Uneinfrastructuredexcutionpourhbergerlesapplications

Des modles de composants pour dvelopper les applications, livrs sous forme de bibliothques de
programmation

Uneplateformedeserviceintgreparlesinfrastructuresdexcution,etutiliseparlescomposants.

UnautreavantagenonngligeabledeJEE,estquecetteplateformeestunstandard,cequisignifieque,bienqueles
produits estampills compatible JEE soient relativement nombreux, ils respectent tous les standards de cette plate
forme,etpeuventdonctreutilisspourhbergerlesapplicationsqui,ellesaussi,onttdveloppesenrespectant
cesstandards.
CetouvragenetraitepasdudveloppementdapplicationsJEE,maisilestncessairedeprsenterlesfondementsde
cette plateforme dans la mesure o Tomcat 6 repose entirement sur cette plateforme, et que les applications
hbergesparceserveursontdveloppesaveclesbibliothquesJEE.

1.LeJavaCommunityProcess(JCP)
LefaitquelaplateformeJavasoituneplateformestandardacontribusonadoptionpardetrsnombreuxditeurs
delogiciels.Enplusdeladoptiondecesstandards,certainsdentreeuxparticipentgalementllaborationdeces
technologies.CesditeursassocisSunMicrosystemsfontpartieduJCP :LeJavaCommunityProcess.
Le Java Community Process regroupe des entreprises du monde informatique aussi prestigieuses que Sun, IBM,
Oracle, Borland, BEA, Nokia, Sony, mais galement des acteurs du logiciel libre comme la fondation Apache ou le
consortium ObjectWeb. Son objectif est de dfinir les spcifications des nouvelles technologies autour de Java, ces
nouveautspeuventconcernertouteslesplatesformesJava.
LesdemandesdemodificationoudecrationdenouvellesspcificationssontappelesJSR (JavaSpecificationRequest),
etsontnumrotesavantdtrebaptises.Ainsi,lanouvelleAPIJavaServerFacessestdabordappeleJSR127.
LeprocessusdtablissementduneJSRsedrouledelafaonsuivante :

Dabord, pendant linitialisation du projet, sont dfinis les membres participant cette nouvelle spcification,
unedescriptionetunejustificationduprojet,ainsiquunplanningprvisionnel.

Ensuite, un groupe dexperts chargs de faire une premire bauche de la spcification (Early Draft), est
constitu.CesexpertssontdesspcialistesemploysparlessocitsmembresduJCP.Lapremireversionde
laspcificationestsoumiselacommunautJavaetaucomitdevalidationduJCP,leJCPExecutiveComitee.

Laccueil fait la spcification dtermine les modifications apporter au travail des experts, pour finalement
conduire sa version finale (Final Release). La spcification est rendue publique, de mme quune
implmentationderfrencefournieparlegroupedexperts.

Enfin,unexpertestnomm,ilestchargdelamaintenancedelaspcification(MaintenanceRelease).

LesinformationssurletravailencoursduJCPetltatdavancementdesnouvellesspcificationssontconsultablessur
http://www.jcp.org.

2.Unefortedpendance :Java5etlesannotations
ENI Editions - All rigths reserved

- 1-

Laversion5delaplateformeJSE(etdoncdulangageJava)aintroduitbeaucoupdenouveautsdanslamanirede
programmeraveccelangage.Parmitoutescesinnovations,lunedellesalaisssceptiqueplusdundveloppeurJava,
ilsagitdesannotations.
Lesannotationssontdesmtadonnesintroduitesdanslecode,cesmtadonnesdoiventtreinterprtesparun
programme Java spcifique pour pouvoir donner un rsultat concret. Dans la plateforme Java 5, les annotations
fourniestaittrspeunombreuses,ilestclairqueSunMicrosystemscherchait,cemomentl,prparerleterrain
pourJEE5.
Les annotations rvolutionnent compltement le dveloppement dapplications dentreprise Java, et plus
particulirementledveloppementdapplicationsEJBetdeWebServices.Eneffet,lereprocheassezfrquemmentfait
ce type dapplications est que le dveloppeur devait fournit beaucoup dinformations techniques nayant aucune
valeur ajoute pour son application. Les annotations vont permettre de gnrer automatiquement ces donnes
techniques au moment du dploiement des applications dans le serveur, puisque ces serveurs intgrent les
programmescapablesdinterprtercesannotations.
AvecJEE5,lesannotationssontprincipalementutilisespour :

LesapplicationsbasessurJPA.

LesapplicationsEJB.

LesapplicationsdeServicesWeb.

Elles peuvent galement tre utilises dans des applications clientes (Web ou client lourd Java), qui ont des
dpendancesaveccestypesdapplications.
ExempledutilisationduneannotationpourcrerunServiceWeb :
package fr.eni.editions.jee5.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public class MonServiceWeb {
@WebMethod(name="addition")
public int op_Addition(int a, int b) {
return a + b;
}
}
Danslexemple cidessus,lannotation@WebServiceestutilisepourdclarerquecetteclasseJavadoittredclare
commeunServiceWeb,etlannotation@WebMethodpourdclarerquelafonctionop_Addition()decetteclassedoittre
exposesouslenomaddition.
Cette syntaxe vite lcriture de fichiers de configuration trs complexes, comme ctait le cas dans les versions
prcdentesdelaplateformeJEE.

- 2-

ENI Editions - All rigths reserved

LescomposantsJavaEE
LemodlededveloppementdapplicationsJEEprconisparSunMicrosystemsfaitintervenirtroistypesdecomposants
logiciels.Lobjectifestdemieuxsparerlestraitementsetdonclesresponsabilitsdechacundecescomposantsdans
lapplication.Avecunteldcoupage,lquipededveloppementpeutmieuxstructureretmodlisersonapplicationavec
decommencerlecodage,deplus,lapplicationestplusfacilementmaintenable.

1.Servlet
LesservletssontdescomposantslogicielsentirementcritsenJava,cenesontpasdesprogrammesautonomes,et
ellesdoiventtrehbergesdansunserveurdapplicationpourpouvoirtreappeles.
Lesservletssontdescomposantsorientsrequte/rponse,cestdirequuneservletsexcutesuiteunerequte,
engnralhttp,etfournitunerponsecetterequte,cefonctionnementestdonctrsprochedeceluidunserveur
Web.
Une servlet possde des caractristiques intressantes, comme elle est crite en Java, elle est portable et volutive,
mais elle est galement trs performante car elle est charge en mmoire lors de son premier appel, et en sera
dchargelarrtdelapplicationouduserveurdapplications.Deplus,ilnyatoujoursquuneseuleinstancedune
servletenmmoire,leserveurdapplicationsutilisantunthreadpourtraiterchaquerequtemiseparlesclients.
Cycledevieduneservlet
UneservlettantavanttoutechoseuneclasseJava,cetteclassedoittrechargepuisinterprteparunemachine
virtuelleJava,enloccurrenceici,celleduserveurdapplication.Ensuite,leserveurvainitialiserlaservletpourluifaire
charger des informations de configuration, par exemple, la servlet est maintenant prte recevoir des requtes et
renvoyer des rponses. Lorsque lapplication ou le serveur sarrte, la servlet est dtruite, puis son instance est
nettoyeparlamachinevirtuelleJava.
Cycledevieduneservlet :

Le rle dune servlet dans une application JEE, est de recevoir les requtes des clients, ainsi que den extraire les
informations,cesinformationsunefoisventuellementformates,pourronttreutilisespourappelerlestraitements.
La servlet est aussi responsable de la prparation des donnes ncessaires la gnration de la rponse, sans
ncessairementfournircetterponseauclient.

2.JavaServerPages :JSP
La technologie Java Server Pages permet le dveloppement de pages Web dynamiques. Dun point de vue de sa
structure,unepageJSPesttrsprochedunepagePHPoubienASP,sicenestquelelangageutilispourlapartie
dynamiquenestpaslemme.UnepageJSPestunfichierquiportelextension.jsp.
Une page JSP est constitue dun squelette de code HTML pour la partie statique, et de code Java pour permettre
lintgration de donnes obtenues en rsultat des traitements. La structure dune JSP est donc htrogne, et elle
devratretraiteparleserveurdapplicationavantdtreenvoyedanslarponseauclient.
Cetraitementestralisparleserveurdapplicationsaupremierappeldelapageetchaquefoisquecettepageest
modifieparunprogrammeur.UnserveurdapplicationstransformeuneJSPenclasseJava,puislacompileenservlet,

ENI Editions - All rigths reserved

- 1-

cestensuitelexcutiondecetteservletparticulirequiprovoqueralagnrationdelarponse.Chaqueautrerequte
verscetteJSPestenfaitdirectementpriseenchargeparlaservletgnre.
Cest cette tape particulire du cycle de vie dune JSP qui fait quun serveur dapplications JEE a besoin dun
compilateurJava,etqueparconsquent,unegrandemajoritdentreeuxncessiteuneinstallationdeJavafourniepar
unJDKpluttqueparunJRE.
Cycledeviedune JSP :
Latransformationestassureparunoutilinterneduserveurdapplications,lacompilationparuncompilateurJava,comme
celuiduJDK :javac.

LerleduneJSPdansuneapplicationJEEestdeprendreenchargelapartievisuelledecetteapplicationenprsentant
lesdonnesauclient.

3.EnterpriseJavaBeans :EJB
LescomposantsEnterpriseJavaBeanssontdescomposantsmtierdistribus,cestdirequilssontinvocablesparle
rseau. Les EJB sont trs grande valeur ajoute car ils prennent en charge les transactions, la scurit, et sont
naturellementamenstrerpartisurdesfermesdeserveurs.
IlexistedeuxtypesdEJB :

LesEJBsession : ilsencapsulentlensembledesfonctionnalitsmtierncessaireslapplication,ilspeuvent,
selonleursconfigurations,maintenirounondesinformationssurlesclientsetlestraitementsquilsralisent(ils
sontditavecousanstat).

Les EJB pilot par message : appel galement MDB (Message DrivenBean), ils sont comparables aux EJB
sessions, mais sont invoqus diffremment. Les EJB session sont directement exploits par des appels de
fonctionnalits sur ces composants. Par contre, pour dclencher un traitement sur un EJB MDB, il faut au
contraire,luienvoyerunmessageapplicatifenutilisantlAPIJMS(JavaMessageService),prsenteplusloin.

CettenouvelleversiondelaplateformeJEEavudisparatrelesEJBentit.UnEJBentitestuncomposantpersistant,
cestdire que son tat est sauvegard et restaur dans une base de donnes. Ils matrialisent les donnes
ncessaireslapplication,etsontengnralappelsparlesEJBsessions.LesEJBentitsontaujourdhuiremplacs
parlanouvelleAPIdepersistanceJava :JavaPersistenceAPI(JPA).
LerledunEJBdansuneapplicationJEEestdoncvariableenfonctiondesontype.LesdiffrentstypesdEJBsonten
gnralutilissconjointementdansunemmeapplication.
LesEJBsonthbergsdansunepartiespcifiquedunserveurdapplicationJEE.LeserveurTomcat6nedisposepasde
cetenvironnementspcifique,ilestdoncimpossibledutiliserdesEJBavecTomcat6.Cependant,lestechnologiesJava
proposentdetrsnombreusesalternativesauxEJBquisontdailleursmoinscoteusesentempsdedveloppement,et
surtoutmoinscomplexes,quelesEJB.

4.LesentitsJava
Les entits Java sont des objets persistants, cestdire que leur tat est sauvegard dans une base de donnes

- 2-

ENI Editions - All rigths reserved

relationnelle. Les entits Java sont cres avec lAPI de persistance Java JPA. Cette nouvelle API apporte plus de
souplesse que les EJB entits prcdemment utilises, car elle est exploitable dans des applications nonJEE. Les
entitsJavanontpasbesoindtreinstallesdansunserveurdapplications.
LAPIJPAutiliselesannotationspourindiquerlescaractristiquesdepersistancedesobjets,notammentlassociation
classe vers table et les associations entre les proprits de la classe et les colonnes de la table, cest du mappage
Objet/Relationnel.
UnecaractristiqueintressantedeJPAestdefourniruneabstractionparrapportlabasededonnesutilise,par
configuration,ledveloppeurprciselesdonnesdeconnectivitcettebasesansquesescaractristiquespropres
soientutilisesdanslecode.
JPA est dfinie par Sun Microsystems sous forme dunespcificationtechniquequedesditeurspeuventutiliserpour
fournirdesimplmentationsdecetteAPI.Lesprincipalesimplmentationsactuellessont :

Hibernate:initialementunprojetOpenSource,aujourdhuirattachlasocitJBoss,

TopLink:unproduitdelditeurOracle,

OpenJPA:projetOpenSourcedelafondationApache.

ENI Editions - All rigths reserved

- 3-

Laplateformedeservice
LesapplicationsJEEontdesbesoinsdaccsauxdiffrentslmentsdusystmedinformation,cestnotammentlecas
des composants EJB entit prcdemment prsents, qui doivent accder une base de donnes pour y enregistrer
leurs informations. Un trs grand nombre de services sont proposs par la plateforme JEE, ces services permettent
lintgrationauxsourcesdedonnes,etsontrendusaccessiblesauxapplicationsparleserveurdapplications.

1.JDBC :JavaDataBaseConnectivity
JDBC permet aux programmes Java daccder aux bases de donnes. Cette API de programmation possde la
particularitdepermettreundveloppementsanssesoucierdutypedelabasededonnesutilise:elleutilisepour
a,unpilotedaccslabasededonnes.
JDBCestdisponiblepourlaplateformedebaseJava :JSE.JEErajouteuneextensionJDBCpourlintgrationdecette
APIentantqueservicedunserveurdapplications.
LaJavaPersistenceAPIutiliseJDBCdemaniretransparentepourcrireltatdesentitspersistantesdansunebase
dedonnes.

2.JNDI :JavaNaming&DirectoryInterface
LerledelAPIJNDIdansJEEestdouble.
Dabord,ellepermetlaccsauxservicesdannuairedentrepriseutilis,parexemple,pourauthentifierlesutilisateurs.
Elleutilisepourcettetche,unmcanismedepilotesemblableJDBC,luipermettantainsidutiliserlesdiffrentstypes
dannuaire.
JNDIpermetgalementdimplmenterunservicedenommage.Lensembledesressourcesqueleserveurdapplication
met disposition via ces API de services, doit tre enregistr avec un nom logique, permettant aux applications de
recherchercetteressourcedansleserveur:cestledeuximerledeJNDI.

3.JMS :JavaMessageService
Lorsdelappeldunefonctionnalitsuruncomposantparunautre,lecomposantquiaappelcettefonctionestbloqu
etenattentedunerponsedelapartducomposantappel :cetypedinvocationestditsynchrone.Pourviterces
interblocages,ilestpossibledutiliserunmcanismedinvocationasynchrone,parlenvoidemessagesapplicatifsentre
lescomposants :cestlerledeJMS.
Le composant appelant poste un message destination dune file dattente de messages, hberge par le serveur
dapplications,puiscontinuesontraitement,sansattendre.Lecomposantappelestabonncettefiledattente,et
traitelemessagequiordonneuntraitementparticulier.

4.JavaMail
JavaMail permet la cration et lenvoi de message lectronique via Java. Cette API permet dutiliser les protocoles
standards de messagerie Internet : POP3, IMAP4, SMTP. Un serveur dapplication JEE peut exposer une configuration
daccsunserveurdemessagerielectronique,pourquuneapplicationutilisantJavaMailpuisseenvoyerunmessage.

5.JTA :JavaTransactionAPI
Lorsdelaccsunebasededonnes,uneapplicationpeutavoirbesoindutiliserunetransaction.Leprincipeconsiste
considrerunensembledoprationscommeuneseule.
Parexemple,uneapplicationbancairequiraliseunviremententredeuxcomptesvadaborddbiterlepremiercompte,
puis crditer le deuxime. Il est indispensable de raliser ces deux oprations dans une transaction, ainsi si le dbit
puislecrditaboutissenttouslesdeuxsansproblme,alorslatransactionestvalide,danslecascontraire,onannule
tout,etlescomptesreprennentleursoldeinitial.
partir du moment o la mme base de donne est utilise pour stocker toutes les informations utilises dans une
transaction,lAPIJDBCprsenteprcdemment,permetdegrerlatransaction,maissilesdonnessontrparties,il
faudraalorsutiliserlestransactionsdeJTA.

ENI Editions - All rigths reserved

- 1-

JTA permet de grer les transactions dites distribues, cestdire quelles font intervenir des bases de donnes
diffrentes,oudescomposantsEJBdiffrents.
LutilisationdeJTAncessiteunenvironnementdexcutionpourlesEJB.

6.RMI/IIOP :RemoteMethodInvocation/InternetInterORBProtocol
RMI est une API Java qui permet lappel de fonctionnalit distance, en utilisant une communication rseau. RMI fait
partie de la plateforme JSE. RMI/IIOP est une extension utilise pour la construction des EJB sessions et entits,
compatibleavecdautresmcanismescomparablesdansdautrestechnologies.

7.JCA :JEEConnectorArchitecture
Un connecteur JEE permet dutiliser une ressource du systme dinformation qui ne possde pas dinterface native
Java/JEE.Lesgrossystmesinformatiquestelslesmainframes,sontutilisablesparlesapplicationsJEEenayantrecours
unconnecteurspcifiquecessystmes.

8.XML
XML nest pas une API de service JEE, mais son utilisation dans cette plateforme est de plus en plus importante.
Dabord utilis pour crire les diffrents fichiers de configuration, XML est la base dun nouveau mode de
communicationentrelesapplications :lesWebServices.
LesWebServicessontdescomposantslogicielsquisontinvocablespardautrescomposantsmmesicesderniersont
tdveloppenutilisantunlangagedeprogrammationdiffrent,ousilsfonctionnentsurunsystmedexploitation
diffrent.
Laversion5deJavaEEapporteunsupportstandarddesWebServicesavecunenouvelleAPI : JAXWS(JavaAPIfor
XMLWebServices).
UngrandnombredAPIpourletraitementXMLsontprsentesdansJEE,parexempleJAXP(JavaAPIforXMLParsing),
pourlanalysedesfichiersXML,etJAXB(JavaArchitectureforXMLBinding)pourassocierdesdonnesXMLdesclasses
Java,etainsifaciliterlamanipulationdecesdonnes.

- 2-

ENI Editions - All rigths reserved

LesapplicationsJEE
La plateforme JEE apporte un certain nombre de standards pour le dveloppement des applications Java en
environnement serveur et apporte dautres services. En plus de fournir un modle de composants, JEE standardise
galementlamaniredontcescomposantsdoiventtreassemblsavantdepouvoirtreinstallsdansunserveurJEE.
LesphasesdcritesparJEEpendantlecycledeconceptiondapplicationssont :
Ledveloppementdescomposantsapplicatifs :cettephasecorrespondlamodlisationpuisaucodageindividueldes
diffrentscomposantslogiciels.
Lassemblage des composants en modules : les diffrents types de composants sont assembls en modules de
dploiementspcifiques.AinsilesservletsetJSPsontassemblsdansdesmodulesWeb,etlesEJBdansdesmodules
EJB.Desfichiersdeconfigurationsontajouts.
Lassemblage des modules en applications : pour simplifier la livraison dune application, les diffrents modules sont
regroupsenuneseuleetuniquearchivededploiement.
Le dploiement de lapplication : en utilisant les outils spcifiques du serveur dapplications,lapplication est installe
dans le serveur. Ces outils trs diffrents ont en commun de pouvoir lire ces formats dapplications et de modules
standardspourraliserlinstallation.

1.LemodlededveloppementMVC
Larchitecture de dveloppement MVC (Model View Controller) ou encore modle MVC, trouve ses origines avec le
langage SmallTalk au dbut des annes 1980, ce nest donc pas un concept nouveau spcifiquement li au
dveloppement JEE. Son objectif principal est dapporter une sparation de la logique mtier et de la logique
daffichage,etpourcefaire,ellediviselapplicationentroispartiesdistinctes :lemodle,lavueetenfinlecontrleur.
Appliqu aux technologies JEE, le modle MVC trouve un type de composant par rle remplir : le modle est
reprsentparlescomposantsEJB,lecontrleurparlesservlets,etlavueparlesJSP.
CollaborationdanslemodleMVC :
1.LeclientmetunerequteHTTPdestinationdelapplication,cestengnraluneservletquireoitlarequteetquien
extraitlesinformations.
2.Lesinformationssontutilisespourappelerlestraitementsmtier.
3.Lescomposantsdumodlemanipulentlesdonnesdusystmedinformation(lecture,enregistrement,misejour,).
4.Lestraitementsmtierretournentlesdonnesrsultatslaservlet,quistockecesdonnespourlesrendreaccessibleaux
JSP.
5.LaservletappellelaJSPadquate.
6.LaJSPsexcute,inclutlesdonnestransmisesparlaservlet,etgnrelarponseauclient.

LutilisationdumodleMVCpourledveloppementdesapplicationsJEEestuneprconisationdeSunMicrosystems,et
lutiliserapporteuncertainnombredavantages.
Dabord,lesresponsabilitstantclairementdfiniesauseindelapplication,lescomposantssontplusnombreux,mais
galement plus simples, leurs spcificits font quilspeuventtredveloppspardesspcialistes,lesservletsetEJB
pardesdveloppeursJava,lesJSPpardeswebdesigners.
Ce dcoupage permet galement une maintenance plus aise de lapplication, ainsi un changement de charte

ENI Editions - All rigths reserved

- 1-

graphique, ou encore de logo par lentreprise, naura un impact que sur la partie vue, le modle et le contrleur ne
subirontenrienceschangements.
Pour simplifier et systmatiser lutilisation de MVC dans les architectures JEE, des frameworks de dveloppement
entirementbassurcemodleMVC,telApacheStrutsouencorelanouvelleAPIJavaServerFaces,ontvulejour.

2.LesdiffrentsmodulesJEE
LesapplicationsJEEsontdesapplicationsmultitiersquioffrentdemultiplespossibilitsdintgrationaveclesressources
dunsystmedinformation,etderalisationsdinterfacesgraphiquesutilisateurs.Lestraitementspeuventtreraliss
partir de donnes provenant de base de donnes ou bien de mainframes, et ces mmes donnes peuvent tre
prsentessuruneinterfacegraphiquedetypeclientlourdoubienunnavigateurWeb.
Il est donc ncessaire dorganiser les diffrents lments de code dune application en fonction de leur rle, des
modulespourlesinterfacesWeb,dautrespourlesinterfacesgraphiquesclientlourds,etc.
LeregroupementdecesressourcessefaitdansdesmodulesappelsmodulesdedploiementJEE.Unmodulenestni
plusnimoinsquunearchiveauformatZIPincluantlesdiffrentesressources,maisavecuneextensionparticulire.

a.ModulesWeb
Un module web contient les lments dune application JEE qui vont permettre lutilisation de cette application au
traversdunnavigateurWebetduprotocoleHTTP.
Les lments intgrs dans un module web sont les servlets et les JSP : ce sont les ressources dynamiques de
lapplication,maisilestgalementcourantdytrouverlesressourcesstatiquestellesquelespagesHTML,fichiersde
scripts,lesimagesetautrecontenumultimdia.Deplus,lesressourcesdynamiquestantdveloppesenJava,on
trouvegalementdesbibliothquesdeclassesJavasupplmentaire,fourniessousformedefichier.jar.
Les modules web possdent un descripteur de dploiement : le fichier web.xml , et sont assembls dans un fichier
dextension.war,signifiantWebARchive.CestcetypedarchivequeTomcat6seraamenmanipuler.

b.ModulesEJB
Les composants EJB sont constitus dune multitude de fichiers de code Java, mais galement de fichiers de
configuration.LobjectifdesmodulesEJBestdefournirunearchivehomognepourlalivraisonetledploiementde
cescomposants.
UnmoduleEJBpossdelaparticularitdenepastredirectementexploitableparleserveurdapplication.Eneffet,les
composantsEJBdoiventintgreruncertainnombredefichiersdecodeJavaspcifiqueauserveurdapplications.Dans
lobjectif de dvelopper des applications standards JEE, ces fichiers de code spcifiques ne sont pas fournis par le
dveloppeur,maissontgnrsautomatiquementparlesoutilsduserveurdapplicationsaumomentdudploiement.
Pour permettre cette gnration de code, il est tout de mme ncessaire de fournir des fichiers de configuration
supplmentairespropresauserveurdapplicationsutilis.
LedescripteurdedploiementdunmoduleEJBestlefichierejbjar.xml,etcesmodulessontassemblsenarchive
dextension.jar.

c.ModulesClient
Les modules EJB prcdemment prsents permettent lintgration des traitements et des donnes mtier, ces
lments peuvent tre exploits par les modules web pour afficher les donnes sur un navigateur, mais il est
galementpossibledutiliserlesEJBautraversduneinterfacegraphiqueclientlourddveloppeenutilisantlesAPI
de programmation Java AWT ou SWING. Ces classes devront ensuite tre assembles dans un module JEE pour
pouvoirinteragiravecleserveurdapplications.
Un module client permet lassemblage de ce type de classes, et doit fournir un descripteur de dploiement dans le
fichierapplicationclient.xml.Unmoduleclientestunfichierdarchiveportantlextension.jar.

d.Modulesdeconnecteurs
Les ressources dun systme dinformation telles que les bases de donnes ou bien les services dannuaires, sont
intgrablesdanslesapplicationsJEEgrceauxAPIJDBCetJNDI.
LAPI JCA prsente prcdemment dans ce chapitre permet lintgration de systmes ne disposant pas de
passerellesdintgrationavecJava,enproposantuneAPIstandardpourdveloppercespasserelles.Lesmodulesde
connecteurpermettentensuitedassemblerceslmentsdecode.

- 2-

ENI Editions - All rigths reserved

Ledescripteurdedploiementdecetypedemoduleestunfichiernommra.xml,lemoduleestunfichierdarchivequi
portelextension.rar.

3.Structureetpackagingdesapplications
Chaque module de dploiement JEE inclut un fichier de configuration spcifique au format XML, appel descripteur de
dploiement.
Lerledundescripteurdedploiementestderfrenceretdeconfigurerlesdiffrentscomposantsdecemodule,par
exemple,ledescripteurdedploiementweb.xmldunmodulewebdcrittouteslesservletsainsiquelamaniredont
ellesserontappelesparlesclients.LapplicationdentrepriseJEE,quicontienttouslesmodules,possdeelleaussiun
descripteurdedploiementquirfrencetouslesmodulesdecetteapplication.
Lorsdelinstallationduneapplicationdansleserveur,lesoutilsdinstallationdesapplicationslisentlesdescripteursde
dploiementpoursavoircommentinstallerlapplicationetsesmodules.
StructuredesmodulesdedploiementetdesapplicationsJEE :

Chacundesmodulesdedploiementestgalementinstallabledemanireautonome,sansavoirtintgrdansun
fichier.eardapplicationJEE,unserveurdapplicationJEEpeutdirectementutiliserunfichier.war,parexemple.

ENI Editions - All rigths reserved

- 3-

LesapplicationsWebJEEetTomcat
Parmitouscestypesdemodules,lesmoduleswebsontlesseulsexploitablesparunserveurTomcat6,lesapplications
Tomcat6sontdoncfourniessousformedefichiers.warautonomes :lesapplicationsweb.
CesapplicationsWebpeuventcontenirdesclassesJavapourlagestiondestraitementsmtiers,ainsiquedesclasses
dentitsJavapourlagestiondelapersistance.
ouvragesecontenteuniquementdedtaillerlastructuredesmoduleswebdanslamesureounadministrateur
L
deserveurTomcat6alaresponsabilitdinstallercetypedemodule.Pourensavoirplussurlesautresmodules,il
fautconsulterunouvragespcifiquesurlesujet,oubienlesitewebdeSunMicrosystemssurlestechnologiesJEE :
http://java.sun.com/jee,quiproposeunexcellenttutorielsurlesujet.

1.StructureetarborescenceduneapplicationWeb
Larborescence dune application Web est trs particulire, et doit tre respecte, dans le cas contraire, une
application,mmetrsbienprogramme,peutnepasfonctionnercorrectement,voirenepassinstallerdutoutdansle
serveur.
Larborescence dune application Web est constitue dun rpertoire spcifique appel WEBINF/ et qui contient
notammentlesclassesJavasousWEBINF/classes,leslibrairiesdecodeJavasousWEBINF/lib,etledescripteurde
dploiementweb.xmldelapplication.Cerpertoireestlapartieprivedelapplication,ilnestpasvisibledunpointde
vuedelutilisateurfinal,ainsiunutilisateurnepourrajamaistlchargerledescripteurdedploiement parexemple.
ToutcequisetrouveendehorsdurpertoireWEBINF/constituelapartiepubliquedelapplication,lesressources
sont accessibles. La partie publique contient les diffrentes pages HTML et JSP, mais aussi toutes les ressources
multimdiacommelesimages.
ExempledarborescencedapplicationWeb :

noterquecettearborescencemontreuneapplicationfinalise,etquelemplacementducodesourceJavanapparatpasici.
Chaque application Web dploye dans un serveur dapplications est accessible via une URL unique. Cette URL est
constituedunomdhteetdunumrodeportduserveurdapplications, ainsi que dunepartiefaisantrfrence
uneapplicationwebparticulire :cestlecheminducontextedapplicationweb.Lorsdudploiementduneapplication
dans un serveur, le dployeur dapplication est responsable de lattribution dun chemin de contexte unique pour
chaquemoduleWeb.
ENI Editions - All rigths reserved

- 1-

LecontextedapplicationWebreprsentelavuecompltedelapplicationwebcommunetouslesclients,cettevue
globalepermetdefairerfrencedesdonnesdeconfigurationcommunestouslesutilisateurs,parexemple.
FormatdesURLdaccsauxapplicationsWeb :
http://<nom dhte du serveur>:<port>/c o n t e x t e

2.Ledescripteurdedploiement :web.xml
LedescripteurdedploiementduneapplicationWebcontientplusieurstypesdinformations,sonobjectifestdorienter
leserveurdapplicationsurlinstallationdelapplication.
Lesprincipalesinformationsquelonytrouvesont:
Desparamtresdinitialisationpourlapplicationet/oulesservlets :cesontdesinformationsdetypetextequeles
servlets et JSP de lapplication peuvent consulter. Ces informations peuvent, par exemple, permettre de spcifier
ladresseemaildeladministrateurdusiteoudelapplication,sansavoirlcrireendurdanslecode,permettantainsi
unemodificationplusaisedecetteadresse.
La dfinition des servlets et des JSP : chaque servlet dune application Web JEE doit tre dclare dans le fichier
web.xmlpourtreaccessible.IlestgalementpossiblededclarerlespagesJSPsiellesontbesoindeparamtres
dinitialisationparticuliers.
LamiseencorrespondancedesservletsavecdesURL :lesclassesJavadeservletstantstockesdanslapartie
prive de lapplication web (WEBINF/classes), il est indispensable que le serveur dapplication associe des URL
entrantes chacune des servlets de lapplication. Cette association se fait aprs avoir dfini chaque servlet (voir ci
dessus).
Les pages daccueil et derreur de lapplication : lorsquun utilisateur fait rfrence la racine de lapplication, il
demandelapagedaccueil,cettepagepeuttredfinieparunedirectivedufichierweb.xml.Deplus,ilestpossible
dassocier les diffrents codes dtat HTTP et erreurs applicatives, des pages spcifiques, comme le code derreur
HTTP404parexemple.
Des contraintes de scurit : certaines parties dune application Web JEE peuvent tre restreintes certains
utilisateurs. Les directives de configuration utilises dans le descripteur de dploiement, permettent de spcifier
quels utilisateurs ces ressources sont rserves, et comment ces utilisateurs particuliers vont sidentifier sur
lapplication.Lechapitresurlascuritexposeplusendtailcesmcanismes.
Exempledefichierweb.xml :
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Demo</display-name>
<context-param>
<param-name>auteur</param-name>
<param-value>Etienne LANGLET</param-value>
</context-param>
<servlet>
<servlet-name>FormulaireServlet</servlet-name>
<servlet-class>
fr.eni.editions.demo.servlet.FormulaireServlet
</servlet-class>
<init-param>
<param-name>configuration</param-name>
<param-value>DEV</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>AutreServlet</servlet-name>
<servlet-class>
fr.eni.editions.demo.servlet.AutreServlet
</servlet-class>

- 2-

ENI Editions - All rigths reserved

</servlet>
<servlet-mapping>
<servlet-name>FormulaireServlet</servlet-name>
<url-pattern>/form</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AutreServlet</servlet-name>
<url-pattern>/autre</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>formulaire.html</welcome-file>
</welcome-file-list>
</web-app>
Voiciendtail,lexplicationdesdiffrentespartiesdecefichier.
Un descripteur de dploiement est un fichier XML qui est valid par rapport une grammaire particulire. Cette
grammairepeuttredfiniedansdeuxtypesdefichierspourlavalidation,les DTD(Document Type Definition)etles
SchmasXML(Fichier.xsd),lesschmasXMLpermettentunevalidationplusfineetsontutilissdepuisJ2EE1.4.Len
ttedecefichiercontientdonclarfrenceauschmaXMLutilis,critdanslepremierlmentdeconfigurationXML :
llmentracine<web-app>.
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
Ilyaensuiteunlmentpermettantdedonneruntitrelapplication.
<display-name>Demo</display-name>
DesparamtresdinitialisationpeuventtrespcifisetrcuprsparprogrammationdanstouteslesservletsetJSP
delapplication.Leprogrammeurutiliselenomduparamtrepourrcuprerlavaleurassocie.
<context-param>
<param-name>auteur</param-name>
<param-value>Etienne LANGLET</param-value>
</context-param>
ChaqueservletdoitensuitetredclareenmettantencorrespondanceunnomlogiqueaveclaclasseJavadecette
servlet.Cettedclarationpeutgalementfairementiondeparamtresdinitialisationspcifiqueschaqueservlet.
<servlet>
<servlet-name>FormulaireServlet</servlet-name>
<servlet-class>
fr.eni.editions.demo.servlet.FormulaireServlet
</servlet-class>
<init-param>
<param-name>configuration</param-name>
<param-value>DEV</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>AutreServlet</servlet-name>
<servlet-class>
fr.eni.editions.demo.servlet.AutreServlet
</servlet-class>
</servlet>
Pourtreaccessible,chaqueservletprcdemmentdclaredoittreassocieuneURL.
<servlet-mapping>

ENI Editions - All rigths reserved

- 3-

<servlet-name>FormulaireServlet</servlet-name>
<url-pattern>/form</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AutreServlet</servlet-name>
<url-pattern>/autre</url-pattern>
</servlet-mapping>
Enfin, la page daccueil par dfaut de lapplication est rfrence, et le document se termine par la balise de fin de
llmentracine.
<welcome-file-list>
<welcome-file>formulaire.html</welcome-file>
</welcome-file-list>
</web-app>
LorsdudmarrageduneapplicationparTomcat6,leserveuranalyselefichierweb.xmletlevalidepartirduschma
XML,silasyntaxedufichiernecorrespondpasauschma,alorslapplicationneserapasdmarreetneseradonc
pasdisponible.

3.LessessionsHTTP
UnedesproblmatiquesvoquesdanslechapitrePrambule,estlincapacitduprotocoleHTTPgrerluimmele
suivi de la navigation dun client sur un site ou une application Web. Ainsi chaque requte mise par un client, est
compltement indpendante de la suivante et de la prcdente. Pour combler ce manque, le protocole HTTP peut
sappuyer sur le mcanisme des cookies, qui consiste envoyer des informations vers le navigateur client, en les
insrantdanslarponse.
Cependant,cettesolutionprsentedenombreuxinconvnientslislastructuremmedescookies :

Lesinformationstransmisessontdetypetexte :Ilestimpossibledenvoyerunestructurededonnes,telun
panierdachat,versleclient.

Lescookiessontlimitsenquantits :20cookiesmaximumparsite,300entoutdanslenavigateur.

Lescookiessontlimitsentaille :4kilooctetsdedonnesmaximum.

Deplus,leclientpeutcompltementinterdirelescookiessursonnavigateurWeb.
IlexisteunealternativeauxcookiesutilisabledanslesapplicationsWebJEE,ilsagitdessessionsHTTP.
Le principe des sessions HTTP est extrmement sduisant car les informations relatives un client sont cette foisci
stockes sur le serveur, ainsi, pour reprendre lexemple du panier dachat sur un site marchand, le contenu de ce
panierpeuttrefacilementreprsentparunestructurededonnescomplexestockesurleserveurdapplication.
Maisalors,commentleserveurfaitillacorrespondanceentrecesdonnesdesessionquilconserve,etleclientauquel
elles sont rattaches ? Grce lidentifiant de session de cet utilisateur. Chaque session HTTP est associe un
identifiantuniquegnrparleserveuretrenvoyparleserveurauclient.Lorsquunclientmetunerequteversle
serveur,cetterequtecontientlidentifiantdesession,etleserveurpeutassocierleclientsesdonnes.
Pourtransmettrecetidentifiantauclient,leserveurgnreuncookiedontlenomestjsessionid,etdontlavaleurest
lidentifiant de session quil a gnr pour ce client, le client transmet ce cookie avec chaque requte mise vers ce
serveur,jusquexpirationducookie.
Cecinersoutpaslefaitquesilenavigateurclientnacceptepaslescookies,cemcanismenefonctionnepas.Une
solutionceproblmeexiste :larcrituredURL.
LarcrituredURLconsisteincluredanschaquerequtedelutilisateur,unparamtrepermettantdetransmettre
lidentifiant de session. Pour ce faire, le serveur doit rcrire toutes les URL des pages quil transmet au client en
rponse, cette rcriture se fait par des instructions de code Java ajouter dans les pages JSP des applications, le
codedoitdonctreprvupoursupportercemcanisme.
UneURLnonrcrite :
http://localhost:8080/demo/identification
UneURLrcrite :

- 4-

ENI Editions - All rigths reserved

http://localhost:8080/demo/login;jsessionid=EA337E2DFE9465EAADC0...
LURLrcritecontientlidentifiantdesessionentantqueparamtre,lorsqueleclientcliquesurunlienquicontientce
paramtre,iltransmetautomatiquementsonidentifiantdesessionauserveur.
McanismedercrituredURL :

UnesessionHTTPexpirepartirdumomentolenavigateurWebestferm,oubienexplicitementparuneactiontel
unclicsurunlien,quiprovoque,ctserveur,ladestructiondelasession.Lasessionpeutgalementexpirertoute
seule,siaucunerequtedelapartdelutilisateurnestmisependant30minutes,cequiestlavaleurpardfautdes
spcificationsJEE.Cettevaleurpeut,bienentendu,tremodifie.
LemcanismesurlequelreposelesuividesessionHTTPpeutdonctre,soitlescookies,soitlarcrituredURL,les
spcificationsJEEprconisentdutiliserenprioritlescookiessilssontsupportsparlenavigateur,larcrituredURL
uniquement dans le cas contraire, et ce pour des raisons de performance et de scurit. En effet, chaque
transformationdURLncessiteuntravailsupplmentaireduserveur,deplus,lidentifiantdesessionapparaissanten
clairdanslabarredadressedunavigateur,ilpeutfacilementtrevuetutilisparuntiers.

ENI Editions - All rigths reserved

- 5-

LesserveursdapplicationsJEE
Les applications JEE sont ncessairement lies un environnement dexcution spcifique dans la mesure o elles
utilisentdesbibliothquesdeprogrammationparticulires.Deplus,cesapplicationsontbesoinduncertainnombrede
services qui seront rendus disponibles par cet environnement dexcution. Un serveur dapplications JEE fournit un tel
environnement.
Le march des serveurs dapplications JEE est trs riche, mais tous ces produits implmentent les mmes standards
impossparlaplateforme,desortequelesapplicationssontcompltementindpendantesduserveurutilis.
lasortiedechaquenouvelleversiondesspcificationsJEE,lesditeursdeserveursdapplicationsredoublentdefforts
pourfournirdesproduitscompatiblesaveccesnouvellesnormes.

1.Rlesdunserveurdapplications
Le rle dun serveur dapplications est de mettre en oeuvre des applications distribues, conues base de
composantsJava(Servlet,JSP,EJB)etdelesrendreaccessiblesdesclientsWeb(navigateurs)etdesapplications
dentreprise(clientslourds)critesenJava.Leserveurdoitprendreenchargelecycledeviecompletdesdiffrents
composants,etlagestiondunefiledattentepoursatisfaireauxrequtesdesclients.
De plus, pour satisfaire aux exigences des applications dentreprise, le serveur dapplications doit tre le plus
performant et le plus fiable possible. Il est donc capable de grer la disponibilit des applications en proposant un
service de gestion de la monte en charge et une solution de tolrance de panne en mettant en place des fermes
(clusters)deserveurs.
Il soccupe galement de la fourniture des diffrents services utiles aux composants et au fonctionnement des
applications :

ServiceHTTP :pourpermettrelaccsauxapplicationsviaunnavigateurWeb.

Service de nommage : les ressources exposes telles que laccessibilit aux bases de donnes, sont
enregistresavecunnom,ceservicemetenoeuvrelAPIJNDI.

Servicedegestiondestransactions :leservicetransactionnelestmisenoeuvregrceJTA.

Servicedegestiondeladisponibilitdesapplications(monteenchargeettolrancedepanne) :cenest
pas un service dfini par les spcifications JEE, mais tout serveur dapplications doit permettre la mise en
oeuvre dune solution de haute disponibilit des applications pour garantir leur accessibilit et des
performancesmaximales.

Servicedescurit :lAPIJAASpermetdegrerlauthentificationetlesdroitsdaccsauxapplications.

Service dadministration : la configuration des services, le dploiement des applications, la supervision de


lensemble des ressources doit idalement pouvoir se faire avec une interface de gestion du serveur. Ces
interfaces ont des ergonomies trs variables selon les produits, du simple fichier de configuration texte, la
consolegraphiquedadministration.

Servicedaccsauxdonnes :lesserviceslesplusutilissparlesapplicationscarilspermettentlintgration
ausystmedinformation,viaJDBCetJCAnotamment.

Servicedegestiondesmessages :lamessagerieapplicativemiseenoeuvregrceJMS.

2.Architecturedunserveurdapplications
LesapplicationsJEEsontconstituesdemodulescontenantdescomposantslogicielsdiffrents.Lecycledeviedeces
composants, et leur besoins pour fonctionner sont assez diffrents. Un serveur dapplication JEE est constitu de
plusieurs environnements dexcution, chacun tant adapt un type de composant JEE. Ces environnements
dexcutionsontappelsConteneursJEE.
UnconteneurreposesuruneinfrastructureJavaetutilisedoncunemachinevirtuelleJava.
LesconteneursdunserveurdapplicationsJEEsont :

ENI Editions - All rigths reserved

- 1-

LeconteneurWeb :ilhbergelesmodulesWebconstitusdeservletsetdeJSP.Laccsceconteneursefaitviale
protocoleHTTP.
Le conteneur EJB : il hberge les modules EJB. Laccs un conteneur EJB par un autre conteneur, ou par un
composantdapplicationsefaitenutilisantleprotocoleRMI/IIOP.
Leconteneurdapplets : lesappletsJavaembarquesdanslespagesHTMLpeuventcommuniquerenHTTPavecles
composantsWebservletetJSP.LeconteneurdappletestenfaitlenavigateurwebassociaupluginJavapermettant
dexcuterlesapplets.
Leconteneurdapplicationsclientes : ilhbergelesmodulesclientscontenantdesapplicationsclientlourdsJava.Ce
conteneur peut communiquer avec le conteneur Web et le conteneur EJB pour sinterfacer avec les composants
prsentsdanscesconteneurs.Ceconteneurdoittreinstallsurlamachineclientesurlaquellesexcutelapartiede
lapplicationquicommuniqueavecleserveur.
StructuredunserveurdapplicationJEE :

3.Lesproduitsdumarch
Les serveurs dapplications JEE peuvent tre classs en deux catgories, les implmentations compltes des
spcificationsJEE,etlesimplmentationspartielles.
Les implmentations compltes contiennent tous les types de conteneurs de composants et offrent un accs
lensembledesservicesJEE.Lesimplmentationspartiellesquantellesnefournissentquunepartiedesconteneurs
(souventunseul)etlesservicesJEEnesontpastousdisponibles.
Implmentationscompltes
BEAWebLogicServer10.0
BEAestlundesplusanciensditeursdesolutionsJEE.Sonproduit,WebLogicServer,futpendanttrslongtempsle
serveurdapplicationJEEleplusutilis,cestaujourdhuiavecleproduitdIBM,lundesproduitspharedumondeJEE.
SunJavaSystemApplicationServer9
LeproduitdelinventeurdelatechnologieJEEestconupartirduneimplmentationOpenSourcedeserveurJEE5
appeleGlassFish.LeprojetGlassFish,initiparSun,estlimplmentationderfrencedestechnologiesJEE5.Cest
vidementlepremierserveurproposeruneimplmentationlorsdelasortiedunenouvelleversiondesspcifications
JEE.
ApacheGeronimo2.0

- 2-

ENI Editions - All rigths reserved

ImplmentationOpenSourcedelafondationApache,leserveurGeronimoutiliseTomcat6commeconteneurWeb,et
OpenEJBcommeconteneurdEJB.EnplusdecesdeuxprojetsOpenSource,detrsnombreuxautresproduitsOpen
SourcesontintgrsGeronimo,commeparexemplelabasededonnesApacheDerby,ouencorelabibliothquede
WebServices,ApacheAXIS.
notergalementquIBMfournituneversionOpenSourcedunserveurdapplicationsJEE5bassurlimplmentation
ApacheGeronimo :cestWebSphereApplicationServerCommunityEdition2.0.
JBossApplicationServer5.0
Aumomentdelcrituredeceslignes,laversion5deJBossestencoreencoursdedveloppement.Limplmentation
deconteneurwebutiliseparJBossnestniplusnimoinsqueTomcat6.LasocitJBossInc.creparlinventeurdu
serveur,MarcFleury,diffusegalementleframeworkJEEHibernate,ainsiquelasolutiondeportaildentrepriseJBoss
Portal.

Implmentationspartielles
CauchoResin
IlyadeuxversionsduconteneurWebResin,laversionprofessionnelleetlaversionOpenSourcequiestdisponibleen
libretlchargement.Laversionprofessionnelleajoutenotammentdesfonctionnalitsdesupervisionetdeclustering
ncessaire dans un environnement de production, alors que la version Open Source est oriente dveloppement et
tests.
OpenEJB
OpenEJB est un conteneur EJB sous licence Apache. Lobjectif de ce projet est de fournir un conteneur pour
composantsEJBfacilementintgrableavecdautresconteneursJEE,notammentdesconteneursWeb.

4.LecasApacheTomcat6
LeserveurTomcat6delafondationApacheestleconteneurWebleplusutilissurlemarch,notammentdufaitquil
a t pendant longtemps limplmentation de rfrence des technologies servlets et JSP. De plus, Tomcat est utilis
dansdautresprojetsdeserveursdapplicationscommerciauxouOpenSource,commeApache Geronimo,ouencore
JBossApplicationServer.

a.TomcatestunmoteurdeServlet
Tomcat6estuneimplmentationpartielledeserveurdapplicationsJEEcarilnefournitpastouslesservicesdela
plateformeJEE,cenestquunconteneurWeb,ouencoremoteurdeservlets/JSP.
Dun point de vue de la plateforme de services JEE, Tomcat 6 propose une implmentation des API JDBC, JNDI,
JAAS et JavaMail, les autres services ne sont pas fournis en standard, mais peuvent tre apports par dautres
produitscomplmentaires.

ENI Editions - All rigths reserved

- 3-

Pourconclure
1.LesnouveautsdeJavaEE5
LeslecteursdjfamiliersdelaplateformeJavaEnterprisenesouhaitentpeuttresattarderquesurlesnouveauts
decetteversionimplmenteparTomcat6,danscecas,cettepartieduchapitreestpoureux.
CettedernireversiondeJEEapportedesnouveautsvraimenttrsconsquentes,cequiexpliqueenpartieleretard
prisparlesditeursdeserveursdapplicationspourfournirdesimplmentationscompatibles.Plusquunemisejour,
ilsagitdunerefontemajeuredelaplateforme.
Premire grande nouveaut, lintroduction de la programmation par annotation, ceci permet notamment de pouvoir
gnrer une grosse partie du code par le serveur dapplications au moment du dploiement, et de saffranchir des
fichiersdeconfiguration.
De ce fait, les API existant dans les versions antrieures de JEE ont d tre adaptes ce nouveau modle de
programmation,cestlecasparexempledelAPIdeServiceWebJAXRPC(JavaAPIforXMLRPC)quilaissesaplace
JAXWS(JavaAPIforXMLWebServices).
LanouvelleAPIdepersistanceJava JPA(JavaPersistenceAPI)faitsonapparitiondansJEE5ainsiquedanslaplate
formestandardJSE6.Ellefacilitegrandementlapersistancedesdonnesenbasesansavoirrecoursunframework
tiercepartie.
Du ct du dveloppement Web, certaines annotations sont utilisables dans les servlets et les JSP pour tablir des
rfrencesdesEJB,desServicesWeb,oudesressourcesduserveurdapplications.
Enfin, lAPI JavaServer Faces (JSF) est officiellement intgre dans la plateforme. JSF permet de faciliter le
dveloppementdapplicationsWebenutilisantlemodledeconceptionMVC.

2.Lefutur
Aumomentdelcrituredeceslignes,SunMicrosystemsprvoitdjdesortirunenouvelleversiondelaplateforme
JavaEE(JEE6),etcemoinsde2ansaprslasortieofficielledeJEE5,alorsquecertainsditeursnonttoujourspas
livrdeversioncompatibleJEE5deleurproduit !
Uneversiondelaplateformestandardestgalementenprvision,maislesamliorationsdelafuturplateformeJSE7
nedevraitprincipalementconcernerquelesapplicationsdetypeclientlourd.

ENI Editions - All rigths reserved

- 1-

LesdiffrentesversionsdeTomcat
Comme indiqu dans le premier chapitre de cet ouvrage, il existe plusieurs versions du serveur Apache Tomcat. Il est
important de bien choisir la version de son serveur en fonction des applications qui y seront installes. En effet, les
versionsmajeuresdeTomcatcorrespondenttoutesuneimplmentationderfrencedestechnologiesServletetJSP.
VoiciunrappelsurlesrelationsentrelesversionsdestechnologiesJEEetlesversionsdeTomcat :
SpcificationsJavaEE

APIServlet

APIJSP

ApacheTomcat

J2EE1.2

2.2

1.1

3.x

J2EE1.3

2.3

1.2

4.x

J2EE1.4

2.4

2.0

5.x

JEE5

2.5

2.1

6.x

Ainsi,uneapplicationdveloppeenutilisantlAPIServlet2.5parexemple,devrancessairementtreinstalledansun
serveurTomcatenversion6.

ENI Editions - All rigths reserved

- 1-

DistributiondeTomcat
LeserveurTomcat6estdisponibleenlibretlchargementsursonsiteInternet,ladressehttp://tomcat.apache.org.
Plusieursformatsdefichierssontpropossautlchargement.Dabord,Tomcat6esttlchargeablesoitsousformede
codesourcequilfaudracompiler,oubiensousformedebinairesJava.Laversioncodesourceesttrsintressantepour
pouvoirtudierlefonctionnementduserveur.
LesversionsbinairesdeTomcat6sontenfaitconstituesdeclassesJava,etsontdoncportablesentrelessystmes
dexploitationetlesplatesformesmatrielles.Ilexistegnralement3formatsdarchivesbinaires :

Les archives au format ZIP : elles peuvent facilement tre dcompresses sur une majorit de systmes, le
rpertoireainsicrcontientuneversionduserveurdirectementoprationnelleaprsconfiguration.Ceformat
est,pourbeaucoupdadministrateursTomcat,leplusintressant,carilpermetunedsinstallationrapideencas
dechangementdeversionduserveur.Deplus,laconfigurationdusystmenestpasmodifie,linstallationest
transparente !

LesarchivesauformatTAR.GZ :cestleformatdarchivelepluscommunsurlessystmesUNIX.Commepourles
archivesZIP,unesimpledcompressionaveclacommandeTAR,permetdobteniruneversionoprationnelledu
serveur.

Les installeurs Windows : au format EXE, ils permettent une installation partir dun assistant qui ralise
galementlaconfiguration.CestlamthodelaplussimplepourinstallerTomcat6surlesystmedeMicrosoft.

ENI Editions - All rigths reserved

- 1-

InstallationdelaplateformeJava
CommenimportequellogicielcritaveclelangageJava,TomcatncessiteuneMachineVirtuelleJavapourfonctionner.
CommenouslavonsvuauchapitrePrambule,unJREetunJDKfournissentuneMachineVirtuelleJava.Danslecasdun
serveur JEE comme Tomcat, il nest plus impratif dutiliser un JDK qui fournit un compilateur Java ncessaire pour le
traitement des JSP. En effet, depuis sa version 5.5, Tomcat intgre un compilateur Java issu de lenvironnement de
dveloppementOpenSourceEclipse :leEclipseJDTJavaCompiler,leserveurpeutdoncsecontenterdunJRE.
PlusieursfournisseursdeMachineVirtuelleJavaexistentsurlemarch,SunMicrosystems,inventeurdelatechnologie,
fournit des implmentations pour Windows, Linux et Solaris. Dautres socits, comme par exemple IBM, fournissent
dautresimplmentationspourunegrandevaritdeplatesformes.
LeJDKdeSunesttlchargeableladresse :http://java.sun.com/jse

1.Quelleversionchoisir ?
IlyaunetrsfortedpendancedelaplateformeJEE5avecJava5,ilestdoncimpratifdinstallerunserveurTomcat
6surunJDKouJRE5.0minimum.Uneversionplusrcente(JDKouJRE6.0parexemple)peuttreutilise.

2.Installationetconfiguration
a.SousMicrosoftWindows
Dans le cas de Windows, les JDK et JRE sont fournis sous forme dinstalleur et leur utilisation ne pose pas de
problmesparticuliers,ilestpossibledechoisirlechemindinstallation,ainsiquelescomposantsinstaller,pourne
pasinstallerlesexemplesetlecodesourcedeclassesJava,parexemple.
InstallationduJDK :

lissue de linstallation, il faut configurer le systme en dfinissant des variables denvironnement : la variable
JAVA_HOMEquipointesurlerpertoiredinstallationduJDKouduJRE,etlavariablePATHquidoitfairerfrence
ausousrpertoirebindeJAVA_HOME.

OuvrirlePanneaudeconfigurationetchoisirSystme.

SlectionnerlongletAvanc.

ENI Editions - All rigths reserved

- 1-

CliquersurleboutonVariablesdenvironnement.

- 2-

AjouterlavariableJAVA_HOMEenluidonnantcommevaleur,lerpertoiredinstallationdeJava,danslalistedes
variablessystme.
ENI Editions - All rigths reserved

Localiser la variable PATH dans les variables systme, et ajouter le sousrpertoirebin deJAVA_HOME la fin
desvaleurs,enlasparantdeladernireparunpointvirgule.

Danslasuitedelouvrage,lenomJAVA_HOMEestutilispourfairerfrenceaurpertoiredinstallationdeJava.
Testerlinstallationetlaconfiguration :

OuvriruneinvitedecommandeMSDOS.

Saisirlacommandejava-version,cettecommandedoitrenvoyerunmessageaffichantlaversiondeJava.

Saisirlacommandejavac -help,cettecommandedoitafficherlaideducompilateurJava.

b.SousLinux

ENI Editions - All rigths reserved

- 3-

LesystmeLinuxdisposeduntrsgrandnombrededistributionsproposantdesformatsdepaquetsinstallablestrs
diffrents,cesdistributionsproposentsouventunpaquetpermettantdinstallerlaplateformeJavasursonsystme.
Lesoutilsdinstallationdelogicielssupplmentairesvarientdunedistributionuneautre,laprocduredinstallation
peut,ounon,creretconfigurerlesvariablesdenvironnementJAVA_HOMEetPATH.Silavrificationdelinstallation
naboutitpas,ilseraalorsncessairedeconfigurerlesvariablesdenvironnementPATHetJAVA_HOMEcommecela
estexpliquplusloin.
Dans le cas o la distribution Linux choisie ne propose pas en standard de plateforme Java, Sun Microsystems
proposegalementuneversionLinuxduJDKetduJREenlibretlchargementsursonsite :http://java.sun.com,
ilssontdisponiblessousformedunscriptquidcompresselerpertoiredinstallationdanslerpertoirecourant.
LeJDKpourLinuxestfournisousformedunfichierbinaire,aprssontlchargement,ilfautpositionnerlesdroits
dexcutionsurlefichier :
[root@localhost ~]# chmod +x jdk-1_5_0_14-linux-i586.bin
PourinstallerleJDK,ilsuffitsimplementdexcuterlefichier,pourceci,ilfautdabordsepositionnerdanslerpertoire
danslequelleJDKdoittreinstall,engnral,danslerpertoire/usr,puislefichierpeuttreexcut :
[root@localhost ~]# cd /usr
[root@localhost usr]# /root/jdk-1_5_0_14-linux-i586.bin
Aprsacceptationdelalicence,ladcompressioncommence.
Tout comme pour une installation sous Windows, les tapes suivantes consistent crer et valoriser les variables
denvironnement PATH et JAVA_HOME. Sous Linux, ces variables se dfinissent dans le fichier /etc/profile pour
quelles soient utilisables par tous les utilisateurs du systme, sinon, il est possible de les crer dans le fichier
$HOME/.bash_profile,$HOME reprsente le rpertoire personnel dun utilisateur, dans ce cas, ces variables sont
uniquementvisiblespourcetutilisateur.
lafindelunoulautredecesfichiers,ilfautajouterleslignessuivantes :
PATH=$PATH:<rpertoire dinstallation du JDK>/bin
JAVA_HOME=<rpertoire dinstallation du JDK>
export PATH JAVA_HOME
Puisrechargerlaconfiguration,surlalignedecommandesaisir :
[root@localhost ~]# source /etc/profile
ou
[root@localhost ~]# source $HOME/.bash_profile
Testerlinstallationetlaconfiguration :

- 4-

Ouvrirunterminal.

Saisirlacommandejava -version,cettecommandedoitrenvoyerunmessageaffichantlaversiondeJava.

Saisirlacommandejavac -help,cettecommandedoitafficherlaidedelacommande.

ENI Editions - All rigths reserved

ENI Editions - All rigths reserved

- 5-

InstallationduserveurTomcat6
Le serveur Tomcat 6 utilise un certain nombre de ports TCP/IP pour fonctionner. Avant de procder linstallation du
serveur,ilfautsassurerquecesportsnesontpasutiliss :

8080 :PortduconnecteurHTTP

8005 :Portdarrtduserveur

8009 :PortduconnecteurJK

Lacommandenetstat -anpermetdedresserlalistedesportsencoutesurunsystmeWindowsouLinux.

Danslecasocesportssontutiliss,ilfaudramodifierleursvaleursavantdepouvoirdmarrerleserveurenlocalisant
lesvaleurspardfautdanslefichierCATALINA_HOME/conf/server.xml.

1.SousMicrosoftWindows
Linstallation de Tomcat 6 sous Windows dpend du type darchive tlcharg. Voici la procdure avec larchive au
formatZIP,puisaveclepackageWindows :linstalleurauformatEXE.

a.InstallationpartirdelarchiveZIP
PourinstallerTomcat6partirdelarchiveZIP,ilsuffitsimplementdedcompressercettearchivedanslerpertoire
desonchoix,puisdecrerlavariabledenvironnementCATALINA_HOMEaveclerpertoiredinstallationdeTomcat
6commevaleur.
Dans la suite de louvrage, le nom CATALINA_HOME est utilis pour faire rfrence au rpertoire dinstallation du
serveur.
Le contrle du serveur se fait par les scripts startup.bat et shutdown.bat prsents dans le rpertoire
CATALINA_HOME/bin,pourrespectivementdmarreretarrterleserveur.
Testerlinstallation :

OuvrirlePostedetravailetnaviguerjusquCATALINA_HOME/bin.

Doublecliquersurstartup.bat,unefentreMSDOSaveclesmessagesdedmarrageduserveurapparat.

OuvrirunnavigateurWebetsaisirlURLhttp://localhost:8080,lapagedaccueilduserveurapparat.

PagedaccueilduserveurTomcat :
ENI Editions - All rigths reserved

- 1-

b.InstallationpartirdupackageWindows
LaversionWindowsdeTomcat6estgalementdisponiblesousformeduninstalleurquiguidelutilisateurpendant
lesdiffrentesphasesdelinstallationduserveur.Deplus,cemodedinstallationpermetdecrerautomatiquement
des entres dans le menu Dmarrer de Windows, ainsi quun service Windows pour Tomcat ce qui permet un
dmarragedeceluiciaulancementdusystme.
Voicilesoptionsdinstallationdisponibles :

ServicepermetdecrerunserviceWindowspourTomcat6,

StartMenuItempermetdecrerlesraccourcisdanslemenuDmarrer.

Linstalleur propose galement de crer un utilisateur pour pouvoir accder aux applications dadministration et de
gestion des applications, respectivement prsentes aux chapitres Administration du serveur et Dploiement et
gestiondesapplications.
lissue de linstallation, il faut galement crer la variable denvironnement CATALINA_HOME (voir la partie
prcdentepourlaprocdure).
Cette version particulire, package pour Windows, propose un accs rapide au contrle et la configuration du
serveur,grceuneicne,situedanslazonedenotificationdeWindows.
Testerlinstallation :

DmarrerleserveurenfaisantunclicdroitsurlicneApacheTomcatdelazonedenotificationdeWindowseten
choisissantStartservice.

OuvrirunnavigateurWeb,etsaisirlURLhttp://localhost:8080:lapagedaccueilduserveurapparat.

c.CrationdunserviceWindowspourTomcat6
UndesavantagesdelinstallationpartirdupackageWindows,estlapossibilitdecrerunservicepourWindows
grcelassistantdinstallation.Cependant,uneinstallationdeTomcat6partirdelarchiveZIPpermetgalement
decrerunservice.

- 2-

ENI Editions - All rigths reserved

Les distributions Tomcat 6 intgrent un script pour la cration et la suppression de ce service, cest le fichier
service.batdurpertoireCATALINA_HOME/bin.

OuvriruneinvitedecommandeMSDOS.

ChangerderpertoireverslerpertoireCATALINA_HOME/bin.

Saisirlacommandeservice.bat install.

LeserviceestinstallsouslenompardfautTomcat6.
Pourutiliserunautrenompourleservice,ilfautspcifiercenomenargumentdelacommande.
Pour le dsinstaller, il suffit de remplacer loption installpar remove dans la commande cidessus, en spcifiant le
nomduserviceenargumentsicenestpaslavaleurpardfaut(Tomcat6).

2.SousLinux
ToutcommepourleJDK,leserveurTomcat6peuttreproposlinstallationsurlesCDRomsdunedistributionLinux.
En fonction de format de paquet utilis par cette distribution, la commande pour en raliser linstallation varie. Une
installationdeTomcat6sousLinuxpeutgalementsefairepartirdesarchivesTAR.GZdisponiblesautlchargement
surlesitedeTomcat.

a.InstallationpartirdespaquetsRPM
LeformatdepaquetRPM(RedHatPackageManager)estleformatdepaquetslogicielsprtslemploileplusutilis
parlessystmesLinux,unautreformat,leformatDEBestgalementutilis,notammentparladistributionDebian,
doiltiresonnom.LespaquetsRPMsinstallentpartirdunterminalenutilisantlacommanderpm,oubienpartir
doutilsdinstallationgraphiques,variablesselonladistribution.
InstallationdupaquetRPMpartirdelalignedecommande :
[root@localhost ~]# rpm -ivh apache-tomcat-6.0.13.i386.rpm
Une fois linstallation termine, il faut comme sous Windows, configurer la variable denvironnement
CATALINA_HOME.
SousLinux,cetteoprationsefaitenrenseignantlefichier/etc/profileou$HOME/.bash_profilequicontientdj
les variables denvironnement ncessaires la plateforme Java. Cette variable fait rfrence au rpertoire
dinstallationdeTomat.
Lignesajouterlafindelunoulautredesfichiers :
CATALINA_HOME=<rpertoire dinstallation de Tomcat>
export CATALINA_HOME
Puisrechargerlaconfiguration,surlalignedecommandesaisir :
[root@localhost ~]# source /etc/profile
ou
[root@localhost ~]# source $HOME/.bash_profile
Lecontrleduserveursefaitparlesscriptsstartup.shetshutdown.shdurpertoireCATALINA_HOME/bin.
Pourvrifierlinstallation :

OuvriruneinvitedecommandesousCATALINA_HOME/bin.

Saisir./startup.sh.

OuvrirunnavigateurWebetsaisirlURLhttp://localhost:8080:lapagedaccueilduserveurapparat.

ENI Editions - All rigths reserved

- 3-

b.Installationpartirdunearchive
InstallerTomcat6partirdunearchiveestaussisimplesousLinuxquesousWindows,larchiveproposeunserveur
prt lemploi. Pour dcompresser larchive, il suffit de se positionner au pralable dans le rpertoire dinstallation
des logiciels, en gnral /usr, puis de lancer la dcompression. Les archives Tomcat 6 pour les systmes UNIX et
Linuxsontauformattar.gzetutilisentlacommandetarpourtredcompresses.
Voicilacommandeutiliser :
[root@localhost usr]# tar xvzf apache-tomcat-6.0.13.tar.gz
Lacommandecreunrpertoirecontenantlarborescenceduserveur.
Unefoisleserveurinstall,ilfautcreretrenseignerlavariabledenvironnementCATALINA_HOMEdanslefichier
commepourlinstallationpartirdupaquetRPM.
Pourvrifierlinstallation :

OuvriruneinvitedecommandesousCATALINA_HOME/bin.

Saisir./startup.sh.

OuvrirunnavigateurWeb,etsaisirlURLhttp://localhost:8080:lapagedaccueilduserveurapparat.

c.DmarrerTomcat6lamoragedusystme
Sous Linux, plusieurs moyens permettent de configurer Tomcat 6 pour quil dmarre lamorage du systme, la
mthodelaplusutiliseconsistecrerunscriptShellstockdanslesousrpertoireinit.d/durpertoire/etc,et
lactiver.VoicilaprocdurepourunedistributionRedHatouFedoraCore.
LescriptdedmarragepourTomcat6 :
#! /bin/sh
# Script de dmarrage pour Tomcat 6
#
# chkconfig: 2345 90 10

- 4-

ENI Editions - All rigths reserved

# description: Tomcat est un conteneur Web JEE


# processname: tomcat6
export CATALINA_HOME=/usr/apache-tomcat-6.0.13
export JAVA_HOME=/usr/jdk1.5.0_14
case "$1" in
start)
# Dmarrage
echo "Dmarrage de Tomcat 6."
$CATALINA_HOME/bin/startup.sh >/dev/null 2>&1
;;
stop)
# Arrt
echo "Arrt de Tomcat 6."
$CATALINA_HOME/bin/shutdown.sh >/dev/null 2>&1
;;
restart)
# Re-dmarrage
echo "Re-dmarrage de Tomcat 6."
$CATALINA_HOME/bin/startup.sh >/dev/null 2>&1
sleep 10
$CATALINA_HOME/bin/shutdown.sh >/dev/null 2>&1
;;
*)
# Usage
echo "Usage: $0 start|stop|restart"
;;
esac
Unefoislescriptcrit,ilfautlenregistrersous/etc/init.d,parexemple"Tomcat"(/etc/init.d/tomcat6),puis,ilest
ncessairedelerendreexcutable,aveclacommandesuivante :
[root@localhost ~]# chmod 755 /etc/init.d/tomcat6
Enfin,activerlescriptpourundmarragelamoragedusystme :
[root@localhost ~]# chkconfig --add tomcat6
Voicilersultat enappelantcescriptsurlalignedecommande:
[root@localhost ~]# /etc/init.d/tomcat6 start
Dmarrage de Tomcat 6
[root@localhost ~]# /etc/init.d/tomcat6 stop
Arrt de Tomcat 6

ertaines distributions Linux proposent la commande service pour utiliser les scripts de dmarrage
C
automatique.Parexemple,service tomcat6 startetservice tomcat6 stop.

ENI Editions - All rigths reserved

- 5-

CouplerTomcatavecunserveurWeb
1.PourquoiutiliserunserveurWebfrontal ?
Dans une architecture dentreprise, il est souvent recommand dutiliser un serveur Web en frontal dun serveur
dapplication.CesrecommandationssappliquentgalementdanslecasdelutilisationdunconteneurWebJEEcomme
Tomcat6,etce,pourlesraisonssuivantes :

Scurit : le schma suivant, prsentant lintgration de ces deux lments dans une architecture
dentreprise, illustre bien lavantage de cette cohabitation, le serveur Web sert de bastion pour les
requtesentrantesdanslinfrastructure,etisoleleconteneurWebdelInternet.LeconteneurWebsetrouve
galementauplusprsdesdonnesquildoitmanipuler.

Performances : le moteur HTTP de Tomcat 6 reste quand mme plus lent que le moteur HTTP dun serveur
Web,ilnestquunmoyendinvoquerlescomposantsWebJEEdynamiques(Servlet,JSP).Positionnainsidans
linfrastructure,leserveurWebalaresponsabilitdeservirlecontenustatique(PagesHTML,images,applets
Java,)dunsiteouduneapplicationauxclients,alorsqueTomcat6sertlecontenudynamiqueetsoccupe
delintgrationaveclexistantdusystmedinformation.

Configurabilit :unserveurWebcommeleserveurApacheparexemple,disposedeplusgrandespossibilits
deconfiguration(dunpointdevuedelacommunicationHTTP)queTomcat 6.

a.Intgrationdansunearchitecturedentreprise
Dansunearchitecturedentreprise,ilestassezcourantdetrouverlaconfigurationsuivante :

Un premier mur parefeu protge les serveurs accessibles sur Internet, et un deuxime assure la protection du
rseauprivdelentreprise.LeserveurWebtrouvesaplacedanslaDMZ,permettantainsiunaccsauxutilisateurs,
et redirige les requtes destination des applications Tomcat 6. Le ou les serveurs Tomcat 6 peuvent se trouver
dans le rseau priv, nayant aucun accs direct de lextrieur. Ainsi, la protection du serveur Tomcat 6 et de ses
applicationsestmaximale.

2.LesdiffrentsconnecteurspourlintgrationavecunserveurWeb
LintgrationduserveurTomcat6avecunserveurWebsefaitautraversdunconnecteurconfigurdansTomcat,et
duneextensionajouteauserveurWeb.
LeconnecteurTomcat6estuneclasseJavasupportantunprotocolerseauparticulier.LextensionduserveurWeb,
quantelle,estsouventunelibrairiedynamiquechargeparleserveurWeblorsdesondmarrage.
ne librairie dynamique est un fichier portant lextension DLL sur les platesformes Windows, et lextensionSO
U
surlessystmesUNIX.

a.JServ
Sortien1999,Tomcat3utiliselemoduleJServ,quiestdjunmoteurdeservletexistantauseindelafondation
Apache, pour sintgrer avec le serveur Web de la fondation. JServ utilise le protocole AJP (Apache JServ Protocol)
dans ses deux premires versions, la version 1.1 (AJP11) une version texte, et la version 1.2 (AJP12) une version
ENI Editions - All rigths reserved

- 1-

binaire. En utilisant ce connecteur existant pour le serveur Apache, les dveloppeurs de Tomcat implmentent le
supportduprotocoleAJPdansleurserveurpermettantuneintgrationrapideentrelesdeuxproduits.Dunpointde
vue dApache, JServ est fourni sous forme dun module chargeable dynamiquement dans le serveur Web :
mod_jserv.
Cependant,ceconnecteurprsentequelquesinconvnientsmajeurs :ilnestdisponiblequesousUNIX,etilestbien
incapabledefaireladiffrenceentreleprotocoleHTTP,etsaversionscurise :HTTPS.

b.Webapp
InitialementdvelopppourTomcat4.0,leconnecteurWebapputiliseleprotocoleWARPpourconnecterTomcatavec
unserveurWeb.CeconnecteurutiliseunelibrairiespcifiquemiseaupointpourledveloppementduserveurWeb
Apacheenversion2 :lAPR(ApachePortableRuntime).DuctApache,lemoduledynamiquemod_webappnestlui
aussiutilisablequesousUNIX.
Ce connecteur, trs utilis avec Tomcat 4.x tant donn sa trssimple configuration, ne fonctionne plus depuis la
version5,lesupportduprotocoleWARPayanttsupprimducodedeTomcat.

c.JK
LeconnecteurJKestuneadaptationduconnecteurJServutilisantgalementleprotocoleAJPmaisdanssanouvelle
version1.3(AJP13).Enplusdtreplusperformant,cettenouvelleversionpermetdoffrir unsupport:

demultiplessystmesdexploitation,

deplusieursserveursWeb,puisquececonnecteurexisteaujourdhuipourApache,LotusDomino,Microsoft
IIS,Netscapeserver,

duprotocoleHTTPS.

Ceconnecteurestaujourdhuiceluiquiestprconis.

d.JK2
LeconnecteurJK2estunevolutionduconnecteurJKquiutilisegalementleprotocoleAJP,maisgalementdautres
protocolesdecommunication.Ceconnecteurnestplusmaintenudepuislemoisdenovembre2004causedupeu
dintrt port ce connecteur, la fois par les dveloppeurs, mais aussi par les utilisateurs, ceci tant li sa
complexitdeconfiguration.

e.Synthse
RcapitulatifdesdiffrentsconnecteursetdesmodulesdisponiblesselonlesserveursWeb :
ConnecteurJServ :

Protocole :AJP11etAJP12

ModuleApache HTTPServer:mod_jserv

ConnecteurWebapp:

Protocole :WARP

ModuleApache HTTPServer:mod_webapp

ConnecteurJK :

- 2-

Protocole :AJP13

ModuleApache HTTPServer:mod_jk

ENI Editions - All rigths reserved

ModuleMicrosoftIIS :isapi_redirect

ModuleNetscape Server:nsapi_redirect

ModuleLotusDominoWebServer :tomcat_redirect

ConnecteurJK2 :

Protocole :AJP13

ModuleApache HTTPServer:mod_jk2

ModuleMicrosoftIIS :isapi_redirector2

ModuleNetscape Server:nsapi_redirector2

ModuleLotusDominoWebServer :dsapi_redirector2

3.UtiliserleserveurWebApache
GrceauconnecteurJK,ilestassezsimpledeconfigurerleserveurTomcat6avecunserveurWebApacheentantque
serveurfrontal.
VoiciunschmaexplicatifdesdiffrentsfluxchangsentreleclientnavigateurWeb,leserveurApache,etTomcat6 :

LaconfigurationdeTomcat6avecunserveurWebutiliselanotiondetravailleur(worker),untravailleuridentifieune
instancedeserveurTomcat6,danscertainscasilpeutyavoirplusieursinstancesdeserveursTomcat6,identifies
alorsparplusieurstravailleurs.UntravailleurestcaractrisparlassociationdunnomdhteouadresseIP,etdun
numrodeport.
LorsdelutilisationconjointedeTomcat6avecApache,ilexistedeuxmodesdefonctionnement :

UnpluginpourleserveurApache :cemodedefonctionnementutiliseleprocessusduserveurTomcatcomme
unpluginpourleserveurApache,lemodulemod_jkagitcommeunrouteurderequtesversunouplusieurs
processusdeserveurTomcat6.

Dans le processus de serveur Web : le serveur Web dmarre la Machine Virtuelle Java dans son propre
processus,etexcuteleserveurTomcat6,lesdeuxserveursutilisentalorslemmeespacemmoire.Cette
associationunpeuspcialepermetdesatisfairelesrequtesutilisateursplusrapidement.

Selonlesconfigurationsetlesbesoins,lestypesdetravailleurssuivantspeuventtreutiliss :
ajp13 :ilreprsenteuneinstancedeTomcatencoursdefonctionnement,etestutilisdanslecasoleprocessusde
TomcatestunpluginpourleserveurWeb,commedcritprcdemment.
lb :cetypedetravailleurestutilispourconfigurerlarpartitiondechargeentreleserveurWebetplusieursserveurs
Tomcat,ilnesatisfaitpasderequteutilisateur,etgresimplementlemcanismederpartition.
status :ilpermetdobtenirdesstatistiquessurlarpartitiondechargeentreplusieursserveurs,desinformationstels
quelenombrederequtessatisfaitesparunserveur,etltatdechacundecesserveurs,sontdisponiblesautravers

ENI Editions - All rigths reserved

- 3-

dunepageWeb.
jni :danslecasoleserveurTomcatestdmarrdansleprocessusduserveurWeb,cestcetypedetravailleurqui
estutilis.

a.ConfigurerTomcatetApacheavecmod_jk
LeserveurWebApacheestdepuisdjdenombreusesannesleserveurWebleplusemploysurInternet,mais
galementenentreprisepourlessitesIntranet.LeserveurApacheestdisponibleenstandardsurlaquasitotalit
des systmes UNIX, mais il existe galement des versions pour dautres systmes dexploitation, notamment
Windows.
Apacheutilisedesmodulesdextensionschargeablesquiajoutentdesfonctionnalitscellesdjprsentesdansle
serveur en standard, il existe par exemple des modules pour la prise en charge du langage PHP ou bien pour le
supportduprotocoleHTTPS.LesmodulesdApachesontfournissousformedefichiersdextensionSO.

b.InstalleretconfigurerApache
LesversionsduserveurApachesontnombreuses,ladernireendateestlaversion2.2,elleoffreentreautres,des
performancesaccruesparrapportlaversionprcdente,etgalementunmeilleursupportdessystmesnonUNIX
commeWindowsparexemple.
IlexisteplusieursmthodespourinstallerleserveurApache.Dabord,lesdistributionssontfourniessoitsousforme
debinaires,soitsousformedecodesource,lesbinairessontsouventprivilgisdanslecasdune installation sur
plateformeWindows.SousLinux,ilestextrmementcourantdavoircompilerunlogicielavantdelinstaller,dansle
casdunserveurApache,lesgainsentermesdeperformancessontloindtrengligeables.
Les archives de binaires ou de code source pour le serveur Apache sont disponibles ladresse :
http://httpd.apache.org.
InstallationsousWindowspartirdunedistributionbinaire
Linstallation sous Windows se fait simplement en lanant lexcutable tlcharg, par exemple : apache_2.2.6
win32x86openssl0.9.8e.msietensuivantlesinstructionsdelassistantdinstallation.
InstallationsousLinuxpartirducodesource
LacompilationdApachesousLinuxncessiteunebonneconnaissancepralabledusystme,deplus,lesystmedoit
disposer des outils de dveloppement, notamment le compilateur C (GCC), le compilateur C++ (G++), ainsi que
lutilitairemake.
VoiciunexempledescommandesutiliserpourcompileretinstallerApache,ellesdoiventtresaisiessouslidentit
deladministrateurdusystme(root) :
Lapremiretapeestladcompressiondessourcestlcharges :
tar xvzf httpd-2.2.6.tar.gz
Ladcompressioncreunrpertoirequiportelenomdelarchive.Lescommandesquisuiventdoiventtrepasses
depuiscerpertoire.
Ensuite,laconfiguration :
./configure --prefix=/usr/apache2 --enable-mods-shared=all
Loption--prefixpermetdespcifierlerpertoiredinstallationutiliser,--enable-mods-sharedprciselesmodules
chargeablecompilerdansleserveur.
Unefoislaconfigurationralise,ilfautcompilerleserveur :
make
Enfin,linstallationvacrerlerpertoirespcifipendantlaconfiguration,etycopierlesdiffrentsfichiersrsultant
delacompilation :
make install
lissuedecesoprations,lacompilationetlinstallationduserveurApachesonttermines.

- 4-

ENI Editions - All rigths reserved

I lexistegalementdespaquetsbinairescompilspourLinux,auformatRPMouauformatDEB,permettantune
installationplusrapide.

Testdelinstallation
Une fois linstallation termine, il faut diter le fichier de configuration httpd.conf prsent dans le sousrpertoire
conf/delinstallationdApache,etajouterladirectiveServerNamequidoitfairerfrenceaunomduserveuroubien
aunomdusiteWeb.
Exemple:
ServerName

monserveurweb

Dmarrerleserveurpourtesterlinstallation.
SousWindows,linstalleurcredesraccourcisdanslemenuDmarrerdeWindows.
SousLinux,ilfaututiliserlacommandesuivantedepuislesousrpertoirebin/durpertoiredinstallationdApache :
./apachectl start
Unefoisdmarr,lapagedaccueilduserveurestdisponiblelURL:http://localhost

our plus dinformations sur linstallation et la configuration du serveur Web Apache , consulter louvrage
P
APACHE(version2)Installation,administrationetscurisationdanslacollectionRessourcesInformatiquesaux
EditionsENI.

c.InstalleretconfigurerTomcat6
Linstallation de Tomcat 6 pour raliser cette intgration avec un serveur Web ne requiert aucune configuration
particulire,etpeutdonctreralisecommeindiquprcdemmentdanscechapitre.
Pour pouvoir utiliser mod_jk, il faut un connecteur compatible configur dans le fichier server.xml de linstance de
serveur Tomcat 6 intgrer avec Apache. Cette configuration existe par dfaut, et propose un connecteur qui
fonctionnesurleport8009.
Extraitdufichierserver.xml :
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" redirectPort="8443" protocol="AJP/1.3" />
Le numro de port peut bien entendu tre modifi dans le cas par exemple ou plusieurs instances de serveurs
Tomcat6fonctionnentsurlammemachinephysique.

d.Lemodulemod_jk

ENI Editions - All rigths reserved

- 5-

LextensiondApachesupportantleconnecteurJKestlemodulemod_jk.CemoduledApacheest,unefoisencore,
fourni soit sous forme de binaires, soit sous forme de code source. Larchive de code source contient le code des
modules pour tous les serveurs Web, il est donc possible, partir de la mme archive, de construire le module
mod_jk pour tous les serveurs Web supports. La version binaire quant elle, est livre sous forme de fichier
unique,ilfaudraalorschoisirceluiquicorrespondauserveurWebutilisenprenantgardelaversiondecedernier.
Par exemple, la dernire version de mod_jk ce jour est la version 1.2.25, sur le site de tlchargement de la
versionbinairepourWindows,voicilesfichiersproposs pourApache:

mod_jkapache1.3.27.so

mod_jkapache2.0.29.so

mod_jkapache2.2.4.so

mod_jkesttoujoursdisponiblepourlesversions1.3et2.0dApache,icilaversionminimumdApache2.2utiliser
est la version 2.2.4, en cas de version antrieur, il faudra opter pour une version plus ancienne de mod_jk.Ainsi,
mod_jkestdisponibleladresse:http://www.apache.org/dist/tomcatconnectors/jk/
InstallationsousLinuxpartirducodesource
Larchivedecodesourcedemod_jkestdisponibledanslerpertoiresourcedusitedetlchargementdumodule.
La compilation de ce module sous Linux est une opration relativement aise, elle requiert l encore, les outils de
dveloppement :
Dabord,ilfautdcompresserlessources :
tar xvzf tomcat-connectors-1.2.25-src.tar.gz
Ensuite,ilfautsepositionnerdanslerpertoirecrparladcompression,puisdanslesousrpertoirejk/native/,
etlancerlacommandedeconfiguration :
./configure --with-apxs=/usr/apache2/bin/apxs
Loption --with-apxs permet de prciser lemplacement de la commande apxs (dans lexemple cidessous,
sous/usr/apache2/bin)quiestutilispourconstruirelesmodulesdApache.
Ilfautensuitelancerlacompilation :
make
Etenfin,installerlemodule :
make install
Cette dernire commande copie le fichier mod_jk.so issu de la compilation dans le sousrpertoire modules/ du
rpertoiredinstallationdApache.
Installationpartirdesbinaires
Une installation partir des binaires consiste simplement copier le fichier mod_jk.so dans le sousrpertoire
modules/durpertoiredinstallationdApache.
ConfigurerApachepourutilisermod_jk
Pour configurer mod_jk avec Apache, deux fichiers sont ncessaires. Dabord, il faut modifier le fichier de
configuration dApache : httpd.conf. Ce fichier se trouve dans le sousrpertoire conf/ du rpertoire dinstallation
dApache.Ensuiteilfautcrerlefichierworkers.propertiesetlecomplter.
Lapremireoprationraliserestlechargementdumodulemod_jkdansleserveurApache,grceladirectivede
configurationLoadModule,ilfautdonclocaliserlesdirectivesLoadModuleexistantdanslefichierhttpd.conf,etajouter
lalignesuivante :
LoadModule

jk_module

modules/mod_jk.so

Ensuite,uncertainnombrededirectivesprisesenchargeparcemoduledoiventtreajoutes,parexemplelafin
dufichier :

- 6-

ENI Editions - All rigths reserved

JkWorkersFile
JkLogFile
JkLogLevel

conf/workers.properties
logs/mod_jk.log
info

LadirectiveJkWorkersFilepermetdespcifierlemplacementdufichierdeconfigurationdumodule,iciilestpositionn
dans le sousrpertoire conf/ de linstallationdApache. JkLogFile prcise lemplacement dun fichier journal pour le
module,etJkLogLevel,letypedemessagesenregistrsdanscefichier.
LesderniresdirectivessontcellesquivontpermettrelaccsauxapplicationsTomcat6depuisleserveurApache :
JkMount
JkMount

/docs/*
/docs

worker1
worker1

CettedirectivepermetlaccsladocumentationdeTomcat6vialeserveurApache,cetteapplicationestinstalle
souslecontexte/docs,chaqueapplicationpotentiellementaccessiblevialeserveurApachedoittredclareavec
unedirectiveJkMount.
VoiciunrsumdesdirectivesApacheutilisablesavecmod_jk :
JkWorkersFile
Lenometlemplacement du fichier de configuration du module, nommworkers.properties par convention, il peut
treexprimavecuncheminrelatiflinstallationduserveurApache,oubienavecuncheminabsolu.
JkWorkerProperty
Permetdcrirelaconfigurationdemod_jkdirectementdanslefichierdeconfigurationdApache,pluttquedecrer
le fichier workers.properties. Cette directive nest disponible qu partir de la version 1.2.7 du module. Chaque
lment de configuration du module doit tre prfix par cette directive. La syntaxe de configuration mod_jk est
dtailleplusloindanscettepartie.
Exemple :
JkWorkerProperty
JkWorkerProperty
JkWorkerProperty
JkWorkerProperty

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.port=8009
worker.worker1.host=localhost

JkLogFile
Lenometlemplacementdunfichierjournalpourmod_jk.ilpeuttreexprimavecuncheminrelatiflinstallation
duserveurApache,oubienavecuncheminabsolu.
JkLogLevel
Leniveaudejournalisationdumodule.Lesvaleurspossiblessonttrace,debug,info,warneterror.Sileniveaude
journalisationestparexemplepositionninfo,alorstouslesmessagesdetypeerror,warnetinfosontaffichs.
JkMount
LassociationduncontextedapplicationWebTomcat6avecuntravailleur.Cettedirectivepermetdespcifierquelles
sont les applications Tomcat accessibles au travers dApache, et donc permettre la redirection des requtes
utilisateursdestinationdescesapplications.
Lasyntaxeest :JkMount <URL> <nom du travailleur>
JkUnMount
ExactementlinversedeladirectiveJkMount.Ellepermetdenepasredirigerlesrequtesutilisateursdestinationde
ressourcesparticuliresduneapplicationTomcat.CettedirectiveestprioritaireparrapportladirectiveJkMountet
nestdisponiblequapartirdelaversion1.2.7demod_jk.
Lasyntaxeest :JkUnMount <URL> <nom du travailleur>
Exemple :
# Lapplication au chemin de contexte /docs est
# accessible aux utilisateurs
JkMount
/docs/*
worker1
JkMount
/docs
worker1
# Ne pas rediriger les requtes destination des
# ressources de type images GIF
*JkUnMount
/docs/*.gif
worker1
CecipermetdefaireensortequelesressourcesstatiquessoientserviesparApache,etlesressourcesdynamiques
parTomcat.
ENI Editions - All rigths reserved

- 7-

JkAutoAlias
Raliser un alias du rpertoire de Tomcat 6 contenant les applications, sur le rpertoire des donnes Apache. Ceci
permetuntraitementdesressourcesstatiquesparApacheetdesressourcesdynamiquesparTomcat6,enutilisant
un seul et unique rpertoire de publication partag par les deux serveurs. Elle doit sutiliser avec les directives
JkMountetJkUnMount.
Exemple :
# Lespace de publication dApache devient le
# rpertoire webapps/ de Tomcat 6
JkAutoAlias C:\apache-tomcat-6.0.13\webapps
# Lapplication au chemin de contexte /docs est
# accessible aux utilisateurs
JkMount
/docs/*
worker1
JkMount
/docs
worker1
# Ne pas rediriger les requtes destination des
# ressources de type images GIF
JkUnMount /docs/*.gif
worker1
JkLogStampFormat
Leformatdeladatecritdanslefichierjournaldumodule.Lasyntaxedeceformatestbasesurlamodledela
fonctionCstrftime().Lexpressionduformatdedatesefaitenutilisantlessquencesdecontrlesuivantes :

- 8-

%a

Lenomabrgdujourdelasemaine,enfonctionde
lalocalisationencours.

%A

Lenomcompletdujourdelasemaine,enfonctionde
lalocalisationencours.

%b

Lenomabrgdumois,enfonctiondelalocalisation
encours.

%B

Lenomcompletdumois,enfonctiondelalocalisation
encours.

%d

Lejourdumoissousformedenombredcimal(entre
01et31).

%e

Lejourdumoissousformedenombredcimal(entre
1et31).

%F

quivalentde%Y%m%d.

%H

Lheure,sur24heures,sousformedenombre
dcimal(entre00et23).

%I

Lheure,sur12heures,sousformedenombre
dcimal(entre01et12).

%j

Lenumrodujourdanslanne(entre001et366).

%k

Lheure(sur24heures)sousformedenombre
dcimal(intervalle023).

%l

Lheure(sur12heures)sousformedenombre
dcimal(intervalle112).

%m

Lenumrodumois(entre01et12).

%M

Laminute,sousformedenombredcimal(0059).

%n

Uncaractresautdeligne.

ENI Editions - All rigths reserved

%p

LunedesdeuxchanesAMouPMenfonctionde
lheure.MidiesttraitcommePMetMinuitcomme
AM.

%P

Comme%pmaisenminuscule:amoupm.

%R

Lheureenformat24heures(%H:%M).

%s

Lenombredesecondescoulesdepuisle1er
Janvier197000:00:00UTC.

%S

Laseconde,sousformedenombredcimal.(0061).

%t

Uncaractredetabulation.

%T

Lheureennotation24heures(%H:%M:%S).

%u

Lejourdelasemainesousformedcimal,de1
(Lundi)7.

%W

Lenumrodelasemainedanslanne,sousforme
denombredcimal(0053).

%w

Lenumrodujourdelasemaine,sousforme
dcimale(06),Dimanche=0.

%y

Lanne,sousformedenombredcimal,surdeux
chiffres.

%Y

Lanne,sousformedenombredcimal,surquatre
chiffres.

%z

LefuseauhorairesousformededcalageGMT.

%Z

Lenomoulabrviationdufuseauhoraire.

%%

Uncaractre%.

Lavaleurpardfautest :JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "


JkExtractSSL
Permet mod_jk de transmettre les informations SSL vers le serveur Tomcat. La valeur par dfaut est on. Cette
directivepermetauxapplicationsTomcatdavoiraccsauxinformationsdeconfigurationSSL.
JkHTTPSIndicator
LenomdelavariableApachequicontientlindicationSSL.
JkCERTSIndicator
LenomdelavariableApachequicontientlecertificatSSLclient.
JkSESSIONIndicator
LenomdelavariableApachequicontientlidentifiantdesessionSSL.
JkKEYSIZEIndicator
LenomdelavariableApachequicontientlatailledelacldecryptageSSLutilise.
JkRequestLogFormat
Format des lignes crites dans le fichier journal du module. La dfinition du format utilise les caractres spciaux
suivants :

%b

Lenombredoctetstransmis(sanslesenttes
HTTP).

ENI Editions - All rigths reserved

- 9-

%H

Leprotocoleutilis(HTTPouHTTPS).

%m

LamthodeHTTPutilisepourlarequte(GET,POST,
).

%p

Lenumrodeportduserveurquiareularequte.

%q

Lalistedesparamtrestransmisaveclarequte
(prfixavec ?),oubienunechanevidesiaucun
paramtrenattransmis.

%r

Lapremirelignedelarequte.

%s

LecodedtatHTTPenrponselarequte.

%T

Letempsdetraitementdelarequte,en
microsecondes.

%U

LURLdemande(sanslesventuelsparamtres).

%v

Lenomcanoniqueduserveurquiareularequte.

%V

Lenomduserveurquiareularequte.Sila
directivedeconfigurationApacheUseCanonicalName
eston,lenomcanonique duserveurestaffich,
sinoncestlenomdhtefourniparleclientquiest
affich.

%w

LenomdutravailleurTomcatquiatraitlarequte.

Exemple :
JkRequestLogFormat "%w %V %T"
Une fois le fichier de configuration dApache modifi, il faut ensuite crer le fichier de configuration du module en
respectantlemplacementindiquparladirectiveJkWorkersFiledufichierhttpd.conf.Cefichierpermetdeconfigurer
la connectivit avec le serveur Tomcat 6, les travailleurs utiliss dans la configuration Apache sont dans ce fichier,
associsuneinstancedeserveurTomcat6.
Dans lexemple de fichier httpd.conf prcdent, le travailleur worker1 est associ lapplication /docs, il sagit
maintenantdassocierworker1aunserveurTomcat6.
UnfichierpropertiesestunformatdefichierdeconfigurationtrsutilisaveclestechnologiesJava,ilestcompos
dunensembledepairescl/valeur.Lesclsdufichierworkers.propertiesontlasyntaxesuivante :
worker.<nom_travailleur>.<directive>=<valeur>
Lefichierworkers.properties :
# Liste des travailleurs
worker.list=worker1
# Protocole de worker1
worker.worker1.type=ajp13
# Nom dhte pour worker1
worker.worker1.host=10.1.1.2
# Port du connecteur JK pour worker1
worker.worker1.port=8009
Lacl worker.listpermetdespcifierlalistedestravailleursTomcat6sparspardesvirgules,pourchacundes
travailleurs,ilfautensuiteprciserleprotocoleutilispourlacommunicationavecTomcat,lenomdhteouadresse
IPduserveurTomcat,ainsiquelenumrodeportduconnecteurJK(8009pardfaut).
Voiciunrsumdesclsdeconfigurationdufichierworkers.properties:
worker.list
UnelistedetravailleursTomcat6sparpardesvirgulespourlemodule.
Valeurpardfaut:ajp13
- 10 -

ENI Editions - All rigths reserved

Les lments suivants sont les directives utiliser pour chacun des travailleurs, conformment la syntaxe
worker.<nom travailleur>.<directive>=<valeur> :
type
Le type du travailleur Tomcat. La valeur peut tre ajp13, jni, lb ou status. Cette valeur conditionne les autres
directivesapplicablescetravailleur.
Valeurpardfaut:ajp13
host
LenomdhteouadresseIPduserveurTomcat6contacterpourcetravailleur,linstancedeserveurTomcatdoit
possderunconnecteurJKcorrectementconfigur.
Valeurpardfaut:localhost
port
LenumrodeportduconnecteurJKdelinstancedeserveurTomcat6contacter.
Valeurpardfaut:8009
socket_timeout
UnevaleurdetempsdexpirationlorsdelacommunicationentreApacheetTomcat6,sileserveurTomcatnerpond
pasdansledlaiindiqu,mod_jkgnreuneerreuretressaie.Lavaleur0corresponduneattenteinfinie.
Valeurpardfaut:0
retries
LenombredetentativedeconnexionaveclinstancedeserveurTomcat6encasdenonrponsedecedernier.
Valeurpardfaut:3
socket_keepalive
Cettedirectivedoitavoirunevaleursuprieure0siunparefeuestpositionnentreApacheetleserveurTomcat6.
Ellepermetdviterquelefirewallcoupelesconnectionsinactiveendemandantausystmedexploitationdenvoyer
lemessageKEEP_ALIVEsurlesconnectionsinactives.
Valeurpardfaut:0
recycle_timeout
LenombredesecondesaudelduquelleserveurWebcoupeuneconnexionAJPencasdinactivit.Cettedirective
permetdeconserverdesconnexionsouvertespourtrerutilisessansavoirbesoindenrecrerdenouvelles.Une
valeurgale300estunebonnemoyenne.
Valeurpardfaut:0
cachesize
LenombredeconnexionsAJPmaintenuesencache.Cettedirectivepossdeunevaleurpardfautquipositionnele
nombredeprocesseursderequtesconfigurdansApache2vialadirectiveThreadPerChilddu fichierhttpd.conf.
PourleserveurMicrosoftIIS,lavaleurpardfautest10,pourtouslesautresserveurslavaleurdoittrespcifie
explicitement,oubienvaut1.
cache_timeout
Cettedirectivedoittreutiliseaveccachesizepourspcifiercombiendetempsuneconnexiondoittremaintenue
dans le cache avant dtre ferme par mod_jk, pour rduire le nombre de processeurs de requtes actifs sur le
serveurTomcat.
Valeurpardfaut:0
lbfactor
Lefacteurdechargeduntravailleurdanslecasolarpartitiondechargeestmiseen uvreavecmod_jk.Cette
valeur permet de dterminer quel pourcentage de requtes linstance de Tomcat associe ce travailleur, sera
amentraiter.
Valeurpardfaut:1
activation
La valeurdisabled permet de spcifier quune instance de serveur Tomcat 6 ne sera sollicite que si une instance
principalenerpondpas.
Valeurpardfaut:enabled
ENI Editions - All rigths reserved

- 11 -

redirect
PermetdespcifierlenomduneinstancedeserveurTomcat6desecours,sicetteinstancenerpondpas,linstance
desecoursdoittreparamtreaveclattributactivationdisabledpourneservirquencasdencessit.
Testerlaconfiguration
Unefoiscesdeuxfichierscomplts,unredmarrageduserveurApacheestncessaire.
Pour tester la configuration donne en exemple cidessus, lURL http://<nom du serveur Apache>/docs/ doit
afficher la page daccueil de lapplication Tomcat 6 installe sous le chemin /docs, utilise dans la configuration
dexemplecidessus.
PagedaccueildelapplicationdedocumentationTomcat6 :

Rsolutiondesproblmes
Encasdeproblmes,lesfichiersjournauxdApacheetdemod_jkdoiventdonnerdesinformationssurlesraisonsde
ces dysfonctionnements. Il faut galement vrifier que les directives de configuration du serveur Apache sont
correctement crites, et respectent la distinction minuscule/majuscule, de mme pour les directives du fichier
workers.properties.

4.UtiliserleserveurWebMicrosoftIIS
Les connecteurs JK et JK2 de Tomcat permettent lutilisation dautresserveursWebquApache avec Tomcat. Dans le
casduserveurWebdeMicrosoft,lesrequtesutilisateursentrantessurleserveurWebsontredirigesversTomcat
parunmoduledextensionISAPI(InternetServerAPI).ISAPIestunenormededveloppementdemodulesadditionnels
pourleserveurWebMicrosoftIIS(InternetInformationServer).

a.ConfigurerTomcatetIISavecleredirecteurJK
DanslecasduserveurWebMicrosoftIIS,lemoduledextensionpermettantunecommunicationavecTomcat6,est
unfiltreISAPIfournisousformedunfichierDLLWindowsnommisapi_redirect.dll.ToutcommelemoduleApache
mod_jk,leredirecteurJKestdisponiblesousformedunbinaireprcompil,oubiensousformedecodesource,bien
quelenvironnementdedveloppementncessairelacompilationnesoitpasnativementinstallsurlessystmes
Windows.
Ce filtre fonctionne avec les versions 4, 5, et 6 du serveur IIS, et est librement tlchargeable ladresse
http://www.apache.org/dist/tomcatconnectors/jk/binaries/win32

- 12 -

ENI Editions - All rigths reserved

b.ConfigurerTomcat6pourleredirecteurJK
Pour pouvoir utiliser le redirecteur JK du serveur IIS, il faut un connecteur compatible configur dans le fichier
server.xmldelinstancedeserveurTomcat6intgreravecIIS.Cetteconfigurationexistepardfautetproposeun
connecteurquifonctionnesurleport8009.
Extraitdufichierserver.xml :
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" redirectPort="8443" protocol="AJP/1.3" />

c.InstalleretconfigurerleredirecteurJK
LaconfigurationduredirecteurJKpourMicrosoftIISncessitetroisfichiers :

isapi_redirect.dll :cestlefiltreISAPIajouterauserveurWebIIS.

workers.properties : le fichier de configuration du redirecteur JK, ce fichier possde le mme format et la


mmesyntaxequelefichierdumodulemod_jkpourleserveurApache.

uriworkermap.properties : cest le fichier qui permet de spcifier quelles sont les applications Tomcat 6
accessiblesvialeserveurIIS.

Pour la configuration du redirecteur JK, il est coutumier de crer une arborescence de rpertoire pour stocker les
diffrentsfichiers(configuration,fichiersjournaux,).
Exempledarborescence :

Contenudesdiffrentsrpertoires :
bin :lefichierDLLduredirecteurJK :isapi_redirect.dll
conf :lesfichiersdeconfiguration :workers.propertieseturiworkermap.properties
logs :lefichierdejournalisationdesvnementsduredirecteurJK :jk_redirector.log,parexemple.
Installationetconfigurationduredirecteur
La premire tape consiste copier le fichier DLL du redirecteur JK dans le rpertoire bin de larborescence cre
prcdemment.Ensuite,ilfautajouterdesentresdeconfigurationdanslabasederegistredeWindows,grce
loutilregedit.

CliquersurlemenuDmarrerdeWindows,etchoisirExcuter

Saisirlacommanderegedit,etcliquersurOK.LoutildditiondelabasederegistredeWindowssouvre.

Crer larborescence de cls de registre suivante : HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software


Foundation\Jakarta Isapi Redirector\1.0, en crant toutes les cls ncessaires. Pour crer une cl, il suffit de
faireunclicdroitsurlaclsetrouvantauniveausuprieur,etchoisirNouvellecl

Une fois larborescence cre, slectionner la cl1.0, et dans la partie gauche de loutil ddition de la base de
registre,ajouterlesvaleursdechanessuivantes :

Nomdelachane

Valeur

extension_uri

/jakarta/isapi_redirect.dll

ENI Editions - All rigths reserved

- 13 -

log_file

C:\iis_redirector\logs\jk_redirector.log

log_level

info

worker_file

C:\iis_redirector\conf\workers.properties

worker_mount_file

C:\iis_redirector\conf\uriworkermap.properties

ourajouterunevaleurdetypechane,faireunclicdroitdanslapartiegauchedelditeuretchoisirNouveau
P
Valeurchane.

Laconfigurationobtenuedoitressemblerceci:

Fermerloutildditiondelabasederegistre.

Unefoiscesentresdebasederegistrecres,ilfautajouterlefiltreISAPIlaconfigurationduserveurWebIIS.
PourcelailfautlancerlaconsoledadministrationduserveurWebenchoisissantdanslePanneaudeconfiguration
deWindowsOutilsdadministrationGestionnairedesservicesInternet.
ConsoledadministrationdesservicesInternetpourIIS5 :

DanslinterfacedelaconsoledadministrationIIS,voicilestapesraliser:

- 14 -

ENI Editions - All rigths reserved

Faire un clic droit sur le site Web pour lequel il est ncessaire de rajouter le filtre ISAPI, et choisir Nouveau
RpertoireVirtuel.Lassistantdecrationdunrpertoirevirtuelapparat.

Donnerlenomjakartalaliasdurpertoirevirtuel.

Dans ltape suivante, slectionner le rpertoire qui contient le fichier DLL du redirecteur JK, pour lexemple :
C:\iis_redirector\bin

ENI Editions - All rigths reserved

- 15 -

Dansladerniretape,ajouterledroitExcuterauxautorisationsaccorder.

SpcificitsIISversion6 :tapesdeconfigurationsupplmentaires
La console dadministration de IIS 6 a une interface diffrente, de plus, la configuration ncessite une tape
supplmentaire.
ConsoledadministrationdesservicesInternetpourIIS6 :

- 16 -

ENI Editions - All rigths reserved


Voiciltapedeconfiguration:

FaireunclicdroitsurledossierExtension du service Web dans larborescencedelaconsoledadministrationet


choisirAjouterunenouvelleextensiondeserviceWeb

Donner un nom lextension, par exemple Tomcat, et ajouter le fichier DLL du redirecteur JK dans la liste des
fichiersrequis.CocherlacaseDfinirlestatutdelextensionAutorisepourautoriserlextension.

crirelesfichiersdeconfiguration
La dernire tape de cette configuration est lcriture des fichiers workers.properties pour configurer laccs
Tomcat,eturiworkermap.propertiespourdfinirlesapplicationsTomcataccessibles.
Lefichierworkers.propertiesutilisparleredirecteurJKdeIISpossdeexactementlammesyntaxequelefichier
pourlemoduleApachemod_jk(voirlersumdesdirectivesdeconfigurationdanslapartieCouplerTomcatavecun
serveurWeb3ddecechapitre).
Lefichierworkers.properties :
# Liste des travailleurs
worker.list=worker1
ENI Editions - All rigths reserved

- 17 -

# Protocole de worker1
worker.worker1.type=ajp13
# Nom dhte pour worker1
worker.worker1.host=10.1.1.2
# Port du connecteur JK pour worker1
worker.worker1.port=8009
Le fichier uriworkermap.properties quant lui possde une syntaxe beaucoup plus simple, base sur le modle
suivant :
<chemin de contexte de lapplication>=<travailleur Tomcat>
Lefichieruriworkermap.properties :
/docs/*=worker1
/docs=worker1
TouteslesURLentrantesdansleserveurWebIIScontenantunerfrenceauchemindelapplication/docsseront
alorstraitesparletravailleurworker1lieuneinstancedeserveurTomcat6danslefichierworkers.properties.
Testerlinstallation
Une fois cette configuration complte, un redmarrage du serveur IIS est ncessaire, en utilisant la console
dadministrationIIS.
Pourtesterlaconfigurationdonneenexemplecidessus,lURLhttp://<nomduserveurIIS>/docs/doitafficherla
page daccueil de lapplication Tomcat 6 installe sous le chemin/docs, utilise dans la configuration dexemple ci
dessus.
PagedaccueildelapplicationdedocumentationTomcat6 :

Rsolutiondesproblmes
Aprs avoir revrifi la configuration point par point, ainsi que la syntaxe des fichiers workers.properties et
uriworkermap.properties, il faut consulter le fichier journal du redirecteur JK, puis en dernier recours, celui du
serveur
IIS
prsent
dans
C:\WINDOWS\system32\LogFiles\W3SVC1
ou
C:\WINNT\system32
\LogFiles\W3SVC1.Ladernirelignedecefichierdoitcontenirunechanedecaractresdutype :
GET /jakarta/isapi_redirect.dll - xyz
O xyz reprsente un code dtat HTTP. Si cette ligne napparat pas alors cest que la configuration nest pas
- 18 -

ENI Editions - All rigths reserved

correcte,ilfautvrifierlesentresdanslabasederegistreetvrifiersilefiltreISAPIestcorrectementchargdansle
serveur(ilyauneflchevertepointantverslehautcotdesonnom).
SilecodedtatHTTPvaut :

404 :lURLsaisieestcorrecte.

500 :incohrenceentrelaconfigurationdelabasederegistre,etlaconfigurationderpertoirevirtuelIIS.

403 :lerpertoirevirtuelnedisposepasdesdroitsdexcution.

401 :lutilisateuraveclequelsexcutelademandenapaslesdroitssuffisantspouragirsurlefichierDLLdu
redirecteur,oulerpertoirequilecontient.IlfautdonnerlesdroitsdelectureetdexcutionsurlefichierDLL
cetutilisateur.

5.ConfigurerlesserveursWebpourservirlesressourcesstatiques
UnedesraisonsquiconduisentlutilisationdunserveurWebenfrontaldunserveurdapplicationsestdeconfigurer
ce serveur Web de sorte quil rponde aux requtes des clients faisant rfrence aux ressources statiques de
lapplication,telleslespagesHTMLetlesimages.Lintrtrsideprincipalementdanslacclrationdeschanges.
Dans cette configuration, il videmment ncessaire que les ressources statiques soient accessibles au serveur Web,
danslecasolesdeuxserveurssontinstallssurunmmeserveurphysique,laconfigurationestassezsimpleetles
deuxserveurspartagentlemmerpertoiredepublicationdesdonnes.
Dans le cas contraire, linstallation dune application ncessitera la fois de dployer lapplication dans le serveur
Tomcat6,etdecopierlesressourcesstatiquesdansunrpertoiredepublicationsurleserveurWeb.
ConfigurationavecApacheetmod_jk
La configuration avec Apache et le module mod_jk fait intervenir la directive JkUnMount du fichier de configuration
dApacheprsenteprcdemmentdanscechapitre.Eneffet,ellepermetdespcifierlesressourcesquinedoivent
pas tre traites par un travailleur Tomcat 6. De plus, il faudra que ces donnes statiques soient accessibles au
serveurApache.
Exemple :
JkMount
/demo/*
worker1
JkMount
/demo
worker1
# Ne pas rediriger les requte destination des
# ressources de type images GIF et pages HTML
JkUnMount /demo/*.gif
worker1
JkUnMount /demo/*.html
worker1
Si Apache et Tomcat 6 sont installs sur la mme machine physique, la directive JkAutoAlias permettant aux deux
serveursdepartagerunmmerpertoiredepublication,doitpointersurlerpertoiredesapplicationsdeTomcat6.
Silesdeuxserveurssont,aucontraire,surdesmachinesphysiquesdiffrentes,alorsJkAutoAliasdoitpointersurun
rpertoiredanslequellesressourcesstatiquesdesapplicationsTomcat6onttcopies.
Exemple :
JkAutoAlias C:\apache-tomcat-6.0.13\webapps

ConfigurationavecIISetleredirecteurJK
LaconfigurationavecleserveurIISsefaitgrceaufichieruriworkermap.properties.Cefichierpermetdedfinirles
URLtraiterparletravailleurTomcat6associ.Ennefaisantrfrenceprcismentquauxressourcesdynamiques,
lesressourcesstatiquesserontserviesparIIS.
Sitouslescheminsdaccsauxservletssontprfixsavecparexemple/servlet,laconfigurationestsimple.
Exemple:
/demo/*.jsp=worker1
/demo/servlet/*
Parcontre,siceprfixenexistepas,ilseraalorsncessairederfrencerchaqueservletprsentedanslapplication
ENI Editions - All rigths reserved

- 19 -

avecsonURLdaccscomplte.
Exemple:
/demo/*.jsp=worker1
/demo/enregistrement
/demo/identification
/demo/validation
De plus, il faut galement ajouter un nouveau rpertoire virtuel IIS pointant sur les donnes statiques des
applications.Silesdeuxserveurssontinstallssurlammemachinephysiquealorslerpertoirevirtueldevrapointer
surlerpertoiredelapplicationdansCATALINA_HOME/webapps,sinonildevrapointersurunrpertoiredanslequel
lesdonnesdecetteapplicationauronttcopies.
ConsoledegestiondesservicesInternet :
Ici,lerpertoirevirtuelpointedirectementsurlerpertoiredelapplicationdanslarborescencedeTomcat6 lesdeux
serveurssontsurlammemachine.

noter galement que les pages daccueil par dfaut des sites et applications sont diffrents sous Tomcat 6
(index.html,index.htm)etsousIIS(Default.html,Default.htm),ilfautdoncpenserajouterlespagesindex.htmlet
index.htmcommepagedaccueilpardfautpourcerpertoirevirtuel.
PourajoutercespagesdepuislaconsoledegestiondesservicesInternet,choisirlerpertoirevirtuelprcdemment
cretfaireclicdroitProprits,slectionnerlongletDocuments,etcliquersurleboutonAjouter
Fentredepropritsdurpertoirevirtuelaveclesdeuxpagesdaccueilajoutes :

- 20 -

ENI Editions - All rigths reserved

ENI Editions - All rigths reserved

- 21 -

ArchitectureduserveurTomcat6
LacomprhensiondelarchitectureinterneduserveurTomcat6estunprrequisindispensablepourbienenmatriser
ladministration et la configuration. Les oprations de configuration et de personnalisation du serveur requirent
dintervenirsurchacundeslmentsinternesauserveur.
Bienquelaconfigurationpardfautpuisseconvenirungrandnombredutilisations,lesenvironnementsdeproduction
trssollicitspeuventncessiterunreparamtrageduserveurpourgarantirunequalitdeservicemaximum.

1.LesdiffrentscomposantsdeTomcat6
Larchitecture de Tomcat 6 consiste en un ensemble de composants ddis au traitement et la satisfaction des
demandesmisesparlesclientsvialeprotocoleHTTP,dutraitementetanalysedelarequte,jusqulexcutiondela
ressourcedemandeparleclient.
Les composants principaux de Tomcat 6 sont appelsconteneurs tout simplement parce quils contiennent dautres
composantsplusspcifiques,ilnefautpasconfondrecettenotiondeconteneur,quisontdescomposantslogicielsde
Tomcat6,avecleconteneurWebquireprsenteleserveurTomcat6danssonintgralit.
LeschmaquisuitfaitapparatreleslmentsfondamentauxdeTomcat6,lesconteneurssonttousreprsents,ce
sontleslments :

Server

Service

Engine

Host

Context

Cettehirarchiedeconteneursetdecomposantsestreprsentedunpointdevuedelaconfiguration,parlefichier
server.xmlquiestleprincipalfichierdeconfigurationdeTomcat6.LutilisationduformatXMLpourcefichierpermetde
biencomprendrelimbricationdesconteneurslesunsdanslesautres,ainsiquelaposition,et,decefait,limpact,des
autreslmentsduserveur.
Ainsi, le schma prcdent met en vidence les conteneurs Context, qui reprsentent les applications, dans un
conteneurHost,dunpointdevuedelorganisationdufichierserver.xml,lesconteneursContextapparatrontcomme

ENI Editions - All rigths reserved

- 1-

lmentsXMLenfantsduconteneurHost.
Exemple :
<Host >
<Context >
</Context>
</Host>

2.Arborescencedelinstallation
LarborescencedinstallationdunserveurTomcat6seprsentecommececi :

Parmicesrpertoiresprsentssurleschmaprcdent,certainsontuncontenurservaufonctionnementinterne
duserveuretilvaudramieuxviterdenmodifierlemplacementoummelecontenu,dautres,parcontre,sonttrs
facilement reconfigurables et les ressources qui sy trouvent peuvent tre modifies, de mme quil est parfois
ncessaire dy ajouter des ressources, par exemple, des bibliothques Java ncessaires au bon fonctionnement des
applications.
Le rpertoire bin/ contient tous les scripts et fichiers indispensables au dmarrage de Tomcat 6, les scripts de
contrles sont tous fournis en deux exemplaires : lun portant lextension .bat, et lautre lextension .sh : en effet,
Tomcat 6 tant crit en Java, donc multiplateforme, les fichiers .bat servent au contrle du serveur sous Windows,
alorsquelesfichiers.shsontlaversionUnix/Linuxdesmmesscripts.
Le rpertoire lib/ est le rpertoire des bibliothques Java de Tomcat 6, son contenu ainsi que celui de ses sous
rpertoires est accessible toutes les applications Web dployes dans le serveur, mais galement au serveur lui
mme.LesbibliothquesJavasontdesensemblesdeclassespackagesdansdesfichiers.jar.
DanslecasoplusieursapplicationsWebonttoutesbesoindunemmebibliothque,ilpeuttrejudicieuxdecopier
cettebibliothquedanscerpertoirepluttquedavoirlafourniravecchacunedecesapplications.Lerpertoirelib/
peut galement contenir les diffrents pilotes daccs aux bases de donnes utiliss par les applications et les
ressourcesTomcat6.
Lerpertoire conf/ contient la configuration de Tomcat 6, notamment les 4 fichiers importants que sontserver.xml,
tomcatusers.xml, web.xml et catalina.policy. De plus, conf/ peut galement contenir le sousrpertoire
Catalina/localhost qui fait rfrence au conteneur Host (appel localhost par dfaut), luimme dans le conteneur
Engine (appel Catalina par dfaut), ce rpertoire peut contenir des fichiers de configuration pour les applications
installes.
Lerpertoirelogs/contientlesfichiersjournauxduserveurTomcat6.
Lerpertoiretemp/peuttreutiliscommerpertoiretemporaireparlesapplications.
Lerpertoirewebapps/estlerpertoirepardfautpourlinstallationdesapplications.Ilcontientuncertainnombre
dapplicationsdexemples,ainsiquelapplicationtomcatdocsquifournitladocumentationcomplteduserveur,etqui

- 2-

ENI Editions - All rigths reserved

estbiensrtrsprcieuse.
Lerpertoirework/estutilisparTomcat6pourletraitementdespagesJSPetleurtransformationenclassesJava:
tous les fichiers gnrs pendant cette transformation sont stocks dans ce rpertoire. Chaque application possde
son propre sous rpertoire pour ces fichiers temporaires. Larborescence utilise est du type
work/<engine>/<host>/<context>, o<engine>, <host> et <context> reprsentent respectivement le nom des
conteneursEngine,HostetContextdanslequelcetteapplicationestinstalle.

ENI Editions - All rigths reserved

- 3-

Lefichierserver.xml
LeprincipalfichierdeconfigurationdeTomcat6sappelleserver.xml,etsetrouvedanslerpertoire CATALINA_HOME/conf.Comme
son nom lindique,lecontenudecefichierdeconfigurationscritenXML,cependant,ilna pas toutes les caractristiques dunfichier
XML,notammentparcequilnepossdepasdedclarationXML(<?xml version="1.0" ?>),maisgalementparcequilnestliaucun
fichierpourlavalidation,niDTD,nischmaXML.
Cependant, lors de son dmarrage, Tomcat 6 vrifie la syntaxe des lments dclars dans ce fichier, aussi, il est important de bien
respecterlasyntaxedcritureetladistinctionmajuscule/minuscule.
Enfait,leserreurscommisesdanscefichierpeuventavoirdeuxconsquences :

le serveur ne dmarre pas. Un lment est correctement positionn dans le fichier mais sa syntaxe nest pas correcte, il faut
vrifierlenomdellmentetdesesattributs

leserveurdmarre,maislanouvelleconfigurationnapastapplique.Llmentnestpeuttrepaspositionnaubonendroit
danslefichier,oubienlesvaleursaveclequelilestconfigurnesontpascorrectes.

Lefichierserver.xml,fournipardfautavectoutenouvelleinstallationdeserveurTomcat6,esttrsbiencommentetdesexemplesde
configurationsontmmedonnsencommentaire,desortequilsuffitsimplementdedcommentercesexemplespouractiverteloutel
autre lment de configuration. Il est assez recommand de faire une copie de sauvegarde de ce fichier immdiatement aprs une
installationfonctionnelleduserveur,maisaussiavantchaquemodificationducontenudecefichier.

1.Leslmentsdeconfiguration
Chacundeslmentsdeconfigurationdufichierserver.xmlestliuneclasseJavaparticulireduserveurTomcat6.Certainsdeces
lmentssontindispensables,etdautresnon,lobjectifdecettepartieestdeprsenterprcismentchacundeceslments.
Limbricationdeslmentsdeconfigurationlesunsauxautresesttoutefoisquelquechosedassezcomplexecomprendreaupremier
abord,voicidoncunearborescencersumantlorganisationdufichierserver.xml,ainsiquetouslesemplacementspossiblesdechaque
lmentdeconfiguration.Certainslments :

doiventtreprsents(1)

doiventtreprsentsaumoinsunefois(1n)

peuventtreprsents,etcedemultiplesfois(0n)

sontfacultatifs(01).

Arborescencedelaconfiguration :

ENI Editions - All rigths reserved

- 1-


ParmicettemultitudedlmentsXMLdeconfiguration,ilestunattributquirevienttrssouvent,cestlattributclassName.
LattributclassNamepermetdefairerfrencelaclasseJavadeTomcat6quiimplmentelafonctionnalitdellment.Danscertains
cas,ilnestpasncessairedemodifierlavaleurpardfaut,maispourcertainslments,ilyaplusieursvaleurspossibles,chacunede
cespossibilitsmodifiantconsidrablementlecomportementdellment.

a.Llment<Server>
Llment<Server>estllmentracinedufichierserver.xml,ilreprsentelinstancedeserveurTomcat6danssaglobalit.
IlpossdedeuxattributspermettantdecontrlerlarrtduserveurTomcat, port etshutdown. Lors du lancement dunecommande
darrtdeTomcat6,lachanedecaractresspcifieparshutdownestenvoyesurleportTCP/IPspcifiparport,leportdcoute
utilisestleport8005pardfaut,etlachanedecaractresenvoyeestSHUTDOWN.

- 2-

ENI Editions - All rigths reserved

Ilesttrsfaciledenvisagerquunepersonnemalintentionnepuisseseconnecteraveclacommandetelnetsurceportetenvoiecet
ordre.Heureusement,leserveurTomcat6nautorisesurceportquelesconnexionsquiproviennentdelamachinelocale.Cependant,
unutilisateurayantrussiouvrirunesessiondistantesurleserveuretquinepeutpasexcuterlesscriptsdarrtetdedmarrage
duserveur,pourratoutfaitutilisercemcanisme.
Ilestdoncconseilldemodifiercesvaleurspardfautendonnantcommevaleurpourshutdown,unechaneplusdifficiledeviner,
cettemodificationestabsolumentsansconsquencepourlebonfonctionnementduserveur,maisengarantitunpeupluslascurit.

b.Llment<Service>
LanotiondeserviceTomcat6regroupeleslmentspermettantlaconnectivitauserveur(<Executor>et<Connector>),ainsiquele
moteur dexcution de Tomcat 6 (<Engine>). Llment <Service> permet donc dassocier un ou plusieurs connecteurs TCP/IP
configurspourtraiterlesrequtesentrantes,avecunmoteurdexcutiondeservlet.
Ilpeutyavoirplusieursdclarationsdlments<Service>dansunlment<Server>,danscesdclarations,leslments<Executor>
doiventtoustredclarsavantleslments<Connector>,etleslments<Connector>doiventtoustredclarsavant<Engine>.
Le seul attribut obligatoire de cet lment de configuration est name, il permet didentifier le service, notamment dans les fichiers
journauxduserveur,lenompardfautestCatalina.Danslecasoplusieursservicessontconfigurs,ilsdoiventchacunavoirun
nomdistinct.

c.Llment<Executor>
Pourtraiterlesrequtesclientsentrantes,lesconnecteursTomcat6utilisentlesthreadsquisontdessousprocessuslintrieurde
lamachinevirtuelleJavadeTomcat.Chaquethreadestddiautraitementdunerequteclientetlenvoidesarponse,unefois
quilatermin,ilpeuttrerutilis.
Pourviterlescrationsetsuppressionsinutilesdecesthreads,Tomcat6utiliseunmcanismeappelpooldethreads.Unpoolde
threadsnestniplusnimoinsquunensembledecesthreadsdisponiblestoutmomentpoursatisfaireunerequteclient.
Pluttquededtruireunthreadaprsquilasatisfaitunerequteclient,ilestrecycl.Unpooldethreadsestdimensionnavecune
valeur initiale, qui permet de dfinir combien de threads doivent tre crs dans le pool au dmarrage du serveur, et un nombre
maximum, qui est le nombre maximum de threads. Ces deux paramtres sont respectivement configurs partir des attributs
minSpareThreadsetmaxThreads dellment<Executor>.
Llment<Executor>possdegalementlattributnamePrefix quipermetdespcifierunprfixedenommagedechacundesthreads
dupool,chaquethreadseranommavecnamePrefix+numro.
Un pool de threads dfini par llment <Executor> peut tre utilis par plusieurs connecteurs Tomcat 6 (dfinis avec llment
<Connector>),lelienentreun<Executor>etun<Connector>estfaitpartirdunomdonnllment<Executor>vialattributname.
Enfin, lorsque des threads restent inactifs trop longtemps dans le pool, le pool dtruit ces threads inutiles tout en conservant un
nombre de threads toujours gal lattribut minSpareThreads, le dlai dinactivit dun thread (exprim en millisecondes) au bout
duquelilserasupprimestdfiniparlattributmaxIdleTime.
Lesvaleurspardfautdecesattributssontrsumesdansletableaucidessous :
maxThreads

minSpareThreads
maxIdleTime

200
25
60000

d.Llment<Connector>
Llmentdeconfiguration <Connector>permetdimplmenterlacouchedetransportdesrequtesclientsverslemoteurdeservlet
Catalinadfiniparllment<Engine>etrsidantdanslemmelment<Service>quececonnecteur.
Danslaversion6deTomcat,ilexistedeuxtypesdeconnecteursselonleprotocolequilssontamensgrer,enloccurrence,HTTP
et AJP. Le choix de faire transiter lun ou lautre des protocoles sur un connecteur se fait simplement avec lattribut protocol qui
prendralavaleurHTTP/1.1(pardfaut)oubienAJP/1.3,laclassedimplmentationestlammeetlattributclassNamenapasbesoin
dtreprcis.
Detouslesattributsdecetlment,port,addresset securesontprobablementlesplusimportants.
Lattributport permet dindiquerleportdcouteduconnecteur:danslaconfigurationpardfautdeTomcat6,leconnecteurHTTP
dfiniutiliseleport8080,etleconnecteurAJPutiliseleport8009.
Lattribut address permet de spcifier une adresse IP particulire du serveur sur lequel le connecteur doit accepter les requtes
entrantes,ceciesttrspratiquesurlesmachinesquidisposentdeplusieurscartesrseaux.Lavaleurpardfautnindiqueaucune
adresseparticulire,etleconnecteuracceptelesrequtesprovenantdetouteslesinterfacesrseaux.
Enfinlattributsecurepermet,silestpositionntrue,dedfinirunconnecteurHTTPS.Lavaleurpardfautestfalse.
Voiciquelquesautresattributs :
redirectPort : permet de spcifier le port de redirection HTTPS. Cet attribut peut tre positionn sur un connecteur HTTP pour
spcifierquelesrequtesHTTPSdoiventtreredirigesversceport(ildoitalorscorrespondreunconnecteurHTTPSvalide).
disableUploadTimeout :permetdappliqueruntempsmaximumpourlenvoidesfichiers,sisavaleuresttrue,ounon.Lavaleurpar

ENI Editions - All rigths reserved

- 3-

dfautestfalse.
enableLookups :demandeauserveurTomcat6deremplacerladresseIPduclientparsonnomdemachine,lavaleurpardfautest
true,maisdoittrepositionnefalsesurunserveurdeproductioncarcemcanismeesttrscoteux.
LorsqueleserveurTomcatfonctionneseulderrireunserveurproxy,ceserveurredirigelesrequtesdesclientsversleconnecteur
HTTPdeTomcat,parprogrammation,ilestpossibledobtenirlenomdhteainsiqueleportduserveurcontactparleclient,mais
danscecasdeconfiguration,cesontlesvaleursduconnecteurHTTPdeTomcatquisontretournes,etnoncellesduserveurproxy
queleclientautilises.
Pourremdierceproblme,lesattributsproxyNameetproxyPortpermettentdespcifierlenomdhteetleportduserveurproxy
pourobtenirlesvaleursutilisesparleclient.
Lesautresattributssontrelatifsauxperformancesdesconnecteurs,ilspermettentnotammentdedfinirlenombrederequtesquun
connecteurestcapabledetraitersimultanment,cesontlesattributsmaxThreads ,executor ,acceptCount ,et connectionTimeout .
Laconfigurationdellment<Connector>deTomcat6utiliselattributexecutorpourspcifierlenomdellment<Executor>dontil
doitutiliserlepooldethreads.noterquecetlmentdisposegalementdelattributmaxThreadspermettantdespcifierlenombre
maximumdethreadsutilisersiaucun<Executor>nestutilis.
Lorsquelenombremaximumdethreadsestatteint,lesrequtesclientsquicontinuentdarriversurleconnecteursontmisesenfile
dattente,cettefiledattenteestdimensionneparlattributacceptCount.LenombretotaldeclientsqueTomcat6peutacceptersur
un connecteur est donc gale la somme de la valeur de maxThreads et de acceptCount. Audel de cette valeur, les clients qui
tententdeseconnecterreoiventunmessagederreur.Lesrequtesquisontstockesdanslafiledattentedisposentduntemps
maximumpourtretraites,cetempsestdfiniparlattributconnectionTimeout:encasdedpassementdecetempsimparti,une
erreurestrenvoyeauclient,letempstantexprimenmillisecondes.
Lesvaleurspardfautdecesattributssontrsumesdansletableaucidessous :
maxThreads

40

acceptCount

10

connectionTimeout

60000

e.Llment<Engine>
CestlemoteurdeservletCatalinadeTomcat6.Cemoteuratcritpourlesversions4deTomcat,etremisauniveaudesnouvelles
spcificationsJEEpourTomcat6.
UneapplicationdployedansTomcat6estncessairementassocieun<Engine>, le rle du moteur Catalina est de rpartir les
requtesentrantesvialesconnecteurs,verslesapplicationsconcernes.
Lesattributsobligatoiresde<Engine>sontnameetdefaultHost.Lattributnamepermetdidentifierlemoteur,cenomapparatradans
lesdiffrentsfichiersjournauxduserveur,lavaleurpardfautestCatalina.Cettevaleurdenomestgalementcellequiestassocie
pardfautllment<Service>,ilnestdoncpasfacilededterminerquiduserviceoudumoteuragnrunetracedansunfichier
journal,aussiilestrecommanddemodifierundesdeuxnoms,parexemple,llment<Service>peutporterlenomTomcat,Catalina
tantlenomdumoteurdeservlet,ilvautmieuxconservercenompour<Engine>,etcepourplusdeclart.
LautreattributobligatoireestdefaultHost,etilpermetdedfinirquellment<Host>delaconfigurationrecevralesrequtesencas
denoncorrespondancedenomdhte(voirllment<Host>suivant).
Enfin,ilexisteunautreattribut,maisceluiciestfacultatif,cestjvmRoute.Cetattributesttrsspcifique,etnaunintrtquelorsde
lacrationdunefermedeserveurTomcat6(voirchapitreClusteringavecTomcat6).
Lorsquunclientaccdeuneapplication,uncertainnombredinformationspeuventtreconservessursanavigation:onparlede
sessionutilisateur.Cesinformations,tellesquelecontenudun panier dachatsurunsitedecommercelectronique,sontstockes
surleserveur,danslammoiredelamachinevirtuelleJavadeTomcat6.
Quesepassetilsi,dansunefermedeserveur,lapremirerequtedececlientestenvoyeversunpremierserveurTomcat6,etla
seconde requte vers un autre serveur ? Les deux serveurs possdent deux sessions diffrentes pour ce mme utilisateur, deux
paniersdachatseremplissentalatoirementenfonctiondelamaniredontsontenvoyeslesrequtessurlesserveurs !Cenest
videmmentpasacceptable.
Lattribut jvmRoute permet dviter ce problme en mettant en place un mcanisme appel affinit de session. Lorsquun client est
associunserveurTomcat6,toutessesrequtessuivantesserontdirigesverslemmeserveur,etsasessionseradoncunique.

f.Llment<Host>
Llmentdeconfiguration<Host>permetdeconfigurerunhteuniquedansleserveur,quecethtesoitvirtueloubienquildispose
desapropreadresseIPpublique.
LhbergementvirtuelestunetechniqueutiliseparlesserveursHTTP,permettantdhbergerplusieurssitesdistinctsunemme
adresse IP. Avec les premires versions du protocole HTTP, un site Web tait ncessairement li une adresse IP unique sur
lInternet,alorsquavecladernireversiondeceprotocole,laversion1.1,permetlhbergementmultipleouhbergementvirtuel.
Comme prsent en introduction au chapitre Prambule, lorsquun client met une requte HTTP, les informations transmises
contiennentlenomdelaressourcedemande,lamthodeHTTP,etlhtequeleclientsouhaitecontacter,parexemple,siunclient
saisitladressehttp://www.monentreprise.com/hello.html,voicilarequtequiltransmet :
GET /hello.html HTTP/1.1

- 4-

ENI Editions - All rigths reserved

Host : www.monentreprise.com
Son navigateur Web va trouver ladresseIPdusite www.monentreprise.com, via le systme DNS, et la requte sera envoye au
serveur.Unautresite,www.autreentreprise.com,peutgalementtrehbergsurlemmeserveuretpossderlammeadresse
IP,danscecasleserveurutiliselentteHostenvoyaveclarequtepouridentifierlesite.
IlestdoncpossibledeconfigurerautantdhtesquencessairedansunserveurTomcat6,cestlattributdeconfigurationobligatoire
namequipermetdeleurattribuercenomdhte.
DanslecastrsparticulieretrelativementrareounclientutiliseraitladresseIPdundecesdeuxsitespoursyconnecter,oubiensi
unclientpossdeunnavigateurWebnesupportantpasHTTP1.1,leserveurestalorsdanslincapacitdidentifierlhtedemand.
LattributdeconfigurationdefaultHostdellment<Engine>permetdedfinirlhtecontactdanscecasdefigure.
Exempledeconfiguration :
...
<Engine defaultHost="www.monentreprise.com">
...
<Host name="www.monentreprise.com">
...
</Host>
<Host name="www.autreentreprise.com">
...
</Host>
</Engine>
Unautreattributestobligatoire,cestappBase.Ilpermetdespcifierlerpertoireracinedanslequelsontstockeslesapplications
accessiblesviacethte,lavaleurpardfautestwebappsetfaitrfrenceaurpertoireCATALINA_HOME/webappsdelinstallation
deTomcat6.Ilestbiensrpossibledemodifiercettevaleur,etmmedutiliseruncheminrelatif.
Les autres attributs de configuration permettent de configurer le dploiement des applications, il sagit de autoDeploy,
deployOnStartup,unpackWARs,deployXML,etworkDir.
Lattribut de configuration workDir permet de spcifier un rpertoire de travail pour les applications, cest notamment dans ce
rpertoire que Tomcat 6 gnre les classes de servlets partir des JSP des applications. Chaque application possde son propre
sousrpertoire.LavaleurpardfautestCATALINA_HOME/work/<nomdeEngine>/<nomdhte>.
Lattribut autoDeploy permet dindiquer Tomcat 6 si les applications simplement dposes dans le rpertoire indiqu par appBase
doivent tre automatiquement dployes (autoDeploy="true"), ou non (autoDeploy="false"), sans redmarrage du serveur. Par
dfaut,lavaleuresttrue.
Cemcanismeesttrsintressantpourunserveurdedveloppementparcequilpermetauxdveloppeursdesimplementdposerle
fruit de leur travail dans le rpertoire des applications qui pourra tre partag. Cependant, Tomcat 6 tant amen surveiller en
permanencecerpertoire,positionnerautoDeploytrueestgalementtrscoteuxenressources,deplus,dunpointdevuedela
scurit,siunutilisateurparvientuploaderunearchiveWARsurleserveur,celleciseraautomatiquementinstalleetconsidre
commeuneapplicationvalide !
Ilestdoncconseilldemettrecetattribut false sur un serveur de production et dutiliserlesoutilsdedploiementdapplication
fournisavecTomcat.
Lorsdelinstallation duneapplicationsousformedunearchiveWAR,cettearchiveseradcompressesi unpackWARs vautlavaleur
true,cequiestlecaspardfaut.
Audmarrage,Tomcat6renddisponiblestouteslesapplicationssideployOnStartupvauttrue,cequiest,videmmentlavaleurpar
dfaut.
Enfin,deployXML permetdautoriserledploiementdesapplicationsvialesfichiersdecontexteXML.
Tous ces attributs relatifs au dploiement des applications sont couverts en dtail dans le chapitre Dploiement et gestion des
applications.

g.Llment<Context>
Un lment <Context> reprsente une application Web dploye dans Tomcat 6. Il existe deux types de contexte, ceux qui sont
explicitementdclarsparcetlmentdeconfiguration,etceuxquisontautomatiquementcrsparleserveur.LeserveurTomcat6
cre, lorsquil dmarre, un lment <Context> en mmoire pour toutes les applications qui sont prsentes dans le rpertoire de
publicationdesapplications(indiquparappBasesurllment<Host>).
Lorsquecetlmentestutilispourdclarerexplicitementuneapplication,ilpeuttreutilisdanslefichierserver.xmloubiendans
lesfichiersdecontexteXML,cestcettederniremthodequiestprconiseavecTomcat6.
<Context>possdedeuxattributsobligatoires,permettantdefairerfrenceaurpertoirecontenantlesdonnesdelapplicationet
auchemindecontextequiserautilisdanslURLpouraccdercetteapplication.
Lattribut docBase permet de faire rfrence au rpertoire des donnes de lapplication ou bien directement au fichier WAR de
lapplication.Lavaleurdecheminindiqupeuttreuncheminabsoluoubienrelatifaurpertoiredepublicationdesapplications.
Lattribut path permet dindiquer le chemin de contexte de cette application Web, il commence toujours par le caractre /, chaque
applicationdoitpossderunevaleuruniquedecetattribut.
Dautres attributs existent et sont facultatifs, cest notamment le cas de reloadable qui permet dactiver une surveillance des
rpertoires/WEBINF/libet/WEBINF/classesdelapplicationsisavaleuresttrue.Chaquemodificationapporteaucontenude
cesrpertoiresseraautomatiquementpriseencompteparTomcat6quirechargeracetteapplicationautomatiquement.Cettefoisci
encore,voilunmcanismetrsintressantsurunserveurdedveloppement,maistrscoteuxenressourcessurunserveurde

ENI Editions - All rigths reserved

- 5-

production, cest pourquoi la valeur par dfaut est false, il faut alors utiliser loutil manager du serveur (prsent au chapitre
Dploiementetgestiondesapplications)pourrechargerlesapplications.
Lattribut useNaming permet dactiver un contexte de nommage JNDI pour cette application, permettant ainsi la recherche de
ressourcesviacetteAPIdeserviceJEE,lavaleurpardfautesttrue.
Lors de la conception dune application, les dveloppeurs peuvent tre amens crire des informations de trace et de dbogage
verslasortiestandardetlasortiederreur,enutilisantlesobjetsJavaSystem.outetSystem.err.LattributfacultatifswallowOutput
permetderedirigercesfluxdanslefichierjournallicetteapplication.Lavaleurpardfautestfalse.
Dans les spcifications JEE, chaque application Web est considre comme autonome dans la mesure o elles ne peuvent pas
communiquerentreelles,cestdirechangerdesinformationscontenuesdanslessessionsutilisateurs,oulesrequtesutilisateur
parexemple.PositionnerlattributfacultatifcrossContext truepermetuneapplicationWebdobtenirunerfrenceuneautre
application du mme hte, lui permettant ensuite de lire des informations dans cette autre application. Linstruction de code Java
permettantcetteoprationalasyntaxesuivante :
getServletContext().getContext("<nom du chemin de contexte>");
Pourdesraisonsdescurit,lavaleurpardfautestfalse.
LattributfacultatifworkDirpermetdespcifierunrpertoiredetravailpourlapplication,silestspcifi,lecheminindiquiciremplace
celuipardfautdellment<Host>.
LattributfacultatifprivilegedpermetdindiquersilapplicationpeututiliserlesservletsdumoteurCatalina,commecelledumanager
parexemple.
Lattributfacultatifcookiesindiquesilescookiessontutilisspourimplmenterlessessionsutilisateur,lavaleurpardfautesttrue,
conformmentauxspcificationsJEE.
Enfin,lattributoverrideestlilutilisationdeslmentsducontextepardfautprsenteciaprs.
Uncontexteparticulier :lecontextepardfaut
Le contexte par dfaut permet de spcifier les lments de configuration des applications pour lesquelles Tomcat 6 cre
automatiquement un contexte en mmoire lorsquil dmarre. Le contexte par dfaut est mis en uvre avec le fichier
CATALINA_HOME/conf/context.xml.Cefichiercontientunlment<Context>sanslesattributspathetdocBase.
LefichierCATALINA_HOME/conf/context.xml :
<!-- The contents of this file will be loaded for each web application -->
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
...
</Context>

h.Llment<Realm>
UnedesparticularitsdelaplateformeJEEestquelledfinitunmcanismestandardpourlagestiondesauthentificationsdansles
applicationsWeb,cemcanismetantbassurlanotionderles.
UneapplicationWebpeutdfinirunensemblederessourcesprotgesparuneauthentificationquiferaacqurirunutilisateurun
ouplusieursrlesapplicatifs,ilsera,enfonctiondesesrles,autorisounonaccderauxressources.Danscemcanisme,cestle
conteneurWebquifournitlemcanismedauthentificationetlesystmedestockagedesinformationsdauthentificationtelsqueles
nomsdutilisateurs,lesmotsdepasseassocisetlesrlesdechacundecesutilisateurs.Cemcanismeestconfiguravecllment
<Realm>sousTomcat6.
Un <Realm> peut tre dfini en tant qulment enfant de <Engine>, <Host> ou <Context>, selon son emplacement, le systme
dauthentification sappliquera tout le moteur Catalina, un hte particulier, ou une application. Il ne peut y avoir quun seul
<Realm>par<Engine>,<Host>ou<Context>.
Laconfigurationdun<Realm>requiertunlmentfondamental,cestlattributclassName.Enfonctiondelaclassedimplmentationqui
sera donne en valeur de cet attribut, Tomcat 6 utilise un mcanisme particulier pour grer lauthentification, de plus, la valeur de
classNameconditionnelesautresattributsncessaireslabonneconfigurationdecetlment.
className peutavoirlesvaleurssuivantes :

- 6-

org.apache.catalina.realm.MemoryRealm : dfinit un mcanisme dauthentification bas sur un fichier dont le contenu est
stockenmmoireaudmarrageduserveur.Cestlimplmentationde<Realm> proposdanslaconfigurationpardfautdu
serveurTomcat6,elleestbasesurlefichierCATALINA_HOME/conf/tomcatusers.xmlquidfinitlesutilisateurs,motsde
passeetrlesassocis.

org.apache.catalina.realm.JDBCRealm : permet dutiliser une base de donnes pour stocker les informations
dauthentification,lesattributssupplmentairesncessaireslaconfigurationdecetypede<Realm>permettentdeconfigurer
laccslabasededonnes.

org.apache.catalina.realm.DataSourceRealm :trsprocheduprcdentsaufquuneressourcedaccslabasededonnes,
unesourcededonnes,estutilise,etcepourdemeilleuresperformances.

org.apache.catalina.realm.JNDIRealm : permet une authentification base sur un service dannuaire tel quun annuaire

ENI Editions - All rigths reserved

LDAP.
Laconfigurationdechacundecestypesde<Realm>estdtailledanslechapitreLascuritduserveuretdesapplicationsdecet
ouvrageconcernantlascurit.

i.Llment<Loader>
Llment<Loader>dfinitunchargeurdeclasseJava(ilssonttrscommunmentappelsdeleursnomsanglophonesClassLoader):
sonrleestdechargerlesclassesJavaduneapplicationWeb.LaspcificationdeServletdanslesnormesJEEspcifieunordrede
recherchedesclassesparunchargeurquiestlesuivant :

Lesclassescontenuesdanslerpertoire/WEBINF/classesdelapplication.

LesclassescontenuesdanslesfichiersJAR,euxmmescontenusdanslerpertoire/WEBINF/libdelapplication.

Lesclassesrenduesaccessiblesauxapplicationsparlemoteurdeservlets.

Un lment de configuration <Loader> est un lment enfant facultatif de <Context>, et permet de contrler lordre dans lequel les
classessontrecherchesetchargespourcetteapplicationenremplaantlechargeurdeclassepardfautdececontexte.
Lattribut important de llment <Loader> est delegate, cest lui qui permet de modifier lordre de chargement des classes. En
positionnantsavaleurtrue,lesclassesserontdabordrecherchesdepuisleschargeursdeclassesparents,cestdireceuxde
Tomcat6,avantdtrerecherchesdanslesclassesdelapplicationWeb.Lavaleurpardfautestfalse.
Lattribut facultatif reloadable permet dindiquer au chargeur de classes quil doit surveiller le contenu des rpertoires /WEB
INF/classes et /WEBINF/lib pour dtecter les modifications apportes sur les ressources, linstar du mme attribut dfini sur
<Context>,dailleurslavaleurpardfautesthritedecelledellmentparent<Context>.
Lattribut facultatifcheckInterval spcifie lintervalle de temps au bout duquel le chargeur de classes doit examiner le contenu des
rpertoiresdelapplicationWebpourchargerlesnouvellesressourcesoucellesquionttmodifies.Lavaleurpardfautest15,et
estexprimeensecondes.

j.Llment<Manager>
Lesuividelanavigationdunutilisateursefait,danslesapplicationsWebJEE,grceauxsessionsHTTP,commedjexpliqudansla
partieLesapplicationsWebJEEetTomcat3duchapitreLaplateformeJEE5decetouvrage.Llmentdeconfiguration<Manager>
permetdeconfigurerlegestionnairedesessionpouruneapplicationWebspcifique,cestdoncunlmentenfantde<Context>.
Lattribut de configurationclassNamepeutprendredeuxvaleursdiffrentes,soitorg.apache.catalina.session.StandardManager,qui
estlavaleurpardfaut,ouorg.apache.catalina.session.PersistentManager.
Pardfaut,unconteneurWebJEEstockelesinformationsdesessionutilisateurdanslammoiredesaMachineVirtuelleJava,lorsde
lamiseenplacedunefermedeserveurs,llmentdeconfiguration<Engine>possdelattributjvmRoutepermettantdenvoyertoutes
lesrequtesdunmmeclientverslammeinstancedeserveurpourquilretrouvesasession.Maisencasdepannedeceserveur,
lesrequtesdececlientsontenvoyesdestinationdunautreserveurdelaferme,etsasessionestperdue.
Laclassedimplmentationorg.apache.catalina.session.PersistentManager dellment<Manager>permetdefaireensortequeles
sessionsutilisateursontgalementstockesdansunentreptpersistant,telquunebasededonnesouunsystmedefichier,en
plusdtrestockesenmmoire,permettantainsilarestaurationdelasessionutilisateurencasdedfaillancedun des serveurs.
LutilisationdecettevaleurpourlattributclassNamencessitededfinirunlmentenfantpour<Manager> :llment<Store>.
Lesattributscommunscesdeuxclassesdimplmentationssont :
maxActiveSessions :spcifielenombremaximumdesessionsactivesquelegestionnairedesessionspeutcrer.Lavaleurpardfaut
est-1,cequisignifiequilnyapasdelimite.
distributable :spcifiesilesattributsdesessionspeuventtrestocksphysiquementdansunfichierouunebasededonnes,les
classesJavaquireprsententcesattributsdesessiondoiventimplmenterlinterfacejava.io.Serializable.Lavaleurpardfautest
false.
Lesattributsspcifiqueslimplmentationpardfaut,org.apache.catalina.session.StandardManager,sont :
pathname : spcifie un chemin absolu ou relatif (au rpertoire de travail du contexte courant) vers le fichier dans lequel ltat des
sessions utilisateur pour cette application est sauvegard pendant un redmarrage du serveur. La valeur par dfaut est
SESSIONS.ser.Ilestpossiblededsactivercemcanismeendonnantenvaleurcetattribut,unechanevide.
Lesattributsspcifiqueslimplmentationdegestionnairepersistant,org.apache.catalina.session.PersistentManager,sont :
saveOnRestart : <si cet attribut vaut true, alors les sessions sont sauvegardes dans lentrept persistant lorsque Tomcat 6 est
arrtetredmarr,oubienlorsquelapplicationestrecharge,cequiestlavaleurpardfaut.
Configurationdessessionspersistantes :llment<Store>
La classe org.apache.catalina.session.PersistentManager permet de crer un gestionnaire de sessions qui sauvegarde les
informations des sessions utilisateurs dans un entrept persistant. Llment<Store> est un lment enfant de <Manager> qui doit
tresystmatiquementdfinipartirdumomentocetteclassedimplmentationestutilisesur<Manager>.
Llment de configuration <Store> ne possde quun seul attribut obligatoire : lattribut className. Il permet de spcifier le type
dentrept de stockage utilis. A linstar de llment <Realm>, la valeur de cette classe dtermine galement les autres attributs

ENI Editions - All rigths reserved

- 7-

dfinir.LattributclassNamepeutprendrelesvaleurs suivantes:
org.apache.catalina.session.FileStore : dans ce cas lentrept persistant est un systme de fichier partag entre les diffrentes
instancesdeTomcat6.
org.apache.catalina.session.JDBCStore :pourstockerlessessionsutilisateurdansunebasededonnes.
Lutilisation du gestionnaire de sessions persistantes et des lments <Store> associs est dcrite de manire dtaille dans le
chapitreClusteringavecTomcat6decetouvrage.

k.Llment<Valve>
Unlment<Valve>reprsenteuncomposantdeTomcat6sousformeduneclasseJava,quipeuttreinsrdansleprocessusde
traitementdesrequtesparleconteneur,ceslmentssontdenaturesdiffrentesetpeuventfinalementtreconsidrscommedes
filtres.
Unlment<Valve>peuttreunlmentenfantde<Engine>,<Host>,ou<Context>.
ParmitouscesfiltresprsentspardfautavecTomcat6,cestlattributcommun classNamequivapermettredespcifierletypedu
filtreparlenomdesaclasseJava,lesautresattributsdeconfigurationsontdpendantsdecettevaleur.
VoicilesdiffrentesvaleurspossiblespourclassName,etletypedefiltrequechacundeslments<Valve>associfourni :
org.apache.catalina.valves.AccessLogValve :gnreunfichierjournaldesaccsauserveur.
org.apache.catalina.valves.JDBCAccessLogValve :critlejournaldesaccsauserveurdansunebasededonnes.
org.apache.catalina.valves.RemoteAddrValve :appliqueunerestrictiondaccsenfonctiondesadressesIPdesclients.
org.apache.catalina.valves.RemoteHostValve :appliqueunerestrictiondaccsenfonctiondesnomsdemachinedesclients.
org.apache.catalina.valves.RequestDumperValve : permet dcrire le contenu des requtes des clients dans le systme de
journalisationassocillmentsurlequelcefiltreestpositionn.
org.apache.catalina.authenticator.SingleSignOn :permetlauthentificationuniqueentreplusieursapplications.
org.apache.catalina.valves.FastCommonAccessLogValve : elle remplace AccessLogValve, car plus performante en environnement de
production.
noterquilestgalementpossibledimplmentersonproprefiltreencrivantuneclasseJavasurlemodledecellesdjfournies,
undesnombreuxavantagesdulogiciellibre !
AccessLogValve
CefiltrepermetdegnrerunfichierjournaldesaccsauserveurdansleformatdeceuxutilissparlesserveursWeb,lecontenude
cefichierpeutensuitetreanalysparunoutildestatistiquesgnrantdesrapportssurlafrquentationdunsite.
Lesattributssonttousfacultatifs,lexception,vidementdelattributclassNameprsentprcdemment.
Lesfichiersjournauxgnrsportentunnombassurlasyntaxe :
<prefix><fileDateFormat><suffix>
Otousceslmentsdesyntaxesontdesattributsdecetlment.
Lattributprefixpermetdespcifierledbutdunomdufichier,lavaleurpardfautestaccess_log.. Lattributsuffix,luidonneen
gnralsonextensionaufichier,lavaleurpardfautestunechanevide.LattributfileDateFormatpermetdespcifierleformatde
datequiserautilispournommerlefichier,ceformatpermetgalementdedterminerlafrquencederotationdufichier,lavaleur
pardfautestyyyy-MM-dd,cequisignifiequelenomdufichiercomprendraunedateauformatannemoisjour,maisgalementque
cefichierserapermuttouslesjours(minuit).Pourfaireunerotationmensuelle,ilsuffitdedonnerlavaleuryyyy-MMcetattribut.
Lattribut directory permet de spcifier le rpertoire en chemin absolu ou relatif CATALINA_HOME, dans lequel sont crits les
fichiersdaccs.LavaleurpardfautpointeversCATALINA_HOME/logs.
Lattributrotatablepermetdactiverounonlarotationdesjournaux,sicetattributvauttrue,alorslejournaldesaccsestpermut
enfonctiondelattributfileDateFormat,cestlavaleurpardfaut.
Lattribut resolveHosts permet de transformer les adresses IP des clients en nom de machine dans le fichier journal, et ceci en
utilisantlesystmeDNS,cetteoprationestcoteuseentempsetenressource,aussiilestconseilldeluidonnerlavaleurfalsesur
unserveurdeproduction,cestlavaleurpardfaut.
Enfin, lattribut pattern permet de spcifier le format des entres de ce fichier. Cet attribut utilise des squences de caractres
particulirespourformaterlecontenudechacunedesentres,lessquencesutilisablessontlessuivantes :

- 8-

%a

AdresseIPdistante.

%A

AdresseIPlocale.

%b

NombredoctetsenvoyssanslesenttesHTTP,ousilny
enapas.

%B

NombredoctetsenvoyssanslesenttesHTTP.

ENI Editions - All rigths reserved

%h

Lenomdemachinedistante(ouladresseIPsiresolveHosts
vautfalse).

%H

Leprotocoleutilisdanslarequte.

%m

LamthodeHTTPdelarequte.

%p

Leportlocalsurlequellarequteatreue.

%q

Lachanedelistedesparamtresderequteprfixeavec ?
sidesparamtresontttransmis.

%r

Lapremirelignedelarequte(lamthodeetlURI).

%s

LecodedtatHTTPdelarponse.

%S

Lidentifiantdesessionutilisateur.

%t

LadateetlheureauformatCLF(CommonLogFormat).

%u

Lenomdelutilisateursilyaeuauthentification,sinon.

%U

LURLdelarequteformule.

%v

Lenomduserveur.

%D

Letempsdetraitementdelarequteenmillisecondes.

%T

Letempsdetraitementdelarequteensecondes.

En plus de ces squences de caractres, lattribut pattern peut utiliser des donnes contenues dans un entte de requte HTTP,
dansuncookie,entantquattributdesessionouentantquattributderequte,enutilisantleformatsuivant :
%{<nom>}[i|c|r|s]
<nom>faitrfrenceaunomdellmentrcuprer,leslettresi,c,retspermettentdespcifierourcuprercettevaleur :

i=enttederequteHTTP

c=cookie

r =attributderequte

s=attributdesession

Parexemple,lasquence%{User-Agent}idemandedercuprerlenttederequteHTTPUser-Agentquicontientlenomdu
navigateurWebutilisparleclient.

Il existe deux formats prdfinis utilisables sous les intituls common et combined. Ces deux formats sont des formats assez
communmentutilissparlesserveursWeb.
Leformatcommon correspond %h %l %u %t "%r" %s %b,etleformatcombined%h %l %u %t "%r" %s %b "%{Referer}i" "%{UserAgent}i".
Lavaleurpardfautdelattributpatternestcommon.
Exemple :
Configurationdelavalvedanslefichierserver.xml
<Engine ... >
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="tomcat_access." suffix=".txt"
resolveHosts="false" fileDateFormat="yyyy_MM_dd"
pattern="%t - %a %H %s - %r"/>
...
</Engine>
Le nom du fichier gnr est tomcat_access.2006_04_26.txt et contient les lignes suivantes aprs quun client a accd lURL
http://localhost:8080/tomcat docs:

ENI Editions - All rigths reserved

- 9-

[24/Apr/2006:19:09:15 +0200] - 127.0.0.1 HTTP/1.1 304 - GET /tomcat-docs/ HTTP/1.1


[24/Apr/2006:19:09:15 +0200] - 127.0.0.1 HTTP/1.1 304 - GET /tomcat-docs/images/jakarta-logo.gif HTTP/1.1
[24/Apr/2006:19:09:15 +0200] - 127.0.0.1 HTTP/1.1 304 - GET /tomcat-docs/images/tomcat.gif HTTP/1.1
[24/Apr/2006:19:09:15 +0200] - 127.0.0.1 HTTP/1.1 304 - GET /tomcat-docs/images/printer.gif HTTP/1.1

JDBCAccessLogValve
Cefiltrepermetdcrirelejournaldesaccsdansunebasededonnes.Voicisesattributs :
connectionURL :formatdelURLdeconnexionlabasededonnes,spcifiquementaupiloteJDBCdaccslabaseutilise.
driverName :lenomdelaclassedupiloteJDBCdaccslabasededonnes.
resolveHosts :permetderemplacerladresseIPduclientparsonnomdemachine,sicetattributvauttrue.
pattern : le format des entres du journal daccs, les seules valeurs possibles sont les modlescommon et combined utiliss avec
AccessLogValve.Lavaleurpardfautestcommon.
tableName :lenomdelatabledelabasededonnesdanslaquellesontcriteslesentresdujournaldaccs.
Exemple demiseenuvre:
Laconfigurationdanslefichierserver.xml :
<Engine ... >
...
<Valve className="org.apache.catalina.valves.JDBCAccessLogValve"
connectionURL="jdbc:mysql://localhost:3306/ritomcat6?
user=root&amp;password=secret"
driverName="com.mysql.jdbc.Driver" tableName="AccessLog"
resolveHosts="false" pattern="common" />
...
</Engine>

et exemple utilise la base de donnes MySQL 5. Se reporter lannexe A pour plus dinformations sur linstallation et la
C
configurationdeMySQL5etdesesoutils.
LescriptSQLdecrationdelabasededonnesetdelatable,enregistrsousC:\scripts\ritomcat6.sql:
CREATE DATABASE `ritomcat6` ;
USE `ritomcat6` ;
CREATE TABLE `ritomcat6`.`AccessLog` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`remoteHost` CHAR(15) NOT NULL DEFAULT ,
`user` CHAR(15),
`timestamp` TIMESTAMP NOT NULL DEFAULT 0,
`query` VARCHAR(255) NOT NULL DEFAULT ,
`status` INTEGER UNSIGNED NOT NULL DEFAULT 0,
`bytes` INTEGER UNSIGNED NOT NULL DEFAULT 0,
`referer` VARCHAR(128),
`userAgent` VARCHAR(128),
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Pourexcutercescript,ouvriruneinvitedecommandeetdepuislerpertoirequicontientlescriptsaisirlacommande :
mysql -u root -p < C:\scripts\ritomcat6.sql
LemotdepasseducompteadministrateurdeMySQL5(root)estdemand.IlestgalementpossibledutiliserloutilMySQLQuery
Browser:choisirlemenuFileOpenscript,choisirlefichieretcliquersurleboutonExecute.
Pourcrerlabasededonnesetlestablessansutiliserlescript,cestMySQLAdministratorquilfaututiliser.
StructuredelatabledansloutilMySQLAdministrator :

- 10 -

ENI Editions - All rigths reserved


AprsunaccslURLhttp://localhost:8080/docs,voicilecontenudelabasededonnesaffichdansloutilMySQLQueryBrowser :

LastructuredelatableutiliselenomdeschampspardfautattendusparlaconfigurationdeJDBCAccessLogValve.Ilestcependant
possibledespcifiersespropresvaleursdechamps,maisilfaudraajouterdesattributsdeconfigurationsupplmentairesurllment
<Valve>pouryfairerfrence.Voicilalistedecesattributs,ainsiquunrappeldeleursvaleurspardfaut quionttutilisesdans
lexempleprcdent:

bytesField:valeurpardfautbytes.

queryField:valeurpardfautquery.

refererField:valeurpardfautreferer.

remoteHostField:valeurpardfautremoteHost.

statusField:valeurpardfautstatus.

timestampField:valeurpardfauttimestamp.

userField:valeurpardfautuser.

userAgentField:valeurpardfautuserAgent.

ENI Editions - All rigths reserved

- 11 -

RemoteAddrValveetRemoteHostValve
LesfiltresRemoteAddrValveetRemoteHostValvepermettentderestreindrelesaccsauserveur,unhte,ouuneapplicationen
fonction de llment sur lequel il est positionn. RemoteAddrValve permet une restriction en fonction dadresses IP, et
RemoteHostValveenfonctiondenomsdhtes.
LedtaildufonctionnementdecesdeuxfiltresestdonndanslechapitreLascuritduserveuretdesapplicationsdecetouvrage.
RequestDumperValve
Cefiltreesttrsintressantpourledbogageetlarsolutiondeproblmepuisquilpermetdcrirelecontenucompletdelarequte
dunclientdanslejournalassocilapplicationquireoitlarequte.LeseulattributpourcefiltreestclassName.
Exemple :
<Valve className="org.apache.catalina.valves.RequestDumperValve" />
Lefichierjournalquiestassocillmentcontenantcefiltrecontienttouteslesinformationstransmisesdanslarequte.Cefiltre
esttrspratiquepourdterminerlesproblmeslislinteractionentreunclientetleserveurTomcat6.Attention,cefiltreremplitles
fichiersjournauxtrsrapidement.
SingleSignOn
Cefiltrepermetdimplmenterlemcanismedauthentificationuniqueentretouteslesapplicationsdunhte.
Lamiseen uvredecefiltreestdcriteendtaildanslechapitreLascuritduserveuretdesapplicationsconcernantlascurit.

l.Llment<Listener>
Llmentdeconfiguration <Listener>permetdedfiniruncouteurdvnementssurleslments<Server>, <Host>,ou<Engine>.
Leur dfinition permet dobtenir des informations sur le fonctionnement interne du serveur permettant ainsi sa supervision. Cet
lment ne dispose que dun seul attribut de configuration obligatoire, cest className. Un couteur dvnements est en fait une
classeJava,cestcetteclassequidoittrerfrenceparclassName.
La configuration par dfaut de Tomcat 6 contient deux couteurs dvnements dfinis sur llment <Server>, ils permettent la
supervision globale du serveur, ainsi que des ressources JNDI configures dans celuici. Les lments <Listener> par dfaut de
Tomcat6crentdesressourcesappeles MBeansquisontdesobjetsdesupervisionutilissparlAPI JavaJMX (JavaManagement
Extension).LutilisationdeJMXetdes<Listener>estdtailledanslechapitreAnalyseetsupervision.
Lescouteursdvnementspardfaut deTomcat6 :
<Server port="8005"shutdown="SHUTDOWN">
<Listener
className="org.apache.catalina.mbeans.ServerLifecycleListener"
/>
<Listener
className=
"org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
/>
IlestpossiblededveloppersesproprescouteursdvnementsensebasantsurunmodlefourniparTomcat6(linterfaceJava
org.apache.catalina.LifecycleListener).

- 12 -

ENI Editions - All rigths reserved

Lesautresfichiersdeconfiguration
En complment du fichier server.xml, Tomcat 6 utilise trois autres fichiers de configuration : tomcatusers.xml,
catalina.policy etweb.xml. Ils se situent tous les trois dans le rpertoireCATALINA_HOME/conf, les deux premiers
sontrelatifslascuritduserveur,ledernierquantlui,dfinitdesvaleurspardfaututilisesparlesapplications
Webdployesdansleserveur.

1.Lefichierweb.xml
Un fichier web.xml est un descripteur de dploiement dapplication Web JEE, il contient la configuration dune
application ainsi que des informations aidant le serveur en faire linstallation. Le fichier
CATALINA_HOME/conf/web.xml dfinit des paramtres de configuration utiliss par toutes les applications Web
installes dans Tomcat 6, sauf si ces applications fournissent une configuration diffrente dans leur propre fichier
web.xml.
Lesmodificationsfaitesaucontenudecefichierontunimpactsurtouteslesapplicationsinstallesdansleserveur,
aussi,ilfauttretrsvigilantlorsdelditiondecefichier,uneerreurdesaisiepourraitavoirdegravesconsquences.
Lefaitdefournircesprfrencespardfautdanscefichierestunchoixtrspertinentdelapartdesconcepteursde
Tomcat,puisquilpossdelammesyntaxequundescripteurdedploiementdapplicationWeb,ainsi,soncontenuest
facilementcomprhensiblepourlespersonneshabituestravailleraveccetypedefichier.
CefichierdeconfigurationcommenceparladclarationdeservletsspcifiquesTomcat6.
LapremiredecesservletsestappeleDefaultServlet,elleapourresponsabilitdeservirlesressourcesstatiques
des applications Web telles que les pages HTML, images, etc. La servlet DefaultServlet possde un paramtre de
configuration,listings,quipermetdautoriserounonlaffichageducontenudunrpertoiresiaucunepagepardfaut
nestconfigurepourlapplicationcontacte,cequiestlecaspardfaut.
DclarationdelaservletDefaultServlet :
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
LadeuximeservletestlaservletInvokerServlet,ellepermetdelancerlexcutionduneservletsimplementpartir
desaclasseJavaetduneURLassocieayantlasyntaxehttp://<serveur>/<application>/servlet/<nomdeclasse
deservlet>.Cemcanismeestdsactivpardfaut(ladclarationestencommentaire)pourdesraisonsdescurit,
maisilpeuttreractivpourdesbesoinsdetestsoudedveloppement.
DclarationdelaservletInvokerServlet :
<!-<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
-->
Enfin, la troisime servlet est la JspServlet, cest elle qui est responsable de la transformation des pages JSP en

ENI Editions - All rigths reserved

- 1-

servlet,ainsiquedeleurexcution,ellepossdebeaucoupdeparamtresdeconfigurationquipeuventtreajouts
afindoptimiserceprocessus.
DclarationdelaservletInvokerServlet :
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>
org.apache.jasper.servlet.JspServlet
</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
LasuitedecefichiercontientlesassociationsentrelesURLetlesservlets.IlsagitdedfinirlesURLtraitesparces
servlets.
La servlet InvokerServlet, par exemple, traitera toutes les URL de la forme /servlet/*, pour pouvoir appeler les
classes partir de leur nom. Cest la prsence de ce motif dans lURL qui dclenchera lappel de cette servlet, et la
priseenchargeparcellecidelarequte.
AssociationpourInvokerServlet:
<!-- The mapping for the invoker servlet -->
<!-<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->
LaservletJspServletestassocieaumotif*.jsp,cequiestnormalpuisquelledoittraiteretexcutertouteslesJSP
desapplications.notergalementquelemotif*.jspxestgalementassocilaJspServlet,etquilesttoutfait
possiblederajouterdautresmotifspersonnaliss.
AssociationpourJSPServlet :
<!-- The mapping for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
Lasectionsuivantedufichierweb.xmlconcernelavaleurpardfautpourlexpirationdessessions,laspcificationJEE
dfinitunevaleurpardfautde30minutes,etTomcat6nedrogepaslargle.Cettevaleurpeuttremodifieet
elleserautilisepartouteslesapplicationsWebduserveurquineredfinissentpasexplicitementcettevaleurdans
leurproprefichierweb.xml.
Paramtredexpirationdessessions :
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Lasectionsuivantedufichierdfinitlesassociationsentrelestypesdefichiersetleursextensions.Ceciapoureffetde
renseigner un entte HTTP avec lindication du type de ce fichier dans la rponse renvoye au client. Grce cette
information,lenavigateurWebsaitquelprogrammeutiliserpourouvrircefichier.
Dfinitiondestypesdefichiers :
<mime-mapping>

- 2-

ENI Editions - All rigths reserved

<extension>abs</extension>
<mime-type>audio/x-mpeg</mime-type>
</mime-mapping>
<!-- Beaucoup dautres associations... -->
<mime-mapping>
<extension>zip</extension>
<mime-type>application/zip</mime-type>
</mime-mapping>
Enfin,ladernirepartiedecefichierpermetdeconfigurerlespagesdaccueilpardfaututilisesparlesapplications.
Siunerequteversuneapplicationnefaitpasmentionduneressourceparticulire,alorsTomcat6chercheunedeces
pagesdanslerpertoiredecetteapplication,lapremiretrouveestlapremirerenvoyeauclient.Siaucunepage
nest trouve, alors Tomcat 6 peut, selon la valeur du paramtre listings de la servlet DefaultServlet, afficher un
messagederreur,oulecontenudurpertoiredebasedelapplication.
Encoreunefois,lesapplicationssontsusceptiblesdemodifierindividuellementceparamtredansleurproprefichier
web.xml.
Dfinitiondespagesdaccueilpardfaut :
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

2.Lefichiertomcatusers.xml
Ce fichier est utilis pour le mcanisme dauthentification par dfaut de Tomcat 6. En effet, Tomcat 6 est fourni avec
uneconfigurationquifaitintervenirungestionnairedauthentification,unlment<Realm>,detypeMemoryRealm.Ce
gestionnaire dauthentification est associ au fichier tomcatusers.xml qui contient les dfinitions de noms
dutilisateur, de mots de passe et des rles. Les applications de gestion de Tomcat 6, le manager et la console
dadministrationWeb,utilisentcefichierpourlauthentification.
Lefichiertomcatusers.xmlcontientdeuxtypesdentres,lesentrespourladfinitiondesrles,etlesentrespour
ladfinitiondesutilisateurs.
LapplicationmanagerdeTomcat6nestaccessiblequeparlesutilisateurspossdantlerlemanager,cerleestdonc
dclardanscefichier.Ensuite,unutilisateurestconfiguravecunnometunmotdepasse,puisilestassociaurle
manager,cestlutilisateuradmin.
Voicidonclefichiertomcatusers.xmlpersonnalis aveccesentres:
<?xml version=1.0 encoding=utf-8?>
<tomcat-users>
<role rolename="manager"/>
<user username="admin" password="secret" roles="manager "/>
</tomcat-users>
Cefichierpeuttremodifipouryajouterdesrlesspcifiquesdesapplicationssupplmentairesetlesutilisateurs
associs, mais dans un environnement de production, il est prfrable de remplacer ce mcanisme par une
authentificationbasesurunservicedannuaireLDAPouunebasededonnes,cetypedeconfigurationesttudiau
chapitreLascuritduserveuretdesapplications.

3.Lefichiercatalina.policy
Un des rles de la machine virtuelle Java est dassurer la scurit des applications et du systme dexploitation sur
lequelellessexcutentparunmcanismeinterneappelgestionnairedescurit(SecurityManager).Cegestionnaire
de scurit permet de grer des autorisations daccs aux diffrentes ressources quun programme Java pourrait
utiliser.
Par dfaut, lexcution de Tomcat 6 se fait sans gestionnaire de scurit, cestdire que les applications Web
dployes dans le serveur peuvent dclencher tout type dactions, comme lire et crire des fichiers, lancer des
programmes,ouvrirdesfluxrseau,etmmearrterlamachinevirtuelleJava.
PourdmarrerTomcat6enmodescuris,ilsuffitdelancerleserveuravecloptionsecuritysurlescriptstartup.bat
ou startup.sh, le gestionnaire de scurit est activ, et tout ce qui nest pas explicitement autoris dans le fichier
catalina.policy, est interdit. Le chapitre La scurit du serveur et des applications revient plus en dtail sur la
configurationdugestionnairedescurit,etsurleformatdecefichier.
ENI Editions - All rigths reserved

- 3-

- 4-

ENI Editions - All rigths reserved

Configurationderessources
LaplateformeJEEproposeunensembledAPIdeservicesmisen uvreparunserveurdapplications,telsquelaccs
aux bases de donnes ou encore la connectivit des serveurs de messagerie lectronique. Les ressources rendues
disponiblesparleserveursontensuitedirectementexploitablesparlesapplicationsdployesdansceserveur.
La configuration de ces ressources dans un serveur dapplications utilise un service particulier appel service de
nommage.Leprincipeduservicedenommageestdeproposerunestructurepourorganiseretnommercesressources,
etdefournirunmcanismederecherchedecesressourcespourlesapplicationsquidoiventlesutiliser.Unservicede
nommageestmisen uvregrcelAPIJNDI.
JNDIestuneAPIdeserviceJEEquipermetdefournirunmcanismederecherchedinformations,enplusdimplmenter
ce service de nommage de ressources, JNDI permet galement la recherche dinformations dans des structures
dannuairestellesquelesannuairesLDAP,oulesannuairesNIS(NetworkInformationService)sousUNIX.Lemcanisme
de recherche implment dans les applications est indpendant de la structure dans laquelle la recherche se fait, la
passerelletantassureparunpilotedaccsunservicedenommageoudannuaireparticulier.
Tomcat6offreunsupportcompletdelAPIJNDI,permettantdabordunenregistrementdesressourcesconfiguresviale
fichierserver.xml,maisgalementenfournissantuneinterfacederecherchedecesressourcespourlesapplications.
LiaisonetrechercheJNDI
Lors de la configuration dune ressource, ladministrateur du serveur fournit un nom pour cette ressource, appel nom
JNDI, cette opration est appele liaison JNDI. Une fois la ressource configure et nomme, elle est disponible la
recherchepourlesapplications.Larecherchesefaitendeuxtapes:dabordlapplicationobtientlepointdedpartdu
servicedenommageJNDIappelcontexteinitialJNDI,puisellerecherchelaressourcequelleveutobtenirpartirdeson
nom JNDI, la ressource recherche est obtenue sous forme dun objet Java qui peut tre maintenant manipul par
lapplication.
Un service de nommage JNDI se prsente sous forme dune arborescence de ressources, le point de dpart tant le
contexte initial JNDI. Il est possible denregistrer les ressources directement la racine du contexte initial, ou bien
dutiliserdessousniveauxhirarchiques,certainssonttrscourantscommeparexemplejdbc/ouencoremail/.
Tomcat 6 utilise plusieurs lments de configuration pour dclarer les ressources JNDI, notamment les lments
<Resource> et <ResourceLink>. Ces lments peuvent tre dclars en tant qulments enfants de
<GlobalNamingResources>,<Context>dufichierserver.xml,maisgalemententantqulmentsenfantsducontextepar
dfaut,toutdpenddelavisibilitqueladministrateurveutdonnercesressources.

1.Visibilitetportedesressources
LesressourcesJNDIdeTomcat6peuventtreconfigurestroisniveauxdeportediffrents.Ellessontdisponibles
soitpour :

uneseuleetuniqueapplication,siellessontdclaresdansunlment<Context>,

lensembledesapplicationsdunhte,siellessontdclaresdanslecontextepardfaut,

toutleserveur,siellessontconfiguresdansllment<GlobalNamingResources>.

Uneressourceestdclareavecllmentdeconfiguration<Resource>,danslecasocettedclarationsefaitdansun
lment<Context>oulecontextepardfaut,laressourceenquestionestdirectementvisibleparlaoulesapplications
qui doivent utiliser le nom JNDI de cette ressource. Par contre, si cette dclaration se fait dans llment
<GlobalNamingResources>,cetteressourcenestvisiblequeparleserveurTomcat6etilfaudralarendreexplicitement
visible pour une ou plusieurs applications en ralisant un lien vers cette ressource globale grce llment
<ResourceLink>,cestlenomJNDIdecelienquiestutilisparlapplication.
Exemple :
Dclaration dune ressource globale, et dun lien pour une application. Lapplication utilisera le nom local, cestdire ici
maRessourceLocale.
<Server ... >
<GlobalNamingResources>
<!-- Dclaration dune ressource globale -->
<Resource name="maRessource" />
</GlobalNamingResources>
...
<Host ... >

ENI Editions - All rigths reserved

- 1-

<Context ... >


<!-- Dclaration dun lien sur la ressource globale -->
<ResourceLink name="maRessourceLocale"
global="maRessource" ... />
</Context>
</Host>
...
</Server>
Cette mthode est celle qui est aujourdhui prconise, et ce pour deux raisons. Dabord, llment
<GlobalNamingResources>estddiaccueillirlesressourcesJNDI,ellessontdecefaitcentralises.Lautreraisonest
que lutilisation de ce mcanisme permet lapplication de ne pas imposer le nom JNDI de la ressource. En effet,
lapplicationutiliselenomJNDIpourlarecherche,cenomestenfaitceluidellment<ResourceLink>quinestutilisable
queparcetteapplication,lenomreldelaressourcepeuttrechoisiparladministrateur.
Lesattributsobligatoiresdellment<Resource>sont :
name :lenomJNDIdonnercetteressource.
type :letypededonneJavadecetteressource.
Lattributfacultatifdescriptionpeuttreutilispourdcrirelaressourceetsonmodedefonctionnementparexemple.
Lattribut auth peut galement tre ajout pour indiquer le mode dauthentification utilis pour laccs cette
ressource,siellerfrenceunebasededonnes,parexemple,ilpeuttrencessairedefournirunidentifiantetun
mot de passe. Si auth vaut Container, alors la configuration dans le serveur doit faire mention de ces donnes
dauthentification,sinonauthvautApplicationetcestlapplicationquidoitfournircesinformations.
Exemple:
LaressourceUserDatabasefaitrfrenceaufichiertomcat users.xml.
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved">
...
</Resource>
Llment<Resource>seulnestpassuffisantpourconfigureruneressource,ilfautgalementprciserdesparamtres
deconfiguration:danslexemplecidessus,unparamtredevraitfairerfrenceaufichiertomcatusers.xml,etdansle
casduneconfigurationdaccsunebasededonnes,ilfautpouvoirfournirlesparamtresdaccscettebase(nom
dhte,port,).
Exemplededclarationduneressource :
<GlobalNamingResources>
...
<Resource
name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
AvecTomcat6,lesparamtressontdonnssousformedattributssupplmentairessurllment<Resource>,lenomde
lattributtantlenomduparamtre,etlavaleurdelattribut,lavaleurduparamtre.

2.PoolsdeconnexionetDataSourceJDBC
Laconnectivitauxbasesdedonnes
La connexion aux bases de donnes en Java se fait grce lAPI JDBC. Dans le principe, JDBC permet dcrire des
applications indpendamment de la base de donnes utilise. JDBC ncessite donc dutiliser une passerelle entre le
programmeetlabasededonnes,lepiloteJDBC.
IlexisteplusieurstypedepiloteJDBC,etcepourlamajoritdesbasesdedonnessurlemarch.
Les pilotes de type1 sont des passerelles entre JDBC et ODBC (Open DataBase Connectivity) des systmes Microsoft
Windows. Laccs la base de donnes par le programme se fait grce la partie Java du pilote JDBC, puis la
configurationODBCdeWindows,lesbibliothquesspcifiquesODBC,etenfinlabasededonnes.Legrandnombrede
coucheslogiciellestraversesfaitquelesperformancesnesontpasaurendezvous !

- 2-

ENI Editions - All rigths reserved

Les pilotes detype 2 sont des pilotes dvelopps en utilisant la fois les technologies Java et des librairies natives
(donc dpendantes du systme dexploitation, comme des fichiers DLL, par exemple) pour se connecter la base de
donnes.Laportabilitdecetypedepilotenestpaspossibleentrelessystmesdexploitation.
Lespilotesdetype3sontexclusivementdveloppsenJava,maisnepeuventpasseconnecterdirectementlabase
dedonnes,ilsutilisentunlogicielintermdiaireappelmiddlewaredebasededonnes,quilfautinstaller,configurer
etmaintenir.
Enfin,lespilotesdetype4sontgalementexclusivementdveloppsenJava,maispeuventseconnecterdirectement
la base de donnes : ils ne ncessitent rien de plus que le code quils contiennent. Les avantages sont multiples,
dabord,lenombredecouchesutilisesestrduitsonminimum,lesappelsverslabasededonnessontdoncplus
rapides. De plus, tant 100% Java, ils sont totalement portables entre les architectures matrielles et les systmes
dexploitation.
LestapesdeprogrammationpourlcritureduneapplicationJavaquiutiliseJDBCsontlessuivantes :

Obteniruneconnexionauserveurdebasededonnes.

CreretprparerunerequteSQL.

ExcuterlarequteSQL.

Rcuprerlejeudenregistrement(encasderequtedinterrogation).

Fermerlaconnexionauserveurdebasededonnes.

LepoolingdeconnexionJDBC
Danslecasdesapplicationsdetypeclient/serveurchaquebesoindeconsultationdesdonnesdanslabasencessite
la cration dune connexion. Ce mode de fonctionnement est trs inadapt aux applications Web car les besoins de
connexion sont plus frquents, et le nombre de clients peut tre beaucoup plus important. Enfin, la cration des
connexionslademandeestuneoprationtrscoteuseentempsetenressourcesprocesseuretmmoire.
Pour augmenter les performances et diminuer les temps de rponse, les applications JEE utilisent un mcanisme du
serveurdapplicationsappelpoolingdeconnexion,permettantdemieuxgrerlesconnexionsqueparlesapplications
directement.
UnpooldeconnexionJDBCestunserviceconfigurabledunserveurdapplicationsquirenddisponibledesconnexions
unebasededonnes,etquiestresponsabledeleurcrationetdeleurventuelledestruction,ilestenregistrentant
queserviceJNDIduserveur.
Lutilisationdunpooldeconnexionpossdeplusieursavantages:dabord,lesapplicationsnontpluslaresponsabilit
decreretdedtruirelesconnexions,carcestleserveurdapplicationsquisencharge,puislesconnexionsnesont
pasdtruiteslafindeleurutilisation,ellessontrenvoyesdanslepooldeconnexionspourtrerutilises.Ensuite,
labstractiondelapplicationparrapportlabasededonnesestencoreplusfortepuisquesicettedernirechange,
cest la configuration du pool de connexion qui est modifier. Enfin, un mme pool de connexion est utilisable par
plusieursapplicationssimultanment,etlenombredeconnexionsquilrenddisponibleestfacilementparamtrable.
Pourobteniruneconnexionlabase,lapplicationdoit :

localiserlepooldeconnexionenfaisantunerechercheJNDI

demanderuneconnexiondanslepool.

McanismedinteractionentreuneapplicationetunpooldeconnexionJDBC :

ENI Editions - All rigths reserved

- 3-


ConfigurationdunpooldeconnexionJDBCavecTomcat6
LemcanismedepooldeconnexionJDBCdeTomcat6estbassurlabibliothquecommonsdbcpduprojetJakarta.
Le prrequis ncessaire au bon fonctionnement de ce systme est la disponibilit dun pilote JDBC pour la base de
donnesutiliser.SelonletypedupiloteJDBC,saprocduredinstallationpeutvarier,maisaujourdhui,lamajoritdes
pilotessontdetype4,etleurinstallationestaussisimplequedecopierlesfichiers .jardontilssontconstitusdansle
rpertoireCATALINA_HOME/libdeTomcat6.
PourpouvoirconfigurerunpooldeconnexionJDBC,ilfautdeuxinformationsimportantes,dabord,lenomdelaclasse
Java principale du pilote JDBC, et ensuite lURL daccs la base de donnes. Ces informations sont diffrentes dun
piloteJDBCunautre,etleseulmoyendobtenircesinformationsestdeconsulterladocumentationdupiloteJDBC.
LaconfigurationdunpooldeconnexionJDBCdansTomcat6meten uvrellmentdeconfiguration<Resource>.Cet
lmentrequiert,parmisesattributs,celuiquifaitrfrenceautypeJavadelaressourcequiestconfigure.Letype
JavadunpooldeconnexionJDBCestjavax.sql.DataSource.
En plus des attributs name, auth, et type, obligatoires pour <Resource>, il faut indiquer les quatre informations
suivantes :

LenomdelaclasseJavadupiloteJDBC (driverClassName)

LURLdeconnexionlabasededonnes (url)

Lenomdutilisateur(username)etlemotdepasseassoci(password),pourseconnecterlabase.

Des informations de dimensionnement et fonctionnement interne du pool de connexions JDBC sont galement
disponibles,voicilesprincipales :
initialSize : le nombre de connexions prsentes dans le pool de connexions JDBC au dmarrage de Tomcat 6. La
valeurpardfautest0.
maxActive :dfinitlenombremaximumdeconnexionsquipeuventtreactivessimultanmentdanslepool.Lavaleur
pardfautest8.
maxIdle :dfinitlenombremaximumdeconnexionsenattentedanslepool.Lavaleurpardfautest8.
minIdle :dfinitlenombreminimumdeconnexionsenattentedanslepool.Lavaleurpardfautest0.
maxWait :letempsdattente,exprimenmillisecondes,avantquelepoolnerenvoieuneerreurdanslamesureosi
une connexion est demande mais aucune nest disponible. La valeur par dfaut correspond un temps dattente
indfini.
Cesinformationsdedimensionnementdupoolpermettentdaugmenterlesperformancesdesapplicationsquiutilisent
ce pool. Le fait de dfinir une valeur maximum et minimum de connexions en attente, permet davoir un lot de
connexionstoujoursdisponiblespourlesapplications.Lenombretotalmaximumdeconnexionsdoitprendreencompte
lescapacitsdelabasededonnestraitercenombredeconnexions,ainsiquedesconsidrationsdelicences
Enutilisantuneconnexiondunpool,uneapplicationWebdoitexplicitementfermerlesressourceslorsquelleatermin
de travailler, la fermeture de ces ressources provoque le retour de la connexion dans le pool. Si une application ne

- 4-

ENI Editions - All rigths reserved

fermepascesressources,causeduneerreurdanslecodeoutoutsimplementparoublidelapartduprogrammeur,
alorselleestconserveparlapplicationetneretournepasdanslepool,jusquvidagecompletdeceluici.
Pour remdier ce problme, trois paramtres de configuration permettent de forcer le retour des connexions
inutilisesverslepool.
removeAbandoned : permet dactiver ce mcanisme de nettoyage des connexions inutilises. La valeur par dfaut est
true.
removeAbandonedTimeout : le temps, exprim en secondes, au bout duquel une connexion maintenue par une
application,estconsidrecommeinutilise.Ledlaipardfautest300.
logAbandoned :permetdcrireunetracedesnettoyagesdanslesfichiersjournauxdeTomcat6.Lavaleurpardfaut
estfalse.
Miseenuvre
Pour illustrer ce fonctionnement, voici la configuration complte pour une application simple qui affiche une liste
demploysdansunnavigateurWeb.
LabasededonnesutiliseestMySQL5,lenomdelabaseest demo,ellepossdeunetable employedontvoicila
structure :

LaconfigurationdupooldeconnexionJDBCpourlaccscettebaseestlasuivante(danslefichierserver.xml).
Configuration:
<Server ... >
<GlobalNamingResources>
<Resource name="jdbc/GlobalDemo"
type="javax.sql.DataSource"
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/demo"
username="root" password="secret" />
</GlobalNamingResources>
<Service ... >
<Engine ... >
<Host ... >

ENI Editions - All rigths reserved

- 5-

<!-- Lapplication qui utilise le pool de connexion -->


<Context path="/ListeEmployes" docBase="ListeEmployes">
<ResourceLink name="jdbc/demo"
global="jdbc/GlobalDemo"
type="javax.sql.DataSource" />
</Context>
</Host>
</Engine>
</Service>
</Server>
Avantdepouvoirtesterlaconfiguration,ilfautsassurerquelepiloteJDBCpourMySQL5estprsentdanslerpertoire
CATALINA_HOME/lib.
Le pilote JDBC pour MySQL 5 est librement tlchargeable sur le site http://www.mysql.com et se nomme mysql
connectorjavax.y.zbin.jar,oux.y.zcorrespondaunumrodeversiondupilote,laversionactuelletantla5.0.3.
Lersultataffichdanslafentredunavigateur :

LapplicationcontientuneservletquiprocdedabordunelocalisationJNDIdupooldeconnexion,quidemandeune
connexion,puisquiexploitecetteconnexionpourinterrogerlabasededonnes,pourfinalementafficherlalistedes
employsverslenavigateur.
LocalisationJNDIetrcuprationduneconnexiondanslaservlet :
// Localisation JNDI...
Context initialContext = new InitialContext();
Context localContext = (Context)
initialContext.lookup("java:comp/env/");
DataSource ds = (DataSource) localContext.lookup("jdbc/demo");
// Rcupration dune connexion...
Connection c = ds.getConnection();
Dclarationdelaressourcedansledescripteurdedploiementweb.xml :
...
<resource-ref>
<res-ref-name>jdbc/demo</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
...

- 6-

ENI Editions - All rigths reserved

IlexistedautresparamtresdeconfigurationpourlegestionnairedepooldeconnexionJDBCJakartaDBCP.Pourplus
dinformations,voirlurlsuivante:http://jakarta.apache.org/commons/dbcp.

3.SessionsJavaMail
JavaMailestlAPIstandardJEEpourlacration,lenvoietlarceptiondemessageslectroniques.ToutcommeJDBCou
JNDI,JavaMailpermetdcriredesprogrammesenrestantindpendantdusystmesousjacent.
LimplmentationpardfautdeJavaMailsupportelesprotocolesdebasedelamessagerielectronique :SMTP,POP3et
IMAP4,desextensionspeuventtreajoutespoursupporterdautresprotocolespropritaires.
LesupportdeJavaMaildansunserveurdapplicationsJEEestgnralementfournisouslaformedesessionsJavaMail
configures en tant que ressources JNDI. Une session JavaMail encapsule toutes les informations de configuration
ncessaireslaconnectivitavecunserveurdemessagerielectronique.UnesessionJavaMailestunobjetdetype
javax.mail.Session.
UneapplicationWebJEEpeuttoutfaitenvoyerunmessagelectroniqueenrcuprantlasessionJavaMaildansle
serveur,puisencomposantetenenvoyantlemessage.
Les bibliothques de lAPI JavaMail ne sont pas prsentes par dfaut dans le serveur Tomcat 6, il faudra donc les
tlcharger,puislesinstaller.
LutilisationdeJavaMailncessitedeuxAPI,dabord JavaMail, mais galementJAF(Java Activation Framework) qui est
uneextensionncessaireJavaMail.
JavaMailestdisponibleladressehttp://java.sun.com/products/javamail/
JAFestdisponibleladressehttp://java.sun.com/products/javabeans/jaf/
UnefoiscesdeuxAPItlcharges,ilfautextrairelecontenudesfichiersZIPetcopierlesfichiersmail.jar(JavaMail)et
activation.jar(JAF)danslerpertoireCATALINA_HOME/lib.
LaconfigurationdunesessionJavaMaildansTomcat6sefaitgalementgrcellment<Resource>etsesattributs
name,authettype,danscecastypevaudrajavax.mail.Session.
Dautres informations peuvent tre ncessaires, ce sont toutes celles qui permettent la configuration de laccs au
serveurdemessagerie.Ellessontfourniessousformedattributsdeconfigurationsupplmentairessur<Resource>.
Cesinformationsdeconfigurationsontlessuivantes :
mail.transport.protocol :leprotocoledemessagerieutiliser.PardfautSMTP.
mail.smtp.host :lenomdhteduserveurdemessagerieutiliser.Pardfaut,localhost.
mail.smtp.port:leportduserveurdemessagerie,enfonctionduprotocole.Pardfautlavaleurest25.
mail.smtp.auth :indiquesileserveurdemessagerieutilisncessiteuneauthentificationoupas.Lavaleurpardfaut
estfalse.
mail.smtp.user :lenomdutilisateursiuneauthentificationestncessaire.Ilnyapasdevaleurpardfaut.
mail.smtp.password :lemotdepassesiuneauthentificationestncessaire.Ilnyapasdevaleurpardfaut.
Exempledeconfiguration :
<Server ... >
<GlobalNamingResources>
<Resource name="jdbc/GlobalMailSession"
type="javax.mail.Session"
auth="Container"
mail.smtp.host="smtp.monentreprise.com"
mail.smtp.auth="true"
mail.smtp.user="elanglet"
mail.smtp.password="secret" />
</GlobalNamingResources>
<Service ... >
<Engine ... >
<Host ... >
<!-- Lapplication qui utilise la session JavaMail -->
<Context path="/ListeEmployes" docBase="ListeEmployes">
<ResourceLink name="mail/Session"
global="mail/GlobalMailSession"
type="javax.mail.Session" />
</Context>

ENI Editions - All rigths reserved

- 7-

</Host>
</Engine>
</Service>
</Server>
Une application qui veut utiliser un service de message lectronique via une session JavaMail, doit utiliser le code
suivant pourrcuprerlasession :
...
Context initialCtx = new InitialContext();
Context localCtx = (Context) initialContext.lookup("java:comp/env");
Session session = (Session) localCtx.lookup("mail/Session");
...
Enfin, lapplication doit galement dclarer, dans son descripteur de dploiement web.xml, cette ressource quelle
utilise :
...
<resource-ref>
<res-ref-name>mail/Session</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>
...

4.JavaBeans
LederniertypedeserviceconfigurableentantqueressourceJNDIestunefabriquedobjetsJava.Cesobjetssonttrs
courammentutilissparlesprogrammeurs,ilscontiennentdesdonnessousformecompacte.Parexemple,pluttque
dedevoirmanipulerindividuellementdesdonnesdetypenom,prnom,adresse,tlphone,ilestpluttrecommand
decrerunobjetcontenanttoutescesinformations,ilseraplussimpledemanipulerunobjetqueplusieursdonnes.
CesobjetsparticulierssontappelsJavaBeans.UnJavaBeancontientdespropritsreprsentantlesdonnes,ainsi
quedesfonctions(appelesmthodesenJava)permettantdelireetdemodifiercesdonnes.
Parexemple,unepropritquireprsenteleprnomdunepersonnescriraitcommececi :
private String prenom;
Pourlirecettevaleur,lamthodeutilisesappellegetPrenom() :
public String getPrenom() {
return prenom ;
}
Enfinpourmodifiercettevaleur,lamthodesetPrenom(Stringp) :
public void setPrenom(String p) {
prenom = p ;
}
UnJavaBeannestniplusnimoinsquuncomposantJavaquicontientunensembledecespropritsetcesmthodes
pouryaccder.LaconfigurationdunJavaBean,entantqueressourceJNDIdansTomcat6,permetuneapplicationde
rcuprerundecesJavaBeancontenantdesvaleursspcifiquesdclaresdanslaconfiguration.
Llmentdeconfiguration<Resource>estencoreutilis,avecsesattributsname,typeetauth,danscecas,typedevra
prendre le nom de la classe du JavaBean. Une proprit est indispensable dans ce type de configuration, il sagit de
factory, elle indique le nom de la classe qui fabrique les objets. Il est tout fait possible dcrire sa propre classe,
cependant,Tomcat6enfournitune,sonnomestorg.apache.naming.factory.BeanFactory.
Voiciunexemplesimple.
LaclasseJavaduJavaBean :
package fr.eni.editions.ritomcat.beans;
public class Personne {
private String prenom;
private String nom;
- 8-

ENI Editions - All rigths reserved

public Personne() { }
public String getNom() {
return nom;
}
public void setNom(String n) {
nom = n;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String p) {
prenom = p;
}
}
Laconfigurationdanslefichierserver.xml :
<Server ... >
<GlobalNamingResources>
<Resource name="bean/GlobalPersonne"
type="fr.eni.editions.ritomcat.beans.Personne"
auth="Container"
factory="org.apache.naming.factory.BeanFactory"
nom="LANGLET"
prenom="Etienne" />
</GlobalNamingResources>
<Service ... >
<Engine ... >
<Host ... >
<!-- Lapplication qui utilise la session JavaMail -->
<Context path="/ListeEmployes" docBase="ListeEmployes">
<ResourceLink
name="bean/Personne"
global="bean/GlobalPersonne"
type="fr.eni.editions.ritomcat.beans.Personne" />
</Context>
</Host>
</Engine>
</Service>
</Server>
Pourrcuprercetobjet,lapplicationdoitutiliserlecodesuivant :
...
Context initialCtx = new InitialContext();
Context localCtx = (Context) initialCtx.lookup("java:comp/env");
Personne p = (Personne) localCtx.lookup("bean/Personne");
...
Etdclarercetteressourcedanssondescripteurdedploiementweb.xml :
...
<resource-env-ref>
<resource-env-ref-name>
bean/Personne
</resource-env-ref-name>
<resource-env-ref-type>
fr.eni.editions.ritomcat.beans.Personne
</resource-env-ref-type>
</resource-env-ref>
...

5.Entresdenvironnement

ENI Editions - All rigths reserved

- 9-

JNDIpermetaussiuneoprationtrssimpleconsistantdclarerdesvaleursnumriques,deschanesdecaractres...
danslaconfigurationJNDIduserveur,etdelesrcuprerdanslesapplications.Cemcanismeesttrspratiquepour
faire partager des valeurs de configuration communes entre plusieurs applications, cest dailleurs le moyen le plus
simple,carcesapplicationssontindpendanteslesunesdesautres.
Llment de configuration qui permet la cration dentre denvironnement sappelle <Environment>, il possde les
attributsname,type,descriptionetvalue,etpeutsepositionnerauxmmesemplacementsquellment<Resource>.
Lattributname permet dattribuerlenomdecetteentredenvironnent,etvaluesavaleur.Letypespcifipeuttre
java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Float, java.lang.Integer,
java.lang.Long,java.lang.Short,oujava.lang.String.
Syntaxe :
<Environment
name="email"
description="Adresse email de ladministrateur du serveur"
type="java.lang.String"
value="admin@monentreprise.com" />
Exempledeconfiguration :
<Server ... >
<GlobalNamingResources>
<Environment
name="GlobalEmail"
description="Adresse email de ladministrateur du serveur"
type="java.lang.String"
value="admin@monentreprise.com" />
</GlobalNamingResources>
<Service ... >
<Engine ... >
<Host ... >
<!-- Lapplication qui utilise lentre denv. -->
<Context path="/ListeEmployes" docBase="ListeEmployes">
<ResourceLink
name="email"
global="GlobalEmail"
type="java.lang.String" />
</Context>
</Host>
</Engine>
</Service>
</Server>
Lecodeutiliserdanslesapplicationspourrcuprerlavaleurestalors :
...
Context initialCtx = new InitialContext();
Context localCtx = (Context) initialCtx.lookup("java:comp/env");
String email = (String) localCtx.lookup("email");
...
Lensemble des ressources et entres denvironnement dclares dans la section GlobalNamingResources sont
visualisablesaveclapplicationmanagerdeTomcat6,enutilisantlURLhttp://localhost:8080/manager/resources.

- 10 -

ENI Editions - All rigths reserved

LoutildadministrationdeTomcat6
Danslesexemplesprcdentsdecechapitre,toutelaconfigurationestraliseenditantmanuellementlesfichiersde
configuration.Cetteapprochepossdedenombreuxavantages,ellepermetnotammentdavoiruncontrlecompletdu
serveur,sansncessiterdoutildadministrationparticulier,deplus,travailleravecdesimplesfichierstextespermetde
facilementrecopierdesconfigurationsentreplusieursmachines.
Cependant,lesadministrateursdesystmesWindows,quisontengnralassezloindecetteapproche,peuventtre
droutsparcettemaniredegrerleserveur.
partir de la version 4.1 de Tomcat, un outil dadministration a fait son apparition, cest un outil dadministration qui
sutilisedansunnavigateurWebetquinerequiertdoncaucuneinstallationparticuliresurlepostedeladministrateur.
LaconsoledadministrationWebdeTomcat6reprendtouteslesfonctionnalitsdesversionsprcdentes,toutentant
beaucoupplusfiable,cestuneapplicationWebdployedansleserveurTomcat6,etrequiertdoncqueleserveursoit
dmarrpourpouvoirtreutilis,cetteapplicationsappelleadmin.
CetteconsoledadministrationnestenfaitquunevuegraphiquesurleslmentsdeconfigurationduserveurTomcat6,
ellenepermetpasdetoutfaire,etuneconnaissance,mmeminimum,delastructuredesfichiersestncessaire.
LaccslaconsoledadministrationWebestrestreintparauthentification,lutilisateurauthentifidoitpossderlerle
admin.
InstallationdelaconsoledadministrationpourTomcat6
Danslaversion6deTomcat,laconsoledadministrationWebnestpasinstallepardfaut,ellenestfourniequedans
larchiveducodesourcedeTomcat.IlestdoncncessairedecompilerTomcat6partirdesessourcespourbnficier
decetoutil.Cependant,lutilisationdelaconsoledadministrationnestabsolumentpasindispensable.

1.Configurationdelaccslaconsoledadministration
AvantdepouvoirutilisercetteconsoledadministrationWeb,ilestncessairedenconfigurerlaccsvialesystmede
gestionnairedauthentification(Realm)deTomcat6.Pardfaut,lagestiondelauthentificationsefaitgrceaufichier
tomcatusers.xml, cependant, il faudra adapter cette procdure si le gestionnaire dauthentification par dfaut
(MemoryRealm)atremplacparungestionnaireJDBCouungestionnaireJNDI.
Ilyadeuxtapesdeconfiguration,ilfautdansunpremiertemps,dclarerlerleadmin,puisajouterunutilisateuret
luiattribuercerle.Ilestgalementpossibledattribuercerleunutilisateurexistant.
Voicilefichiertomcatusers.xmlaveccesinformations :
<?xml version=1.0 encoding=utf-8?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="secret" roles="manager,admin"/>
</tomcat-users>
Aprs avoir modifi ce fichier, il faut redmarrer le serveur pour quil prenne en compte les modifications apportes,
laccslaconsolesefaitensuitevialURLhttp://localhost:8080/admindepuislamachinelocale,ouencliquantsur
lelienTomcatAdministrationsitusurlapagedaccueilduserveur.

2.Naviguerdanslaconsoledadministration
Aprsauthentificationsurlapagedaccueildelaconsoledadministration,linterfaceapparatetsedcomposeentrois
parties distinctes. gauche se trouve larborescence de la configuration du serveur, en haut se trouve la partie de
linterface permettant de sauvegarder les modifications et de quitter linterface, et la partie centrale qui affiche les
cransdeconfiguration.
InterfacedelaconsoledadministrationWeb :

ENI Editions - All rigths reserved

- 1-


Larborescence de gauche est dcoupe en trois parties qui correspondent diffrentes sections des fichiers de
configurationdeTomcat6.LapremirepartieintituleTomcatServercorrespondlintgralitdufichierserver.xml,
en fait cette partie fait rfrence llment racine de ce fichier : llment <Server>. Ensuite, la partie appele
Resources fait rfrence la section GlobalNamingResources du fichier server.xml, utilis pour dclarer les
ressources JNDI globales au serveur. Enfin, la partie User Definition est une reprsentation du fichier tomcat
users.xml.
La navigation dans les diffrentes parties de cette interface se fait dans un premier temps sur larborescence de
gauche,larecherchedellmentsurlequelilfautmodifierlaconfigurationouajouterunlmentenfant.Unefois
llmentdeconfigurationslectionn,saconfigurationapparatdanslapartiecentraledelinterface,ainsiquelemenu
droulantAvailableActions.Cemenurpertorietouteslesactionspossiblessurllmentencoursdeconsultation.
ChaquecrandeconfigurationapparaissantdanslapartiecentraledelinterfacepossdelesboutonsSaveetReset
permettantrespectivementdesauvegarderlaconfigurationetdelarinitialisercesvaleursprcdentes.
LeboutonSavenepermetpasdcrirelaconfiguration,ilsertsimplementvaliderlesmodifications,ellessontcrites
enmmoire,lcrituredelaconfigurationenmmoiresefaitavecleboutonCommitChangesdelapartiesuprieure
delinterface.
Impactdesmodificationssurlefichierserver.xml
LorsdelcrituredesmodificationsavecleboutonCommitChanges,lefichierserver.xmlestentirementrcritparla
console dadministration, la version prcdente du fichier est sauvegarde dans un fichier qui contient la date de
sauvegarde dans son nom, par exemple server.xml.2006.04.29101142 pour un fichier sauvegard le 29 avril
2006 10 heures 11 minutes et 42 secondes. De plus, les diffrents commentaires du fichier sont supprims, ces
commentaires contiennent des exemples de configuration dans la version initiale du fichier, il est donc judicieux den
raliserunecopiepourpouvoirreprendrefacilementcesexemples.

3.ConfigurationduserveurTomcat
Lescransdeconfigurationdelaconsolecontiennentdesinformationsquisontliesauxattributsdeconfigurationde
llment courant, et dans certains cas, des lments enfants, par exemple, un cran de configuration de<Context>
contientaussidesinformationspourconfigurerlegestionnairedesessiondecetteapplicationavec<Manager>.
Leszonesdesaisiedesinformationssontintitulesengnralaveclenomdelattributquiserautilisdanslefichier
server.xml gnr, il est donc assez facile dutiliser cette console dadministration tout en faisant rfrence la
syntaxedeslmentsetattributsdeconfigurationdecefichier.
Lorsquelaconfigurationduserveurestmodifieetquelleestsauvegarde,Tomcat6rechargeautomatiquementles
modifications du fichier, et redmarre les applications. Cest un avantage non ngligeable par rapport ldition
manuelledufichierquincessitetoujoursunredmarrageduserveur.Ainsi,lajoutdunpooldeconnexionpourune

- 2-

ENI Editions - All rigths reserved

application, par exemple, ne requiert pas de redmarrer le serveur, la nouvelle ressource est prise en compte
dynamiquementetlapplicationpeutlutiliser.
Limitationsdelaconsole
Lapremirelimitationestcellevoqueprcdemment,lescommentairesdufichierserver.xmlsontsupprimsetle
fichierestducoupmoinslisible.
Uneautrelimitedelaconsoleestquelescransdeconfigurationneprsententpastouslesattributsdeconfiguration
possibles pour un lment donn. Ainsi, pour un pool de connexion JDBC, lattribut permettant de positionner le
nombre de connexions initiales nest pas propos, il faudra donc diter manuellement le fichier pour rajouter cet
attribut.
Finalement, cette console dadministration possde lavantage de gnrer des lments de configuration avec les
valeurs les plus courants, et ce avec une syntaxe correcte et sans oublis ! Elle peut servir construire un fichier de
configurationbasiquequiseraensuitepersonnalisparlajoutdattributsunpeuplusspcifique,ensachantqueles
attributsajoutsmanuellementnesontnimodifisnisupprimsparlaconsole.

ENI Editions - All rigths reserved

- 3-

Introductionaudploiementetlagestiondesapplications
LeserveurTomcat6estunconteneurWeb(oumoteurdeservlet),cetitre,ilestuniquementcapabledeprendreen
chargelesapplicationsWebJEE(cestdirelesapplicationsdveloppesbasedeServletetdeJSP).
CesapplicationsWebsontfourniessousformederpertoirescontenantlesdiffrentesressourcesquilesconstituent,
ou bien sous forme darchivesdedploiement(fichiers.WAR)empaquetantcesressourcescommenouslavons vu au
chapitreAdministrationduserveur.

ENI Editions - All rigths reserved

- 1-

DployeruneapplicationdansTomcat6
Ilexisteplusieursmthodespermettantdinstaller(onutilisegalementletermedployer)uneapplicationdansTomcat
6, selon les cas dutilisation du serveur. En dveloppement, il est apprciable de pouvoir installer une application en
copiantsimplementlefruitdesontravaildanslerpertoireadquatdeTomcat6,alorsquesurunserveurdeproduction,
onprfreavoiruncontrleplusfindesdiffrentesoptionsdinstallation,grcedesdoutilsdadministration.

1.Dploiementautomatiquedapplications
Le dploiement automatique dapplications Web, permet dinstaller et de rendre disponible de nouvelles applications,
sans avoir besoin de redmarrer le serveur. Cette configuration est idale lorsque le serveur Tomcat 6 est utilis en
phasededveloppement,puisquellepermetauxdveloppeursdefacilementtesterleursapplications.
Lefichierserver.xmldeTomcat6contientllmentdeconfiguration<Host>,cetlment,commenouslavonstudiau
chapitreAdministrationduserveur,possdelattributautoDeploy,quipermetdactiverledploiementautomatique,ce
quiestlecaspardfaut.
<Host name="localhost" appBase="webapps" unpackWARs=true
autoDeploy=true xmlValidation=false
xmlNamespaceAware=false>
...
</Host>

2.Utiliserlerpertoirewebapps/
LamthodelaplussimplepourdployeruneapplicationWebJEEdansTomcat6,consistesimplementdposerdans
lerpertoirewebapps/delarborescenceduserveur,lerpertoirecontenantlapplication,oubienlarchivedapplication
Web(fichier.WAR).
Siledploiementautomatiquedesapplicationsestactiv,leserveurdploieetrendlapplicationdisponiblesansquil
soitncessairedeleredmarrer.Audmarrageduserveur,touteslesapplicationsprsentesdanscerpertoiresont
rendues disponibles par Tomcat 6 par la cration automatique dun contexte dapplication Web, mais uniquement si
lattribut deployOnStartup de llment <Host> possde la valeur true. noter galement que cet lment <Host>
possde galement lattribut unpackWARs, qui positionn la valeur true, provoque la dcompression des archives
dapplicationsWeb.
Lemplacementetlenomdecerpertoirepeuventtremodifispourprendreencomptedescontraintesdorganisation
dusystmedefichieretdesapplications,ilsuffitalorsdemodifierlattributappBasedellmentdeconfiguration<Host>
enspcifiantlenouveaurpertoire.

3.Llment<Context>
Pour rendre disponible une application Web, elle doit tre associe un contexte, ce contexte est automatiquement
crlorsqueloninstalleuneapplicationenlacopiantdanslerpertoirewebapps/.
Cependant, il est galement possible de dfinir explicitement un contexte dans le fichier server.xml. Cette opration
permetdinstalleruneapplicationWebendehorsdurpertoirewebapps/,maisgalementdenepastenircomptedu
contenudecerpertoire,etdesefieruniquementlaconfigurationcriteduserveur,cequiestungagedescurit.
Llment<Context>suivantpermetdecrerlecontexte/demopourlapplicationinstallesousC:\applications\demo.
Exemple :
<Context path="/demo" docBase="C:\applications\demo"/>

4.DploiementavecXML
Lacontraintedelasolutiondedploiementprcdenteestquellencessiteleredmarrageduserveurpourlapriseen
comptedelanouvelleapplicationpuisquilyaeumodificationdufichierdeconfigurationduserveur.
Llment <Context> peut tre dfini dans un fichier XML spar et utilis pour faire un dploiement automatique de
lapplication. Comme prcdemment, cette mthode requiert lattribut autoDeploy de llment <Host> true pour
fonctionner.Unefoiscrit,cefichierdoittrecopidanslerpertoireCATALINA_HOME/conf/<engine>/<host>/,ou
ENI Editions - All rigths reserved

- 1-

<engine>et <host>reprsententrespectivementlenom,indiquparleursattributs name,deslments <Engine>et


<Host>utiliserpourdployercetteapplication.
Exemple : le fichier demo.xml qui permet dinstaller lapplication disponible dans C:\applications\demo sous le chemin de
contexte/demo.
<Context path="/demo" docBase="C:\applications\demo"/>
SuruneinstallationpardfautdeTomcat6,llment<Engine>portelenomCatalina, et llment<Host> se nomme
localhost,ilfaudradanscecas,copierlefichierdemo.xmldansCATALINA_HOME/conf/Catalina/localhost.
UnavantagedecettemthodeestquilestpossiblededclarerlesressourcesJNDI,oulesliensverslesressources
dontlapplicationabesoin,dansllment<Context>,parexemple :
<Context path="/demo" docBase="C:\applications\demo">
<ResourceLink name="jdbc/demo"
global="jdbc/GlobalDemo"
type="javax.sql.DataSource" />
</Context>
UtiliserunearchiveWARtendue
LedploiementavecunfichierdecontexteXMLoffreuneautrepossibilit.Eneffet,ilestpossibledintgrercefichier
unearchivedapplicationWebafinqueTomcat6entiennecompteaumomentdudploiementdelapplication.Comme
vu au chapitre Administration du serveur, llment de configuration <Context> peut contenir des souslments trs
intressantspourlaconfigurationdesressourcesutilisesparlapplication.
Cefichierdoitporterlenomcontext.xml,etdoitsetrouverdanslerpertoireMETAINFdelapplication.
I l est noter que ce fichier nest exploitable que par le serveur Tomcat, les autres serveurs dapplications du
marchignorenttotalementcefichier.

- 2-

ENI Editions - All rigths reserved

LapplicationmanagerdeTomcat6
Lapplication manager de Tomcat 6 est un outil de gestion des applications Web JEE qui permet de raliser diffrentes
tchesdadministration.Parmilesoprationspossiblesaveclemanager,oncompte :

ledploiementduneapplication

lobtentiondelalistedesapplicationsactives,ainsiqueleursinformationsdesessions

lerechargementduneapplicationWeb,aprsdesmodifications

lobtentiondinformationssurlesressourcesJNDIetlesrlesdescurit

ledmarrageetlarrtduneapplicationWeb

lasuppressionduneapplication

Lemanagerestutilisablepartirdetroisinterfacesdiffrentes :

Linterface texte : les oprations dadministration sont passes Tomcat 6 sous forme de requtes HTTP en
utilisantunnavigateurWebparexemple.

Linterface HTML : elle permet une navigation plus intuitive sous forme de liens hypertextes, et prsente en
permanenceltatdesdiffrentesapplications.

Linterface ANT : cette dernire interface permet lcriture de scripts pour automatiser le dploiement des
applicationsdansTomcat6.

NTestunoutilOpenSourcedelafondationApachequipermetdautomatiserdestcheslorsdudveloppement
A
dapplication Java partir de scripts crits en XML. ANT permet entre autres la compilation des fichiers source, la
construction des archives de dploiement, mais galement des tches pour dployer des applications sur certains
serveursdapplications.Pourplusdinformations,sereporterauchapitreUtiliserTomcatpourledveloppementdecet
ouvrage,etladressehttp://ant.apache.org.

Configurationdelaccslapplicationmanager
Avantdepouvoirutiliserlemanager,leserveurTomcat6doittreconfigurpourpermettrelaccscetoutil.Lagestion
des autorisations daccs est implmente en utilisant les gestionnaires de scurit de Tomcat 6 : Les Realms (cf.
chapitreLascuritduserveuretdesapplications).
Selonlegestionnairedescuritutilis(Memory,UserDatabase,JDBC,JNDIouJAAS),laconfigurationestdiffrente,
maisleprinciperestelemme :attribuerlerledaccsmanagerunutilisateurenregistr.
LaconfigurationpardfautdeTomcat6utiliseungestionnairedescuritbassurunfichierXML :tomcatusers.xml.
CefichiersetrouvedanslerpertoireCATALINA_HOME/confdelinstallationduserveurTomcat6.
Cefichierrfrencelesdiffrentsrlesutilissparlesapplications,ainsiquelesutilisateursquipeuventobtenircesrles,
selonlastructuresuivante :
<tomcat-users>
<role rolename=tomcat/>
<role rolename=role1/>
<user username=tomcat password=tomcat roles=tomcat/>
<user username=both password=tomcat roles=tomcat,role1/>
<user username=role1 password=tomcat roles=role1/>
</tomcat-users>
Pourautoriserlaccsaumanager,ilfautajouterlerleapplicatifmanageretcrerunutilisateurdisposantdecerle,ou
donnercerleunutilisateurexistant.
Exemple :
Ajout du rle manager au fichier tomcat users.xml, et cration de lutilisateur admin ayant pour mot de passe secret, qui
bnficiedecerle.
ENI Editions - All rigths reserved

- 1-

<tomcat-users>
<role rolename=manager/>
<user username=admin password=secret roles=manager/>
</tomcat-users>
Lamodificationdecefichierdeconfigurationncessiteunredmarrageduserveur.Laccsaumanagerestmaintenant
soumisauthentification.

1.Linterfacetexte
Linterface texte du manager sutilise en mettant des requtes HTTP, avec un navigateur Web par exemple. Les
requtesontlasyntaxesuivante :
http://<hote>:<port>/manager/<commande>?<paramtres>
Cettelignedecommandecomporteleslmentssuivants :

hote :lenomdemachinequihbergeleserveurTomcat6,

port :lenumrodeportTCP/IPsurlelequelleserveurTomcat6acceptedesconnexionsHTTP,

commande :lesdiffrentescommandesdumanager,parmi:start,stop,list,deploy,install,remove,undeploy,
reload,serverinfo,roles,sessions,resources,status,etjmxproxy.

paramtres : le ou les paramtres passer aux diffrentes commandes cidessus. Ces paramtres sont
diffrentsselonlescommandesutilises,maisontrouvetrsfrquemmentleparamtrepathquireprsentele
contextedelapplicationWeb,ainsiquelURLduneapplicationWebinstaller.

a.InstalleruneapplicationsousTomcat6
Lacommande deploydumanagerestprobablementcellequipossdelasyntaxelapluscomplexe,cettecomplexit
estlieaugrandnombredemthodespossiblespourdployeruneapplicationdansTomcat6.
Lasyntaxedelacommandedeployestlasuivante :

- 2-

ENI Editions - All rigths reserved

http://<hote>:<port>/manager/deploy?path=<contexte>?war=<ressource>
Dans cette commande, le paramtre path va permettre de spcifier le contexte dinstallation de lapplication. Le
paramtrewar,quantlui,spcifieuneressourceprsentesurleserveurpourinstallerlapplication.Cetteressource
peuttre :

UnearchivedapplicationWeb(fichier.WAR)

UnrpertoirecontenantlesdonnesdelapplicationWeb(Servlet,JSP,pagesHTML,)

InstalleruneapplicationpartirdunearchiveWAR
http://<hote>:<port>/manager/deploy?path=<contexte>
&war=file:/chemin/vers/archive/archive.war
Exemple :
Dploiementdufichierdemo.wardurpertoireC:\applicationduserveur,souslecontexte/demo.

LedploiementdunearchiveWAR,provoquelacopiedelarchiveWARdanslerpertoirewebapps/duserveur,ainsi
queladcompressiondecettearchivedanslerpertoirewebapps/deTomcat6,seulementsilattributunpackWARsde
llment<Host>possdelavaleurtrue.
DanslecasounpackWARsvautfalse,leserveurutilisedirectementlesdonnescontenuesdanslarchivesansautre
configurationncessaire.
Installeruneapplicationpartirdunrpertoire
http://<hote>:<port>/manager/deploy?path=<contexte>&
war=file:/chemin/vers/repertoire
Exemple :
Dploiementdelapplicationsouslecontexte/demo,partirdesdonnescontenuesdanslerpertoireC:\applications\demo
duserveur :

Danscecasdutilisation,lesdonnesdelapplicationnesontpascopiesdanslerpertoirewebapps/etTomcat6
utilisedirectementlerpertoirefournienparamtre.

b.Misejourduneapplication
La mise jour dune application dans Tomcat 6 peut simplement se faire en dsinstallant la version actuelle de
lapplication, puis en dployant la nouvelle. Cependant, les requtes des utilisateurs mises destination de cette
applicationserontrejetesparleserveurpendantlapriodeolapplicationnexisteplussurleserveur.

ENI Editions - All rigths reserved

- 3-

La commande deploy du manager possde deux options intressantes pour remdier ce problme, il sagit de
update,etdepause.Cesdeuxoptionspeuventprendrelesvaleurstrueoufalse,cettederniretantlavaleurpar
dfaut.
Loptionupdatepermetdespcifierlacommandedeployquelapplicationexistedjdansleserveur,lemanagerva
donc dabord supprimer lancienne version pour ensuite installer la nouvelle. Utilis avec loption pause, le serveur
Tomcat continuera daccepter les demandes des utilisateurs pour cette application et les satisfera ds la nouvelle
versioninstalle.
Syntaxe :
http://<hote>:<port>/manager/deploy?path=<contexte>&
war=<ressource>&update=true&pause=true
Exemple :
MisejourdelapplicationdemoavecunenouvelleversionsousTomcat6.

c.Dmarreretarrteruneapplication
Le dmarrage et larrt dune application Tomcat 6 se font respectivement avec les commandes start et stop du
manager,cesdeuxcommandesutilisentleparamtrepathpourspcifierlecontextedelapplicationWeb.
Syntaxe :
http://<hote>:<port>/manager/start?path=<contexte>
et
http://<hote>:<port>/manager/stop?path=<contexte>
Exemple :

- 4-

ENI Editions - All rigths reserved

Larrtduneapplicationlarendinaccessibleparlesutilisateurs,maiselleesttoujoursdployedansTomcat6,cette
oprationnemodifieenaucuncaslaconfigurationduserveurpourcetteapplication.

d.Rechargeruneapplication
Lacommandereloadpermetderechargeruneapplicationlorsquecellecinapastconfigurepourtrerecharge
automatiquement par Tomcat 6 (avec lattribut reloadable la valeur true sur llment <Context> du fichier
server.xml).
Syntaxe :
http://<hote>:<port>/manager/reload?path=<contexte>
Exemple :

e.Supprimeruneapplication
LacommandeundeploypermetdesupprimeruneapplicationTomcat6.
Elle commence par arrter lapplication si cette dernire est en cours dexcution, puis elle supprime toutes les
ressources qui ont t cres par le dploiement de lapplication. La suppression des donnes ne sapplique donc
quauxlmentscrsdanslerpertoirewebapps/duserveur,etauxfichiersdecontexteXML.

f.Obtenirdesinformations
En plus de pouvoir grer les applications, le manager de Tomcat 6 permet galement dobtenir un grand nombre
dinformationssurlaconfigurationduserveuretdesressourcesquilrenddisponiblesauxapplications.
Listerlesapplicationsinstalles
Lacommandelaplussimpledumanagerestprobablementlacommande list.Ellepermetlaffichagedelalistedes
applicationsdployesdansleserveur,etdonnedesinformationssurleurstats,etemplacementsnotamment.
Leformatdechaqueligneafficheestlesuivant :
contexte:tat:sessions:docBase
contexte:reprsentelecontextedecetteapplicationWeb
tat:ltatcourantdelapplication(runningoustopped)
sessions:lenombredesessionsactivesurlapplication
docBase:lerpertoiredebasedesdonnesdelapplication
Exemple :
Affichagedelalistedesapplicationsdployes:

ENI Editions - All rigths reserved

- 5-


ListerlesressourcesJNDIconfigures
UnserveurdapplicationsJEEalaresponsabilitdefournirunensembledeservicesauxapplicationsquilgreetrend
disponible.Cesservicessontconfigursdansleserveuretenregistrsdansunearborescenceappelearborescence
JNDI(voirlechapitresurlaconfigurationdesressources).
CesservicessontdetypesdiffrentsetcorrespondentncessairementuntypededonnesdulangageJava.Par
exemple,lesressourcesdeconnexionsunserveurdebasededonnessontdetypejavax.sql.DataSource.
La commande resources du manager permet dobtenir la liste des ressources JNDI disponibles dans le serveur et
faisantrfrencecesservices.
Syntaxe :
http://<hote>:<port>/manager/resources[?type=<type JNDI>]
Enutilisantcettecommandesansloptiontype,lemanagerrenvoielalistedetouteslesressourcesdisponiblesdans
le serveur, en affichant le nom JNDI de cette ressource, ainsi que le nom du composant du serveur Tomcat 6 qui
permetdefournircettefonctionnalit.
Exemple :

Dans lexemple prcdent, la ressource JNDI jdbc/demo est un service de connexions un serveur de base de
donnes,pourobtenirexclusivementlesressourcesdecetype,ilfaututiliserloptiontypedelacommanderesources.
Exemple :
AffichagedetouteslesressourcesJNDIdetypejavax.sql.DataSource(servicedeconnexionsauxbasesdedonnes).

- 6-

ENI Editions - All rigths reserved


Obtenirlesrlesdescurit
LesrestrictionsdaccsauxapplicationsWebJEEsontexprimesauxtraversderlesdescurit,auquelleserveur
vaassocieruncertainnombredutilisateurs,qui,parconsquent,aurontaccsauxressourcesrestreintescerle.
Cestnotammentlemcanismemisenplaceaudbutdecettepartiepourrestreindrelaccsaumanager.
Syntaxe :
http://<hote>:<port>/manager/roles
Exemple :
AffichagedesrlesdescuritdclarsdanslaconfigurationdeserveurTomcat6.

Afficherlesinformationssystme
Lacommandeserverinfodumanagerpermetdafficherlesinformationsconcernantlesystmedexploitationainsique
lamachinevirtuelleJavautiliseparleserveurTomcat6.
Syntaxe:
http://<serveur>:<port>/manager/serverinfo
Exemple :

ENI Editions - All rigths reserved

- 7-

g.Lesmessagesderreursdumanager
Lesmessagesaffichsparlemanagersontinternationaliss,cestdirequelalanguedaffichageestadaptela
langueprfreconfiguredanslenavigateurWeb.Lemanagersupporteungrandnombredelangues,lefranaiset
langlaisnaturellement,maisgalementlallemand,lespagnoletlejaponais.
Lesprincipauxmessagesderreurquelonpeutrencontrersontlessuivants :
ECHEC - Lapplication existe dj dans le chemin <contexte>
Siuneapplicationestdjdployesouscecontexte,ilfautalorssupprimercetteapplication,choisirunautrechemin
decontexte,oubienprocderunemisejourdelapplication.
ECHEC - Un chemin de contexte invalide <contexte> a t spcifi
Silechemindecontextespcifiparleparamtrepathnecommencepasparlecaractre/
ECHEC - Aucun contexte nexiste pour le chemin <contexte>
Siaucuneapplicationnecorrespondauchemindecontextespcifiparleparamtrepath.
ECHEC - Un chemin de contexte null a t spcifi
Silonoublieleparamtrepathalorsquilestobligatoire.
Cesdiffrenteserreurslaissentgalementdestracesdanslesfichiersjournauxduserveur.

2.LinterfaceHTML
Depuislaversion4.1deTomcat,lemanagerpossdegalementuneinterfaceWebpourlagestiondesapplications.
CetteversionHTMLdumanagerpermetuneutilisationplusintuitivedescommandesdumanager,elleestaccessible
ladresse :
http://<hote>:<port>/manager/html
Exemple :
LinterfaceHTMLdumanageraffichantlesinformationssurlesapplications.

- 8-

ENI Editions - All rigths reserved


GrcecettepremirepartiedelcrandumanagerHTML,ilestpossibledagirsurlesapplicationsdployesdansle
serveur (arrt, dmarrage, redmarrage, suppression), ainsi que davoir des informations sur ltat des applications
(tat,nombredesessionsutilisateur).

a.Dployerdesapplicationslocalement
La deuxime partie de linterface du manager HTML permet de dployer des applications dans le serveur. Les
applicationspeuventtredployespartirdarchivesouderpertoiresprsentslocalementsurleserveur,maisil
estgalementpossibledelesinstallerdistance.
Exemple :
LinterfacedumanagerHTMLpourledploiementdesapplications.

La premire partie de cette interface permet de dployer lapplication partir dune archive dapplication Web, dun
rpertoiredapplicationoubienenutilisantunfichierdecontexteXML.

ENI Editions - All rigths reserved

- 9-

UtiliserunearchiveWAR
Avec une archive WAR, il est simplement ncessaire de renseigner le contexte et le chemin vers le fichier WAR en
utilisantlammesyntaxequepourlinterfacetextedumanager.
Exemple :
ContextPath(optional) :/demo
WARorDirectoryURL :jar:file:/C:\applications\demo.war
Utiliserunrpertoire
Tout comme prcdemment, il faut prciser le contexte, ainsi que le chemin vers le rpertoire en utilisant la mme
syntaxequepourlinterfacetexte.
Exemple :
ContextPath(optional) :/demo
WARorDirectoryURL :file:/C:\applications\demo
UtiliserunfichierdecontexteXML
Avec un fichier de contexte XML, il suffit juste dexprimer le chemin vers ce fichier XML avec la syntaxe suivante et
dindiquerlecheminducontextedelapplicationWeb:
file:/C:\chemin\vers\fichier\context.xml
Exemple :
ContextPath(optional) : /demo
XMLConfigurationfileURL :file:/C:\scripts\demo.xml
vec la version HTML du manager, il nest pas possible dutiliser les options update et pause permettant les
A
misesjourdapplications.

b.Dployerdesapplicationsdistance
Une possibilit intressante du manager HTML est le dploiement dapplications distance. Avec cette nouvelle
mthodedinstallation,ladministrateurnaplusbesoindecopierlesdonnesdelapplicationsurleserveuravantde
pouvoirprocdersoninstallation.
La deuxime partie de lcrandinstallation de ce manager HTML permet de parcourir son disque dur la recherche
dunearchiveWARgrceauboutonParcourir.Unefoislarchiveslectionne,cliquersurleboutonDeployprovoque
lenvoidufichierWARdanslerpertoirewebapps/duserveur.
Linstallationsefaitensuiteenutilisantcommenomdecontexte,lenomdufichierWARsanssonextension.Cefichier
WAR peut galement contenir le fichier METAINF/context.xml pour prciser les informations de dploiement au
serveur.

3.LinterfaceANT
En plus de la version HTML du manager, la version 4.1 de Tomcat a galement ajout le support de ANT pour
ladministration des applications. Cette interface est toujours disponible dans Tomcat 6 et offre des possibilits
dadministrationpuissantesautraversdunlangagedescriptbassurXML.
Pour en savoir plus sur linstallation et lutilisation de ANT, le chapitre Utiliser Tomcat pour le dveloppement aborde
lutilisationdecetoutil.
Danslasuitedesexemples,ANT_HOMEfaitrfrenceaurpertoiredinstallationdeANT.
LestchesANTsontfourniessousformedeclassesJava,danslecasdeTomcat6,cesclassessontcontenuesdans
larchive de classes CATALINA_HOME/lib/catalinaant.jar. Pour pouvoir utiliser ces tches avec ANT, il faut copier
cettearchivedeclassesdanslerpertoireANT_HOME/lib.
Il faut ensuite associer ces classes Java un nom de tche , voici un extrait du fichier de script ANT, gnralement
appelbuild.xml,montrantlesinstructionsutiliserpourfairecettedclaration.

- 10 -

ENI Editions - All rigths reserved

<!-- Lister les applications -->


<taskdef name="list"
classname="org.apache.catalina.ant.ListTask" />
<!-- Dploiement des applications -->
<taskdef name="deploy"
classname="org.apache.catalina.ant.DeployTask" />
<!-- Suppresion des applications -->
<taskdef name="undeploy"
classname="org.apache.catalina.ant.UndeployTask" />
<!-- Rechargement des applications -->
<taskdef name="reload"
classname="org.apache.catalina.ant.ReloadTask"/>
<!-- Dmarrage des applications -->
<taskdef name="start"
classname="org.apache.catalina.ant.StartTask" />
<!-- Arrt des applications -->
<taskdef name="stop"
classname="org.apache.catalina.ant.StopTask" />
<!-- Informations sur les ressources -->
<taskdef name="resources"
classname="org.apache.catalina.ant.ResourcesTask" />
<!-- Affichage des rles de scurit -->
<taskdef name="roles"
classname="org.apache.catalina.ant.RolesTask" />
Lesdeuxtchesquisuiventnesontdisponiblesquapartirdelaversion5.0.10deTomcat :
<!-- Informations sur le serveur -->
<taskdef name="serverinfo"
classname="org.apache.catalina.ant.ServerinfoTask" />
<!-- Informations sur les sessions -->
<taskdef name="sessions"
classname="org.apache.catalina.ant.SessionsTask" />
Unefoisdclare,cestchespourronttreutilisesdanslesdiffrentesciblesdexcutionduscript.Lorsdelutilisation
desdiffrentescommandesdumanager,lasyntaxedechacunedescommandesfaisaitapparatreuncertainnombrede
paramtresetdoptions,cestchesANTutilisentgalementceslmentsdesyntaxe.
VoiciuneportiondescriptANT,montrantunexemplesimpledutilisationdelatchedeploy:
<deploy url="http://localhost:8080/manager" username="admin"
password="secret" path="/demo"
war="file:/C:\applications\demo.war"
/>
ANT gre la notion de projet, un projet est constitu dun ensemble de cibles dexcution, comme par exemple la
compilationducodesource,lassemblageenarchiveWAR,oubienledploiementdelapplication.Cesdiffrentescibles
utilisent les trs nombreuses tches ANT disponibles en standard, ou bien les tches additionnelles comme celles de
Tomcat.
VoiciunexemplecompletdescriptANTpourdployerlapplicationdemo :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- Dclaration du projet, la cible par dfaut est deployer -->
<project name="Tomcat" default="deployer" basedir=".">
<!-- Proprits pour la connexion au manager -->
<property name="manager.url"
value="http://localhost:8080/manager" />
<property name="manager.user" value="admin" />
<property name="manager.password" value="secret"/>
<!-- Proprits de lapplication -->
<property name="app.context" value="/demo" />
<property name="app.war" value="file:/C:\applications\demo.war" />
<!-- Dclaration des tches Tomcat -->
<taskdef name="deploy"

ENI Editions - All rigths reserved

- 11 -

classname="org.apache.catalina.ant.DeployTask" />
<taskdef name="reload"
classname="org.apache.catalina.ant.ReloadTask" />
<taskdef name="undeploy"
classname="org.apache.catalina.ant.UndeployTask" />
<taskdef name="list"
classname="org.apache.catalina.ant.ListTask" />
<!-- Cible pour le dploiement de lapplication -->
<target name="deployer" description="Dploiement vers Tomcat">
<deploy url="${manager.url}" username="${manager.user}"
password="${manager.password}" path="${app.context}"
war="${app.war}"
/>
</target>
<!-- Arrt de lapplication -->
<target name="recharger" description="Recharger...">
<reload url="${manager.url}" username="${manager.user}"
password="${manager.password}" path="${app.context}"
/>
</target>
<!-- Suppression de lapplication -->
<target name="supprimer" description="Supprimer...">
<undeploy url="${manager.url}" username="${manager.user}"
password="${manager.password}"
path="${app.context}"
/>
</target>
</project>
Pour lancer, par exemple, la cible dexcution qui dploie lapplication,ilsuffitdouvrir une invite de commande sur le
systme,sepositionnerdanslerpertoirequicontientlescriptbuild.xml,etsaisirlacommande :ant deployerouplus
simplementant,puisquelacibledeployerestlaciblepardfaut.
Lancementduscriptetrsultatdelexcution :

- 12 -

ENI Editions - All rigths reserved

LeDeployerdeTomcat
Laversion5deTomcatproposeunnouveloutilpourlaprparationetlagestiondesapplications :ledeployer.Cetoutil
nest pas fourni dans la distribution standard de Tomcat et une archive portant le nom jakartatomcat 5.x.y
deployer.zipdoittretlchargesparment.
Ledeployerpermetentreautresdecompiler,devalider,dedployeretdegrerlesapplications.Pourpermettretout
ceci,ladistributiondudeployercontient :

lestchesANTspcifiquesTomcat6utilisesdanslapartieprcdenteaveclemanager

unetcheANTsupplmentairepourvaliderlastructuredesapplicationsWebavantleurdploiement

unexempledefichierdescriptANTpourdployeretgrerlesapplications.Cescriptpeututiliserunautrefichier
(deployer.properties) qui contient toutes les valeurs de proprits modifier pour adapter le script ses
propresapplications,cefichiernestpasfourni,etdoittrecritenfonctiondesesbesoins

uncompilateurdeJSP(JaSPer)pourvrifieretprcompilerlesJSP.

1.Automatiserledploiementdesapplications
Le script ANT build.xml fourni par le deployer se trouve la racine de larchive du deployer, le fichier
deployer.properties,silestncessaire,doitsetrouveraummeemplacement.
Ilcontientlesciblessuivantes :

compile (cible par dfaut) : cette cible na pas besoin de pouvoir contacter un serveur Tomcat en cours
dexcution. Elle compile les JSP et valide lapplication, les pages JSP compiles sont spcifiques au serveur
Tomcatquifournitledeployeretlecodersultantnepeutpastreutilissuruneautreversionduserveur.
UnefoisvalideetsespagesJSPcompiles,lapplicationestassembleenarchiveWAR.

L esfichierssourceJavaprsentsdanslerpertoireWEBINF/classessontgalementcompils.

deploy:dploieuneapplicationWebversleserveurTomcat

undeploy:supprimeuneapplicationWeb

start:dmarreuneapplication

reload:rechargeuneapplication

stop:arrteuneapplication

Pourpersonnaliserlescript,ilfautfournirlefichierdeployer.propertiesavecdesdfinitionsdepropritsspcifiques
pourlapplicationutiliser.Cefichierdoitsetrouverdanslemmerpertoirequelefichierbuild.xml,etpeutavoirles
propritssuivantes :

build : le rpertoire de travail pour le deployer : par dfaut, le rpertoire est cr dans le rpertoire de la
distributiondudeployerselonlemodlesuivant${build}/webapp/${path}.

webapp : le rpertoire qui contient les donnes de lapplication valider et compiler. Par dfaut, cette
propritvautmyapp.

path:lecontextedelapplicationWeb,pardfaut/myapp.

url:LURLabsolueverslemanagerduserveurTomcatpourlequellapplicationestprpare,cetteproprit
nest ncessaire que pour les cibles deploy, undeploy, start et stop, par dfaut

ENI Editions - All rigths reserved

- 1-

http://localhost:8080/manager.

username:nomdutilisateurpourseconnecteraumanager.

password:motdepassepourseconnecteraumanager.

ArborescencedelapplicationDemo:
/index.jsp
/WEB-INF/web.xml
/WEB-INF/classes/fr/eni/editions/tomcat/Demo.java
Fichierdeployer.propertiespersonnalis:
webapp=C:/deployer/demo
build=C:/deployer/build
path=/test
ArborescencedelapplicationgnresousC:\deployer\build:
/webapp/test.war
/webapp/test/index.jsp
/webapp/test/WEB-INF/web.xml
/webapp/test/WEB-INF/classes/fr/eni/editions/tomcat/Demo.java
/webapp/test/WEB-INF/classes/fr/eni/editions/tomcat/Demo.class
/webapp/test/WEB-INF/classes/org/apache/jsp/index_jsp.java
/webapp/test/WEB-INF/classes/org/apache/jsp/index_jsp.class
Avec ces diffrentes cibles ANT fournies par dfaut, le deployer permet de prendre en charge une application de sa
sortiedeloutildedveloppement,jusqusoninstallationdansunserveurTomcat.

- 2-

ENI Editions - All rigths reserved

Introductionlascuritduserveuretdesapplications
La scurit informatique est un trs vaste sujet quil est, aujourdhui, impossible de ne pas traiter dans un ouvrage
comme celuici. Lobjectif de ce chapitre est de prsenter les diffrents moyens utilisables pour scuriser un serveur
Tomcatmaisgalementlesapplicationsquilhberge,etgarantirunaccsfiablesesservices.

ENI Editions - All rigths reserved

- 1-

Authentification,autorisationetcryptage :lemodledescuritJEE
Lauthentification est le procd qui permet de dterminer et de valider lidentit dun client dune application. Les
technologies JEE, et plus particulirement la spcification Servlet, proposent un mcanisme pour grer cette
authentification,etce,demanirestandardentrelesserveursdapplicationsetlesconteneursWeb,grcelAPIJAAS.
Cependant, il est tout fait possible que les concepteurs et dveloppeurs dune application implmentent leur propre
mcanismepourlauthentification,cependantencasdemodificationduregistrecontenantlesdonnesdauthentification,
lapplication doit sadapter, JAAS permet de saffranchir de cette contrainte : cest le serveur dapplication qui fait
linterfaceavecleregistreutilisateur.
Authentification
UnconteneurWebcommeTomcatpossdantunmoteurHTTPpeuttoutfaitutiliserlesmcanismesdauthentification
habituellement mis en uvre par les serveurs Web : ce sont les mcanismes dauthentification HTTP ou schmas
dauthentificationHTTP.Leprincipeestlesuivant:lorsquunclienttentedaccderuneressourceprotgedunsiteou
dune application Web, le serveur renvoie le code dtat HTTP401 au navigateur, indiquant celuiciquelaressource
demandeestprotgeetquesonaccsestsoumisauthentification.Enractioncecode401,lenavigateuraffiche
une bote de dialogue de saisie dinformations didentification au client : si lauthentification aboutit, la ressource est
envoyedanslarponse,sinoncestlecodedtat403(Forbidden)associunepagederreurquiestenvoye.
PourimplmentercemcanismeilfaututiliserundestroisschmasdauthentificationHTTP :

Lauthentificationdebase(BASIC)

Lauthentificationcode(DIGEST)

Lauthentificationparcertificatclient(CLIENTCERT)

Lauthentification de base (Basic Auth), est, comme son nom lindique, le schma dauthentification le plus simple.
Lorsqueleclientvalidelesinformationsdidentificationsaisiesdanslabotededialoguequeluiprsentelenavigateur,
cesinformationssonttransmisessimplemententantencodesaveclalgorithmeBase64.Cetalgorithmeestconnuetil
est trs facile de rcuprer les donnes en clair. Une fois que le client est authentifi, le navigateur conserve les
informations dauthentification en cache et il ny pas dautre moyen que de fermer le navigateur pour dconnecter le
client.
Lauthentification code (Digest Auth) offre les mmes fonctionnalits que lauthentification de base, mais les
informationsdauthentificationsontcryptesgrceunmcanismeappelhachage(enanglais,digest).Leprincipeest
quellmentquiatcryptparhachagenestpasdcryptable:lehachageestirrversible.
Leprocessusdauthentificationcodesedrouledelamaniresuivante :

Leserveurenvoielademandedauthentificationaunavigateurclient,aveccettedemande,iltransmetunechane
decaractresquiserautiliseparleprocessusdehachage.

Lenavigateurajoutecettechaneaumotdepasseduclientetfaitlecryptageavecunalgorithmedehachage,tel
queSHAouMD5.

Lersultatduhachageestenvoyauserveur.

Le serveur rcupre le nom dutilisateur et le mot de passe en clair partir du registre dauthentification. Le
serveurutiliseensuitelachanedehachagetransmiseauclientpourfairelehachage.

Lauthentification aboutit uniquement si les deux valeurs de hachage, celle transmise par le client, et celle
gnreparleserveursontstrictementidentiques.

noterquecemcanismeneraliselecryptagequepourlauthentification,lesdonnesquitransitentensuitenesont
pascryptes.
Enfin,lauthentificationparcertificatclient(ClientCertAuth)utiliselescertificatsHTTPSpourgarantirauclientlidentit
dunserveursilecertificatestsignparunorganismedignedeconfianceappelautoritdecertification(dessocits
telles que VeriSign par exemple). Le serveur envoie sa cl publique au client par un moyen ou par un autre, le client
installelecertificatdanslenavigateur,ensuite,lesrequtesdececlientsontcryptesgrcelaclpubliqueduserveur,
et sont dcryptables uniquement par le serveur grce sa cl prive. Les donnes tant transmises en utilisant le
protocoleHTTPS,cestleschmadauthentificationleplusscuris.
Malheureusement,aujourdhui, tous ces mcanismes dauthentification ne sont pas supports par tous les navigateurs
Web.Danslecasdelamiseen uvredelascuritdansuncontexteIntranet,linfrastructurematrielleetlogicielleest
ENI Editions - All rigths reserved

- 1-

matrise : lespostesdetravailutilisateurpeuventtremisjourpoursupporterunschmadauthentificationplusquun
autreorcestdifficilementenvisageabledansuncontexteInternet
Aussi,danslamajoritdescasdutilisationactuels,leschmautilisestlauthentificationdebase,maislesdonnesne
sontpasvhiculesenHTTPmaisenHTTPSpourcrypterlesfluxchangs.
Un autre mcanisme dauthentification existe dans les spcifications servlet, il sagit de lauthentification par formulaire
(FormbasedAuth).Danscecas,lenavigateurnintervientpaspourfournirunmoyenlutilisateurdesidentifier,mais
unformulaireHTMLestutilisparleserveur,ilestprsentauclientpartirdumomentoceluicitentedaccderdes
donnesprotges.
Lorsque le formulaire est rempli et valid, les donnes dauthentification de lutilisateur sont transmises une servlet
systme du serveur dapplications, qui transmet ces donnes au serveur pour lauthentification dans le registre
utilisateur. Ce mcanisme est trs utilis car il possde de nombreux avantages. Dabord le fait dutiliser un formulaire
HTML permet de personnaliser linterface dauthentification, les donnes sont galement facilement transmissibles en
HTTPS, de ce fait, la scurit repose la fois sur une authentification par nom dutilisateur et mot de passe, et sur le
cryptagedesdonnestransmises.UnautreavantageestquilutiliselessessionsHTTP,etquilest,ducoup,trsfacile
dedconnecterunclient.
Autorisation
LemodledescuritdesapplicationsJEEutiliselanotiondutilisateuretderlepourgrerlesautorisationsdaccs.Le
serveurdapplicationsquigrelemcanisme,estliauregistreutilisateurquicontientlescomptesutilisateurs,lesrles,
ainsiquelesassociationsentrecescomptesdutilisateursetlesrlesauxquelscesutilisateurspeuventprtendre.
Uneapplicationpeutdclarerunensemblederessourcesprotgesetuniquementaccessiblesauxutilisateursdisposant
dunrleparticulier.Unutilisateurobtientunrlependantsonauthentification :unefoissonidentitvrifie,leserveur
dapplication ou le conteneur Web demande au registre utilisateur la liste des rles pour cet utilisateur, ces rles sont
prsentspourlaccslaressource,etsilyacorrespondance,laressourceconcerneestautoriselutilisateur.
Lapplication dclare un ou plusieurs rles pour restreindre les accs, lassociation entre les rles dclars dans
lapplication,etlesutilisateursstocksdansleregistredauthentification,sefaitengnralaumomentdudploiement
delapplication.Ladministrateuragalementlapossibilitderevenirsurcetteassociationultrieurement.
Cette sparation permet dutiliser des registres dauthentification diffrents simplement par configuration du serveur
dapplications,sansimpactsurlecodedesapplications.
Cryptage
Le cryptage des donnes entre un client et un serveur Web se fait en utilisant une variante du protocole HTTP qui
transitedansuncanalscurisgrceunprotocolerseauquicryptelesdonnes.
SSL(SecureSocketLayer)estunprotocolequipermetdetransmettredesdonnesdemanirescuriseentreunclient
etunserveur.DveloppparlasocitNetscapeInc.,SSLattrsrapidementadoptentantqueprotocolestandard
delInternet.
LeprotocoleSSLreposesurdeuxmcanismesdescurit,lecryptageclpubliqueetlecryptageclsymtrique.
Lecryptageclpubliquefaitintervenirunepairedecl,laclpublique,quiestlibrementdiffuseetdisponible,etlacl
privequiestsoigneusementconserveparsonpropritaire.Toutcequiestcryptaveclaclprivenestdcryptable
quaveclaclpublique,etinversement,toutcequiestcryptaveclaclpubliquenestdcryptablequaveclaclprive.
Le cryptage cl symtrique utilise le mme mcanisme pour le cryptage et le dcryptage des donnes. Cependant, il
ajoutegalementunprocdpermettantunclientdercuprerlaclpubliqueduserveurentoutescurit.
Eneffet,unpiratepourraittoutfaitsefairepasserpourleserveurauquelleclientsouhaiteseconnecter,envoyerlacl
publiqueauclient,etrcuprerdesinformationssensiblesurcedernier.Lemcanismedecryptageparclpubliquene
permetpasauclientdesassurerquildialoguebienaveclebonserveur.
Danslecryptagesymtrique,lestapesdchangedelaclpubliqueentreleserveuretleclientsontlessuivantes :

Le serveur commence par envoyer un certificat au client qui fait la demande de communication, ce certificat
contientlaclpubliqueduserveur,lmetteurducertificat,etladuredevaliditducertificat.

Le client doit ensuite accepter le certificat en fonction de son authenticit. Un certificat peut tre considr
authentique partir du moment o il est dlivr par un organisme digne de confiance appel autorit de
certification(Certificate Authorities CA),commelessocits VeriSign ou encoreThawte. Si le certificat nest
pasvalide,leclientenestaverti,libreluidecontinueroudarrterledialogue,sesrisquesetprils.

cestade,leschangesentreleclientetleserveursontmaintenantscurissparlemcanismedecryptage
cl publique. La configuration du serveur peut, ou non, demander une authentification au client : les donnes
dauthentificationquitransitentsontcryptes.

LeprotocoleHTTPS(HTTPoverSSL)estuneimplmentationdeHTTPsurleprotocoleSSL.Uneautreimplmentationde
protocolescurisagalementvulejour,ilsagitdeTLS(TransportLayerSecurity).CestlaversionstandardisedeSSL

- 2-

ENI Editions - All rigths reserved

parlIETF(InternetEngineeringTaskForce),lorganisationlaplusimportanteenmatiredestandardisationdesprotocoles
delInternet.TLSsappuiesurlaversion3.0deSSL.Engnral,lesserveursdapplicationsJEEpeuventutiliserSSLou
TLSpourscuriserlesfluxHTTP.
Les technologies Java utilisent une implmentation des protocoles SSL et TLS dans la bibliothque JSSE(Java Secure
Socket Extension).Cetteextensiondelaplateforme Java fait partie intgrante du J2SE depuis la version 1.4, pour les
versions prcdentes, il faut tlcharger cette extension sur le site de Sun Microsystems
(http://java.sun.com/products/jsse/), et installer les fichiers de la bibliothque dans le rpertoire
JAVA_HOME/jre/lib/ext.

1.LascuritdesapplicationsWebJEE
PourpermettreuneapplicationWebJEEdutiliserlesmcanismesdcritsdanslapartieprcdente,ilestncessaire
de la configurer en tant que telle. Lobjectif est de dfinir quelles sont les ressources protger, quels utilisateurs
serontellesrenduesexclusivementaccessibles,etcommentlesclientsvontilssidentifiersurlapplication.
CetteconfigurationsefaitdansledescripteurdedploiementdelapplicationWeb,lefichierweb.xml.
Llment de configuration XML <security-constraint> permet la fois de dclarer les ressources protger avec
llment enfant <web-resource-collection>, et les rles qui auront accs ces ressources, avec llment enfant
<auth-constraint>. Ensuite, le mcanisme dauthentification est dclar avec un autre lment XML :<login-config>.
La section se termine avec la dclaration de tous les rles de scurit utiliss dans lapplication, avec llment
<security-role>.
Lexemple qui suit est un fragment de descripteur de dploiement (fichier web.xml) qui montre une configuration
compltedescuritJEE.
<security-constraint>
<display-name>Contraintes de scurit</display-name>
<web-resource-collection>
<web-resource-name>Accs restreint</web-resource-name>
<description></description>
<url-pattern>/admin/*</url-pattern>
<http-method>GET</http-method>
<http-method>PUT</http-method>
<http-method>HEAD</http-method>
<http-method>TRACE</http-method>
<http-method>POST</http-method>
<http-method>DELETE</http-method>
<http-method>OPTIONS</http-method>
</web-resource-collection>
<auth-constraint>
<description></description>
<role-name>administrateurs</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Authentification bas sur un formulaire</realm-name>
<form-login-config>
<form-login-page>/admin/login.jsp</form-login-page>
<form-error-page>/admin/error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description></description>
<role-name>administrateurs</role-name>
</security-role>
La section dlimite par <web-resource-collection> spcifie les ressources qui sont protges, ici, llment <urlpattern> vaut /admin/*, ainsi toutes les ressources qui se trouvent dans le rpertoire admin de lapplication ont un
accs restreint, et ce, quelle que soit la mthode HTTP utilise par le client, car elles sont toutes dclares avec des
lments<http-method>.
<web-resource-collection>
<web-resource-name>Accs restreint</web-resource-name>
<description></description>
<url-pattern>/admin/*</url-pattern>
<http-method>GET</http-method>

ENI Editions - All rigths reserved

- 3-

<http-method>PUT</http-method>
<http-method>HEAD</http-method>
<http-method>TRACE</http-method>
<http-method>POST</http-method>
<http-method>DELETE</http-method>
<http-method>OPTIONS</http-method>
</web-resource-collection>
Ensuite, la section dlimite par <auth-constraint> permet de dterminer les rles qui ont accs aux ressources
protges. Ici, seuls les utilisateurs bnficiant du rle administrateurs peuvent accder au contenu du rpertoire
admin.
<auth-constraint>
<description></description>
<role-name>administrateurs</role-name>
</auth-constraint>
Voilpourlescontraintesdescurit.Ensuite,laconfigurationcontinueparladfinitiondumcanismedauthentification
utiliser. Llment <auth-method> peut prendre les valeurs BASIC, DIGEST, FORM ou CLIENT-CERT, selon le type de
schmadauthentificationHTTPsouhait.Lasuitedelaconfigurationestlieauchoixduschmadauthentification,ici,
lauthentification par formulaire requiert de spcifier la page qui contient le formulaire HTML, et la page derreur
renvoyerauclientencasdchec.Encasderussite,leclientreoitlaressourcedontilasaisilURL.
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Authentification bas sur un formulaire</realm-name>
<form-login-config>
<form-login-page>/admin/login.jsp</form-login-page>
<form-error-page>/admin/error.jsp</form-error-page>
</form-login-config>
</login-config>
Pour terminer, chacun des rles utiliss dans lapplication doit tre dclar dans une section <security-role>. Il faut
autantdesectionsquederlesdclarer.
<security-role>
<description></description>
<role-name>administrateurs</role-name>
</security-role>
Pourutiliserlauthentificationparformulaire,leformulaireHTMLdoitavoircertainescaractristiques :

ildoittrepostdestinationduneservletsystmespcifique :j_security_check

lenomduchampdesaisiedunomdutilisateurdoittreconnudecetteservlet:j_username

lenomduchampdesaisiedumotdepassedoitgalementtreconnudecetteservlet :j_password

Cequidonne,parexemple,leformulairesuivant :
<html>
<head>
<title>Identification</title>
<body>
<form method="POST" action="j_security_check">
<table>
<tr>
<th align="right">Nom dutilisateur : </th>
<td><input type="text" name="j_username"></td>
</tr>
<tr>
<th align="right">Mot de passe : </th>
<td><input type="password" name="j_password"></td>
</tr>
<tr>
<td align="right">
<input type="submit" value="Valider">
</td>
- 4-

ENI Editions - All rigths reserved

<td>
<input type="reset" value="Annuler">
</td>
</tr>
</table>
</form>
</body>
</html>
EtlersultatdesonaffichagedanslenavigateurWeb :

Pour utiliser les autres schmas dauthentification, la configuration est trs simple puisquelle se limite simplement
spcifierletypeduschmadanslasection<login-config>,parexemplepouruneauthentificationHTTPdebase :
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Authentification HTTP de base</realm-name>
</login-config>
Cequiprovoqueraitlaffichagedelabotededialoguesuivantelorsdelappelduneressourceprotge(avecMicrosoft
InternetExplorer) :

ENI Editions - All rigths reserved

- 5-

LesRealmsdeTomcat
Lapartieprcdentedecechapitreintroduitlemcanismedauthentification.Pendantcettephasedauthentification,le
serveurestamencomparerlesdonnestransmisesparleclientaveccellesauxquellesilaaccs,cestjustementle
rledesRealmdefournirunaccsauregistreutilisateurqueleserveurdoitutiliser.
La spcification Servlet dfinit un mcanisme standard de ces gestionnaires dauthentification , appels galement
Realm,quiestcompltementutilisparTomcat6,ilnexistecependantpasdimplmentationconcrtesousformedAPI
decemcanisme.UngestionnairedauthentificationestuneinterfacedeprogrammationdfinieparTomcat6permettant
daccderauxinformationsdunutilisateur :sonidentifiant,sonmotdepasse,sonousesrles.Cetteinterfacepermet
decrerdesgestionnairesdauthentificationtrsfacilementremplaablesdanslaconfigurationduserveur.
LaversionactuelledeTomcatpropose5typesdobjetsRealmdiffrents :
InMemory Realm :lesinformationsdauthentification sont stockes dans un fichier XML qui est charg au dmarrage
par Tomcat 6. La configuration par dfaut dun serveur Tomcat 6 utilise ce type de gestionnaire dauthentification, le
fichierXMLutilisestlefichiertomcatusers.xml.
JDBCRealm :lesinformationsdauthentificationsontstockesdansunebasededonnesrelationnelle.Laconfiguration
de ce gestionnaire dauthentification contient les informations de connexion la base de donnes, ainsi que des
indicationssurlastructuredesdonnes.
DataSource Realm : comme pour le prcdent, les donnes sont stockes dans une base de donnes, mais la
configurationutilisecettefoisciunpooldeconnexionJDBCdfinidansleserveur.
JNDI Realm : ce type de gestionnaire dauthentification permet lutilisation dun service dannuaire de type LDAP, sa
configurationncessitededonnerdesindicationsdeconnectivitetdestructuredelannuaire.
JAAS Realm : lAPI JAAS spcifie mais nimplmente pas de mcanisme dauthentification, il faut donc implmenter un
moduledauthentificationJAASdontlerleestdauthentifierlesutilisateursdansunregistreparticulier.JAASpermetdonc
dutiliser pratiquement nimporte quel type de registre dutilisateur, pour peu quun module dauthentification soit
disponible, dans le cas contraire, il faudra le dvelopper. Contrairement aux quatre autres objets Realm, Tomcat 6 ne
fournitpasdimplmentationdeJAASRealmcarilssonttropspcifiques.
CommeindiquauchapitreAdministrationduserveursurlaconfigurationduserveur,lajoutdunRealmdansTomcat6se
faitgrcellment<Realm>,ilpeuttreajoutentantqulmentenfantde <Engine>,<Host>ou<Context>,enfaisant
attentionsaporteetvisibilit.Pourtouscesgestionnairesdauthentification,cestlattributdeconfigurationclassName
faisantrfrencelaclasseJavaducomposantRealm,quipermetdechoisirlegestionnaireappropri.
Danslexempledeconfigurationreprsentparleschmasuivant :

Lapplicationauchemindecontexte/app1utiliseleRealm1.

Lapplicationauchemindecontexte/app2utiliseleRealm2.

Lapplicationauchemindecontexte/app3utiliseleRealm3.

Lapplicationauchemindecontexte/app4utiliseleRealm3.

ExempledeconfigurationavecplusieursRealm :

ENI Editions - All rigths reserved

- 1-

1.InMemoryRealm
CetypedegestionnairedauthentificationutiliseunfichierauformatXMLpourstockerlesnomsdutilisateurs,motsde
passeetlesrles.Iltiresonnomdufaitquelastructuredufichierestchargeenmmoireaudmarrageduserveur.
CestaussilenomdelaclasseJavaquipermettaitsamiseen uvredanslespremiresversionsduserveurTomcat.
DepuisTomcat4.1,laclasseMemoryRealmestremplaceparlaclasseUserDatabaseRealm.
DanslaconfigurationpardfautdunserveurTomcat6,lefichierXMLutilisparlaclasseUserDatabaseRealm est le
fichierCATALINA_HOME/conf/tomcatusers.xml,sastructurecontientdeuxtypesdentres :lesdfinitionsderles
avecllmentXML<role>,etlesdfinitionsdecomptesutilisateursavecllmentXML<user>.
Leslments<role>utilisentunseulattributpermettantdenommerlerle :rolename.
Leslments<user>utilisent,quanteux,plusieursattributspourspcifierlenomdutilisateur,avecusername,lemot
de passe de cet utilisateur, avec password, et le ou les rles attribus cet utilisateur avecroles, cet attribut tant
facultatif.
Exempledefichiertomcat users.xml:
<?xml version=1.0 encoding=utf-8?>
<tomcat-users>

- 2-

ENI Editions - All rigths reserved

<role rolename="manager"/>
<user username="admin" password="password" roles="manager"/>
</tomcat-users>
La configuration de ce gestionnaire dauthentification peut tre facilement reprise de lexemple fourni dans le fichier
server.xmlpardfaut.Ladclarationdellment<Realm>utiliselenomcompletdelaclasseUserDatabaseRealmainsi
quelenomduneressourceJNDIconfiguredanslasectionGlobalNamingResourcesdecefichier,cetteressourcese
nommeUserDatabase.CetteressourceJNDIpermetdindiquerlefichierXMLutiliserparcetteclasse.
ConfigurationcompltedugestionnairedauthentificationpardfautdeTomcat6 :
<Server ... >
<GlobalNamingResources>
<Resource
name="UserDatabase"
auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
...
</Engine>
</Service>
</Server>
Un des inconvnients majeurs de ce gestionnaire dauthentification est dutiliser un fichier dans lequel les mots de
passesontstocksenclair,lapartiesuivanteproposedutiliserdesmotsdepassecryptspourgarantirunpeuplusla
confidentialitdesdonnesdauthentification.
Utiliserdesmotsdepassescrypts
Lapremiretapepourpermettrelutilisationdesmotsdepassecryptsdanslefichiertomcatusers.xml consiste
choisir lalgorithme de cryptage. Java propose deux algorithmes pour crypter ces mots de passe, grce la classe
javax.security.MessageDigest :SHAetMD5.
LalgorithmeMD5esttrsutilisnotammentdanslecryptagedesmotsdepassedescomptesutilisateursdesystme
UNIX, il gnre un message crypt sur 16 octets. SHA gnre un message crypt sur 20 octets, il est donc plus
scurisant.
Unefoislalgorithmechoisi,ilfautensuitegnrerlemotdepassecrypt.Tomcat6fourniunscriptappeldigest.bat
pourlessystmesWindowsoudigest.shpourUNIX,quisetrouvedanslerpertoireCATALINA_HOME/bin,ilsutilise
depuisuneinvitedecommandeaveclasyntaxesuivante :
digest.(sh|bat) -a <algorithme> <mot de passe en clair>
Oalgorithmepeutprendrelesvaleursmd5ousha.Lersultatdecettecommandeaffichelemotdepassedonnen
clair,suividucaractre :(deuxpoints)etdelaversioncryptedecemotdepasse.
Exemple :gnrationdunmotdepassecryptpartirdelachane secret
C:\tomcat6\bin>d i g e s t . b a t - a s h a s e c r e t
secret:e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4
Lemotdepassecryptdoitmaintenanttresaisidanslefichiertomcatusers.xmlpourlutilisateurpourlequelilat
gnr, par exemple, un nouvel utilisateur appel administrateur, bnficiant du rle manager, peut accder la
consoledadministrationdeTomcat6.
<?xml version=1.0 encoding=utf-8?>
<tomcat-users>
<role rolename="manager"/>
<user username="administrateur"
password="e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4"
roles="manager"/>
</tomcat-users>

ENI Editions - All rigths reserved

- 3-

Avantdepouvoirtesterlefonctionnementdecetteconfiguration,ilfautraliserunemodificationsurladclarationde
llment <Realm> : il faut y ajouter lattribut digest, et lui donner comme valeur le nom de lalgorithme utilis pour
crypterlemotdepasse.Lorsquunutilisateursauthentifie,Tomcatcryptesasaisiedemotdepasseaveclalgorithme
spcifipardigest,etpeutensuitefairelacomparaisonaveclavaleurstockedanslefichier.
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" d i g e s t = " s h a " />
La
configuration
peut
maintenant
tre
teste
en
accdant

la
console
dadministration
(http://localhost:8080/manager/html) et en sauthentifiant avec le nom dutilisateur admin et le mot de passe
secret.

2.JDBCRealm
Les gestionnaires dauthentification de type InMemory, comme celui prsent prcdemment, prsentent
linconvnientdecompltementchargerlastructuredesfichiersXMLassocisenmmoireaudmarrageduserveur.Si
lefichiernecontientquetrspeudecomptesutilisateursetderles,lincidenceestfaible,parcontresilecontenudu
fichierestconsquent,lepoidsdecefichierenmmoireestloindtrengligeable.Danscecas,ilvautmieuxprivilgier
ungestionnairedauthentificationliunregistreutilisateurplusefficace.
UngestionnairedauthentificationJDBCutiliseunebasededonnesrelationnelleentantqueregistreutilisateurpour
stocker les informations dauthentification. Le fait dutiliser ce type de registre a lavantage dtre interrogeable
volont sans quil soit ncessaire de charger des donnes dans la mmoire de Tomcat 6. De plus, les donnes sont
moins facilement accessibles que lorsquelles sont stockes dans un fichier, laccs une base de donnes tant
naturellement soumis une authentification. Enfin, la modification des donnes dans cette base ne ncessite
absolumentpasderedmarrageduserveur.
Pour utiliser le composant JDBCRealm, la configuration de llment <Realm> doit faire rfrence la classe
org.apache.catalina.realm.JDBCRealm,avecsonattributclassName,maisilfautgalementpossderunestructurede
tablesdebasededonnestrsprcise,fairerfrencecettestructuredanslaconfiguration,ainsiquauxinformations
deconnexioncettebasededonnes.
LabasededonnesutiliseparlecomposantJDBCRealmdoitpossderdeuxtables,lunepourstockerlespairesnom
dutilisateur/mot de passe, et lautre pour faire les rfrences aux rles partir du nom dutilisateur. Une seule et
uniquecontraintedoittrerespecte :lenomdecolonnefaisantrfrenceaunomdutilisateurdoittrelemmedans
lesdeuxtables.
Exempledestructure :
Nomdelatable :utilisateurs
Nomdecolonne

Typededonnes

nom_util

VARCHAR

mdp_util

VARCHAR

Nomdelatable :roles
Nomdecolonne

Typededonnes

nom_util

VARCHAR

nom_role

VARCHAR

LescriptSQLdecrationdelabasededonnesetdestablespourMySQL5estlesuivant :
CREATE DATABASE `auth_tomcat6`;
USE `auth_tomcat6`;
CREATE TABLE `auth_tomcat6`.`utilisateurs` (
`nom_util` varchar(45) NOT NULL,
`mdp_util` varchar(45) NOT NULL,
PRIMARY KEY (`nom_util`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `auth_tomcat6`.`roles` (
`nom_util` varchar(45) NOT NULL,
`nom_role` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- 4-

ENI Editions - All rigths reserved

Ilfautensuiteinsrerdesdonnesdanscestables,parexemple,pourcrerlutilisateuradministrateuraveclemotde
passesecret,etayantlerlemanager,ilfaututiliserlesrequtessuivantesaveclesoutilsdeMySQL5 :
INSERT INTO `auth_tomcat6`.`utilisateurs`
VALUES(administrateur,secret);
INSERT INTO `auth_tomcat6`.`roles`
VALUES(administrateur,manager);
La configuration du serveur dans le fichierserver.xml fait intervenir llment <Realm> avec les attributs suivants, en
plusdelattributclassName:
driverName :lenomdelaclassedupiloteJDBCncessairepourlaconnexionlabasededonnes.
connectionURL :lURLdeconnexionJDBCutilisepouraccderlabasededonnes.
connectionName :lenomdutilisateurncessairelaconnexionlabasededonnes.
connectionPassword :lemotdepasseassocicenomdutilisateur.
userTable :lenomdelatabledebasededonnesquicontientlesidentifiantsutilisateuretleurmotdepasse.
userNameCol : le nom de la colonne qui contient le nom dutilisateur, la valeur doit faire rfrence une colonne
prsentedanslesdeuxtables.
userCredCol :lenomdelacolonnequicontientlesmotsdepasseutilisateurdanslatableidentifieparuserTable.
userRoleTable : le nom de la table de base de donnes qui contient lassociation entre les noms dutilisateur et les
rles.
roleNameCol :lenomdelacolonnedanslatableidentifieparuserRoleTablequicontientlenomdurle.
Voicilaconfigurationdellment<Realm>partirdelastructuredebasededonnesprsenteprcdemment :
<Realm

className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/auth_tomcat6"
connectionName="tomcat" connectionPassword="secret"
userTable="utilisateurs"
userNameCol="nom_util"
userCredCol="mdp_util"
userRoleTable="roles"
roleNameCol="nom_role" />

Avantdetesterlaconfiguration,ilfautsassurerquelepiloteJDBCdaccslabasededonneschoisisetrouvedans
lerpertoireCATALINA_HOME/lib.
Aprs redmarrage du serveur, le compte administrateur ajout doit permettre de sauthentifier sur lapplication de
gestiondesapplicationsdeTomcat6,puisquilpossdelerlemanager.
Utiliserdesmotsdepassecrypts
CommepourlegestionnairedauthentificationInMemory,ilestpossibledutiliserdesmotsdepassecryptsavecles
algorithmesMD5etSHA,permettantainsidaugmenterlaconfidentialitdesdonnesdelabasededonnes.
Ilydeuxmthodespossibles,lapremireconsisteutiliserlaprocduredcritepourlegestionnairedauthentification
InMemory,faisantintervenirlescriptdigest.bat oudigest.sh,etutiliserlemotdepassegnrpourlinsertiondu
compteutilisateurdanslatable.
La deuxime mthode est dpendante des possibilits de la base de donnes utilise. Une majorit des bases de
donnesdumarchproposedesfonctionsdecryptage :ilfautquecesfonctionsutilisentlesalgorithmesMD5ouSHA.
LabasededonnesMySQL5,utilisedanslesexemplesprcdents,possdecesdeuxfonctions.
InsertiondunutilisateuravecsonmotdepassecryptenMD5 :
INSERT INTO `auth_tomcat6`.`utilisateurs`
VALUES(administrateur, MD5(secret));
InsertiondunutilisateuravecsonmotdepassecryptenSHA:
INSERT INTO `auth_tomcat6`.`utilisateurs`
VALUES(administrateur, SHA(secret));
Il faut galement modifier la configuration de llment <Realm> dans le fichier server.xml pour indiquer lalgorithme

ENI Editions - All rigths reserved

- 5-

utilis,grcelattributdigest.Lattributdigestpeutprendrelesvaleursmd5oushaselonlalgorithme.
Configurationdu<Realm>pourutiliserdesmotsdepassecryptsenSHA :
<Realm

className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/auth_tomcat6"
connectionName="tomcat" connectionPassword="secret"
userTable="utilisateurs"
userNameCol="nom_util"
userCredCol="mdp_util"
userRoleTable="roles"
roleNameCol="nom_role"
digest="sha" />

Danslesexemplescidessus,laccslabasededonnessefaitaveclecomptetomcat,cecomptedoittrecret
autoris consulter, et exclusivement consulter, les donnes de la base utilise par le JDBCRealm. Il est peu
recommanddutiliserlecompteadministrateurdelabasededonnespourviterdecompromettrelascuritdecelle
ci,lemotdepasseducompteapparaissantenclairdanslaconfiguration.
PourajouteruncompteutilisateuravecMySQL5,ilyaplusieurspossibilits.Lapremireconsisteutiliserunerequte
SQLsurlatabledeMySQL5quicontientlescomptesutilisateurs.
AjouteruncompteutilisateurdansMySQL5 :
Cecompteestidentifiparlenomdutilisateurtomcatetlemotdepassesecret,noterquececomptedisposeuniquement
duprivilgedeslection(SELECT)surtouteslestables(*)delabaseauth_tomcat6.Lescommandessaisirsontengras.
mysql> GRANT SELECT ON auth_tomcat6.*
-> TO tomcat@localhost IDENTIFIED BY tomcat;
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
IlestgalementpossibledutiliserloutilgraphiqueMySQLAdministratorpourajouteruncompte.
LinterfacedeMySQLAdministratorpourlajoutdesutilisateursetdesprivilges :

PourajouterlutilisateurtomcatavecMySQLAdministrator,voicilestapessuivre :

- 6-

ENI Editions - All rigths reserved

DanslazoneUsersAccounts,faireunclicdroitetchoisirAddNewUser.

DanslongletUserInformationdelcranprincipal,saisirlenomdutilisateurtomcatdanslechampMySQLUser,et
lemotdepassesecretdansleschampsPasswordetConfirmPassword.

CliquersurleboutonApplychangesenbasdroite,lenomdutilisateurapparatdanslazoneUsersAccounts.

Faire un clic droit sur lutilisateurtomcat choisirAdd Host From Which The User Can Connect, et saisir le nom de
machinehbergeantleserveurTomcat6,danscetexemple,MySQL5etTomcat6sontsurlammemachine :saisir
localhost.

SlectionnerlongletSchemaPrivilegesdelcranprincipal.

Slectionnerlabasededonnesauth_tomcat6danslazoneSchemata.

Faire passer le privilge SELECT de la zone Available Privileges vers la zone Assigned Privileges laide de la
flche.

CliquersurApplychangespourvaliderlesmodifications.

LaconfigurationterminedoitapparatredelamaniresuivantedanslinterfacedeMySQLAdministrator :

ENI Editions - All rigths reserved

- 7-

3.DataSourceRealm
IlexisteunevarianteduJDBCRealmpermettantdutiliserunpooldeconnexionsJDBCpourseconnecterlabasede
donnes, il sagit du composant DataSourceRealm. La configuration de ce gestionnaire dauthentification est
exactementidentiquelaconfigurationdugestionnairedauthentificationprcdent,laseulediffrencersidedansla
maniredindiquerlesinformationsdeconnexionlabasededonnes.Pluttquedutiliseruneconnexiondirecteavec
une URL JDBC, le DataSourceRealm utilise un pool de connexion qui doit tre configur dans la section
GlobalNamingResourcedufichierserver.xml.
LavantageduDataSourceRealmparrapportauJDBCRealmestnotabledanslecasolesapplicationsontbeaucoup
de procdures dauthentification raliser, le fait dutiliser ce mcanisme de recyclage des connexions permet
daugmenterlesperformancesendiminuantlestempsderponsedecesapplications.
Voicilesattributsdellment<Realm>pourcegestionnairedauthentification.
className :lenomdelaclassedimplmentationestorg.apache.catalina.realm.DataSourceRealm.
dataSourceName :lenomJNDIdelaressourceconfigureetfaisantrfrenceaupooldeconnexionutiliser.
digest :permetdespcifierlalgorithmedecryptageutilissilesmotsdepassecryptssontmisen uvre.
userTable :lenomdelatabledebasededonnesquicontientlesidentifiantsutilisateuretleurmotdepasse.
userNameCol : le nom de la colonne qui contient le nom dutilisateur, la valeur doit faire rfrence une colonne
prsentedanslesdeuxtables.
userCredCol :lenomdelacolonnequicontientlesmotsdepasseutilisateurdanslatableidentifieparuserTable.
userRoleTable : le nom de la table de base de donnes qui contient lassociation entre les noms dutilisateur et les
rles.
roleNameCol :lenomdelacolonnedanslatableidentifieparuserRoleTablequicontientlenomdurle.
VoiciuneconfigurationcomplteutilisantleDataSourceRealm :
Configuration :
<Server ... >
<GlobalNamingResources>
<Resource
name="jdbc/AuthTomcat"
auth="Container"
type="javax.sql.DataSource"

- 8-

ENI Editions - All rigths reserved

driverName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/auth_tomcat6"
username="tomcat"
password="secret" />
</GlobalNamingResources>
<Service name="Catalina">
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/AuthTomcat"
userTable="utilisateurs"
userNameCol="nom_util"
userCredCol="mdp_util"
userRoleTable="roles" roleNameCol="nom_role" />
...
</Engine>
</Service>
</Server>
Tout comme pour le prcdent gestionnaire dauthentification, un pilote JDBC est ncessaire. La vrification du bon
fonctionnement de cette configuration peut se faire comme prcdemment, en scurisant laccs lapplication de
gestiondesapplications.
LecomposantDataSourceRealmpermetgalementdutiliserdesmotsdepassecrypts,laprocdureestidentique
celle dj dcrite prcdemment, et la configuration doit possder lattribut digest pour indiquer lalgorithme de
cryptageutilis.
Enfin,ilestgalementrecommanddecrerunutilisateurspcifiquepourseconnecterlabasededonnes.

4.JNDIRealm
Parmilesservicesprsentsdanslessystmesdinformationsdentreprise,leservicedannuaireestprobablementcelui
leplusfrquemmentrencontr.LessystmesUNIXontdabordeurecoursauserviceNIS(NetworkInformationSystem)
dveloppparSunMicrosystemsaudbutdesannes80,puis,plusrcemment,lessystmesMicrosoftWindowsdans
leursversionsserveurs2000et2003,ontproposuneimplmentationdiffrenteavecleserviceActiveDirectory.
Le standard actuel des services dannuaire est le protocole LDAP(Lightweight Directory Access Protocol). Le protocole
LDAP permet la recherche dinformations dans un serveur dannuaire LDAP. Ltude du protocole LDAP et du
fonctionnement des serveurs LDAP dpasse largement le cadre de cet ouvrage, mais voici quelques informations
simplespourcomprendrelefonctionnementdecettetechnologie.
Un serveur dannuaire LDAP est une base de donnes organise comme un carnet dadresses ou un annuaire
tlphonique,ilpeutcontenirdesdonnesdiversestellesquelesinformationsconcernantlesemploysdunesocit,
deslistesdecontactsprofessionnels,desinventaires
EnseconnectantsetypedeserveuravecleprotocoleLDAP,ilestpossibledefairedesrecherchessurcesdonnes
etdelesrcuprersousformedenregistrementsLDAP.Chaqueenregistrementestidentifiparunnomuniqueappel
nom distinctif (DN Distinguished Name), un nom distinctif est une liste de paires cls/valeurs spares par des
virgules,etquisecomportecommeunchemindaccsversuneinformationprcise.
Voiciunexempledenomdistinctiffaisantrfrencelutilisateurrdupontappartenantungroupeappelusersdans
lentrepriseidentifieparmonentreprise.com,dansceDN,monentreprise.comestappelnomdistinctifdebase.
cn=rdupont,ou=users,o=monentreprise.com
En utilisant ce nom distinctif dans une recherche, il est possible de rcuprer toutes les informations associes
lutilisateurrdupont,cesinformationssontfourniesdanslastructuredelannuairesousformedattributsLDAP.
LAPI Java JNDI permet la connectivit avec les serveurs dannuaires LDAP, mais dautres types dannuaires sont
utilisablesgrcelanotiondepilote,toutcommeavecJDBC.JNDIestfournieavecunpilotegnriquepouraccder
auxserveursdannuaireLDAP,maisdautrespilotespeuventtreutiliss.
P ourplusdinformationssurlatechnologieJNDI :http://java.sun.com/products/jndi.
LegestionnairedauthentificationJNDIRealmdeTomcat6permetdutiliserunservicedannuaireLDAPpourstockerles
informations dauthentification des utilisateurs. Comme avec les gestionnaires dauthentification utilisant les bases de
donnes, la syntaxe de llment <Realm> doit contenir les informations de connexion lannuaire, ainsi que des
indicationssurlastructuredesdonnesdanscetannuaire.
LaclassedimplmentationducomposantJNDIRealmestorg.apache.catalina.realm.JNDIRealm.

ENI Editions - All rigths reserved

- 9-

Voicilesattributsdellment<Realm>ncessairespouruneconfigurationdeJNDIRealm.
connectionURL :lURLdeconnexionauserveurdannuaire.
connectionName :lenomdutilisateurpourlaconnexionauserveurdannuaire.Sicetattributnestpasspcifi,cestle
comptedelutilisateurquisauthentifiequiestutilispourseconnecterlannuaire.
connectionPassword :lemotdepasseassocicenomdutilisateur.
contextFactory :lenomdelaclasseJavautilisecommecontexteinitialJNDI.Pardfaut,laclassedupilotegnrique
LDAPestutilise(com.sun.jndi.ldap.LdapCtxFactory).
digest :permetdespcifierlalgorithmeventuellementutilispourcrypterlesmotsdepasse.
userPassword :lenomdelattributLDAPquifaitrfrenceaumotdepassedelutilisateur.
userPattern :spcifieunmotifderechercheLDAPpourlocaliserlesenregistrementsdesutilisateurs.Cemotifutilisela
variable{0}pourreprsenterlenomdutilisateurfournilorsdelauthentification.
roleName :lenomdelattributLDAPquifaitrfrenceaunomdurle.
roleSearch :spcifieunmotifderechercheLDAPpourlalocalisationdesrlesdunutilisateur.Cemotifutiliselavariable
{0}pourreprsenterlenomdistinctifdelutilisateuret{1}pourreprsenterlenomfournilorsdelauthentification.
roleBase :spcifiellmentpartirduqueldoitcommencerlarecherchedesrles,pardfaut,elledmarrelaracine
delannuaire.
roleSubtree :sicetattributestpositionntrue,alorslarecherchedesrlesestrcursivedanslarborescence,etce
partirdupointindiquparroleBase.Lavaleurpardfautestfalse.
Pour illustrer le fonctionnement et la configuration de ce gestionnaire dauthentification, voici un exemple complet
utilisant lannuaire LDAP Open Source OpenLDAP, plus dinformations concernant linstallation, la configuration et
lutilisationdeOpenLDAPsontdisponiblesenAnnexeB.
Danslexemple qui suit, lorganisation(o organization) se nomme monentreprise.com,ilydanscetteorganisation,
deux units organisationnelles (ou organizational Unit) qui correspondent des groupes dlments. Lunit
organisationnelleutilisateurscontientdesentresLDAPdetypepersoncaractrisantlesutilisateurs,tandisqueroles
contientlesentresdetypegroupOfUniqueNames,adminet managerquicorrespondentauxdeuxrlesutilisspar
Tomcat6.LesentresdetypegroupOfUniqueNamesfontrfrencedautresentresLDAP,ici,lesmembresuniques
(uniqueMember) de ces rles sont les membres de lunitorganisationnelle utilisateurs en fonction des rles leur
donner.
Structuredelannuaire :

Traditionnellement,lesstructuresdannuairesLDAPsontexportablesdansdesfichiersenutilisantunformatstandard,
leformatLDIF(LightweightDataInterchangeFormat).Cesfichierspermettentunesauvegardeetunerestaurationdes
donnesLDAP.
LefichierLDIFdelastructurededonnesprsenteprcdemmentcontientlesinformationssuivantes :
version: 1
dn: o=monentreprise.com
objectClass: organization
objectClass: top
o: monentreprise.com
dn: ou=utilisateurs,o=monentreprise.com
objectClass: organizationalUnit
objectClass: top
ou: utilisateurs
dn: cn=administrateur,ou=utilisateurs,o=monentreprise.com
objectClass: person
objectClass: top
cn: administrateur
sn: administrateur

- 10 -

ENI Editions - All rigths reserved

userPassword:: cGFzc3dvcmQ=
dn: ou=roles,o=monentreprise.com
objectClass: organizationalUnit
objectClass: top
ou: roles
dn: cn=admin,ou=roles,o=monentreprise.com
objectClass: groupOfUniqueNames
objectClass: top
cn: admin
uniqueMember: cn=administrateur,ou=utilisateurs,o=monentreprise.com
dn: cn=manager,ou=roles,o=monentreprise.com
objectClass: groupOfUniqueNames
objectClass: top
cn: manager
uniqueMember: cn=administrateur,ou=utilisateurs,o=monentreprise.com
Pourimportercefichierdanslannuaire,deuxmthodessontutilisables:soitlesoutilsenlignedecommandestandards
livrsaveclannuaire,soitunoutilgraphiquetiercepartie.
Importationdufichierc:\scripts\monentreprise.com.ldifdepuislalignedecommande :
C:\Program Files\OpenLDAP>ldapadd -f monentreprise.com.ldif -x -D
"cn=Manager,o=monentreprise.com" -w secret
La configuration du <Realm>danslefichier server.xml doit maintenant faire rfrence toutes ces informations ainsi
quauxdonnesdeconnexionauservicedannuaire.
LesdonnesdeconnexionsontvariablesselonlaconfigurationduserveurLDAP.
Larecherchedesrlessefaitdanslunitorganisationnelleroles :roleBase="ou=roles,o=monentreprise.com".
LattributLDAPfaisantrfrenceaunomdurleestcn :roleName="cn".
Danschaquerle,lesutilisateurssontrfrencsparlattributuniqueMember,lavaleurdecetattributdoittrelenom
distinctifdelutilisateurauthentifi(lavariable{0}) :roleSearch="(uniqueMember={0})".
LattributfaisantrfrenceaumotdepasseutilisateurestuserPassword :userPassword="userPassword".
Enfin,larecherchedesutilisateurssefaitdanslunitorganisationnelleutilisateurs,aveclenomsaisi(lavariable{0})
lorsdelauthentification :userPattern="cn={0},ou=utilisateurs,o=monentreprise.com".
Laconfigurationcompltedellment<Realm>estalorslasuivante :
<Realm className="org.apache.catalina.realm.JNDIRealm"
connectionURL="ldap://localhost:389"
connectionName="cn=Manager,o=monentreprise.com"
connectionPassword="secret"
roleBase="ou=roles,o=monentreprise.com"
roleName="cn"
roleSearch="(uniqueMember={0})"
userPassword="userPassword"
userPattern="cn={0},ou=utilisateurs,o=monentreprise.com"
/>
Commepourlaccsunebasededonnes,ilestncessairedecreruncomptedinterrogationdelannuaireavecle
moins de privilges possibles car son identifiant et son mot de passe apparaissent en clair dans la configuration du
serveur.
Par dfaut, lannuaire OpenLDAP autorise tout utilisateur de lannuaire, laccs en lecture seul ses donnes. Ce
modedefonctionnementesttrspermissifetilconvientdelimiterlesaccs.

5.JAASRealm
Le gestionnaire dauthentification JAAS Realm utilise lAPI Java JAAS pour authentifier un utilisateur. Cette API est
intgreenstandarddanslaplateformeJavaSEdepuislaversion1.4.LutilisationdeJAASpermetdeconcevoirdes
modulesdauthentificationcapablesdeseconnecterquasimenttouslestypesderegistresdestockagedinformations
envisageables.

ENI Editions - All rigths reserved

- 11 -

partirdumomentoleregistreestintgrunlogicielpropritairenonstandard,oubiensilastructuredannuaire
LDAP ou de base de donnes relationnelle ne permet pas dutiliser les gestionnaires dauthentification prsents
prcdemment,lecomposantJAASRealmestlasolution.
Il existe sur le march des modules dauthentification JAAS prts lemploi, mais il est galement possible de
programmer
son
propre
module
dauthentification

partir
des
classes
fournies
par
JAAS
(javax.security.auth.spi.LoginModuleetjavax.security.Principal).
Ltudedelaconceptionetdufonctionnementdecesmodulesdpassantlecadredecetouvrage,plusdinformations,
et notamment des tutoriaux sur JAAS sont disponibles sur le site de la technologie JAAS :
http://java.sun.com/products/jaas/.
LaconfigurationdugestionnairedauthentificationJAASsefaitenquatretapes :

ObteniroucrireunmoduledauthentificationJAAS.

Configurerlemoduledauthentification.

Configurer llment <Realm> dans le fichier server.xml, dans ce cas lattribut className vaut
org.apache.catalina.realm.JAASRealm.

ObteniroucrireunmoduledauthentificationJAAS
LAPIJAASproposeenstandarduncertainnombredemodulesdauthentificationnotamment pourutiliserunebasede
compte locale UNIX ou Windows NT, mais il existe un autre module trs utilis car il permet lauthentification des
utilisateurs dans un domaine Windows 2000 en utilisant lActive Directory. Ce module est disponible en libre
tlchargementladressehttp://free.tagish.net/jaas/index.jsp.
Un module dauthentification est principalement compos de trois classes, quil faut crire sil est ncessaire de
concevoirsonpropremoduledauthentification :

Laclasseprincipaledumodule :ellepermetlaconnectivitavecleregistreutilisateurchoisi.

Laclassequireprsentelesutilisateurs,elleestbasesurjavax.security.Principal.

Laclassequireprsentelesrles,elleestbasesurjavax.security.Principal.

Les classes du module dauthentification doivent tre accessibles Tomcat 6, elles doivent donc se trouver sous
CATALINA_HOME/libetdoiventtrefourniessousformedarchive(.jar).
Configurerlemoduledauthentification
Les modules dauthentification ncessitent un fichier de configuration, souvent nomm jaas.config. Ce fichier permet
dactiver le module ainsi que de passer des options de configuration, il doit faire rfrence au nom du module, la
classe du module et ventuellement aux options de configuration. Chaque module possde ses propres valeurs, en
gnraldocumentes,pourcefichier.
Voiciunexempledefichierjaas.config,utilisantlemoduledauthentificationpourlesdomainesWindows2000 :
JAASLogin {
com.tagish.auth.win32.NTSystemLogin required
returnNames=true
returnSIDs=false
defaultDomain="MONDOMAINE";
};
AvecTomcat6,lesfichiersjaas.configsontgnralementcopisdanslerpertoireCATALINA_HOME/conf.
Lenomdecefichierdoitensuitetrepassenvaleurdeloptiondedmarrage java.security.auth.login.configdela
Machine Virtuelle Java, avec Tomcat 6 cela se fait en ajoutant la ligne suivante dans le script
CATALINA_HOME/bin/catalina.batsousWindowsetCATALINA_HOME/bin/catalina.shsousUnix/Linux :
set JAVA_OPTS=%JAVA_OPTS% -Djava.security.auth.login.config=...

Configurerllment
Laderniretapeconsistedclarerllment<Realm>etfournirlesattributsncessaireslutilisationdecetypede
gestionnairedauthentification.LesattributssupplmentairesclassNamesontlessuivants :

- 12 -

ENI Editions - All rigths reserved

appName : le nom dapplication qui est pass au contexte dauthentification, cette valeur doit tre la mme que celle
dclaredanslefichierdeconfigurationdumodule,soitdanslexemplecidessus,JAASLogin.
roleClassNames :lenomdelaclassequireprsentelesrles,silyenaplusieurs,ilfautlesspareravecdesvirgules.
userClassNames :lenomdelaclassequireprsentelescomptesutilisateur,silyenaplusieurs,ilfautlesspareravec
desvirgules.
Llment<Realm>pourutiliserlemoduledauthentificationpourlesdomainesWindows2000 :
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="JAASLogin"
userClassNames="com.tagish.auth.win32.typed.NTUserPrincipal"
roleClassNames="com.tagish.auth.win32.typed.NTGroupPrincipal" />

ENI Editions - All rigths reserved

- 13 -

ConfigurerTomcatpourleSingleSignOn
Chaqueapplicationwebpossdeuneportedauthentificationquiluiestpropre,cestdirequelauthentificationdun
utilisateur sur une application ne lui donne aucun droit sur une autre. Par exemple, en supposant quun utilisateur
bnficiedesrlesncessairespouraccderdeuxapplicationsdistinctes,sil sauthentifie sur lune et quilsouhaite
basculersurlautre,ildevraserauthentifier.
Cecomportementpardfautestintressantpourdesraisonsdescurit,maisilpeuttrencessairedimplmenterun
mcanismedauthentificationunique,SingleSignOn,entreplusieursapplications,notammentdanslesenvironnements
detypeportail,ouplusieursapplicationsdoiventtreaccessiblespartirdummeidentifiant.

1.LaValvedauthentificationunique
Pour mettre en uvrelauthentificationunique,Tomcat6utiliseuncomposantValveconfigursurlhtehbergeant
lesapplicationsentrelesquelleslauthentificationuniqueestinstaller,ilnestdoncpaspossibledemettreen uvre
lauthentification unique entre des applications configures dans des htes (lment de configuration <Host>)
diffrents.Deplus,touteslesapplicationsdoiventutiliserlemmegestionnairedauthentification,ildoitdoncyavoir
unlment<Realm>configursousllment<Host>ousousllment<Engine>.
Laconfigurationraliserdanslefichierserver.xmlesttrssimpledanslamesureolesattributsdeconfigurationde
llment<Valve>utilisersontlimits.
Exemple :
<Host name="localhost" ...>
...
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
/>
...
</Host>
Cependantplusieurscontraintessontprendreenconsidrationlorsdelamiseen uvredecemcanisme.
Dabord,unefoisauthentifi,lutilisateurvaobtenirsesrlesdefaondfinitive,chaquedemandeduneapplication,
sesrlesserontprsentsaugestionnairedauthentificationetilsdoiventluipermettredaccderlapplication.
Ensuite,ladconnexiondelutilisateursuruneapplication,luifaitperdresasessionsurlensembledesapplications.
Enfin,cemcanismeutiliselescookiesHTTPpourtransmettreuneinformationpermettantdassocierlesrequtesde
chaqueutilisateuravecleuridentitsurleserveur,ilfautdoncquelesnavigateursWebutilisssoientconfigurspour
accepterlescookies.

ENI Editions - All rigths reserved

- 1-

ScurisationavecSSL
Lesconsidrationsactuellesentermedescuritinformatiquefontquilesttrssouventncessairederequrirdes
mcanismesdecryptagedesfluxchangsentreunserveuretlesclientsquisyconnectent.Dansunenvironnement
Web, cest le protocole HTTPS qui permet un tel cryptage, les donnes qui transitent habituellement sur le protocole
HTTP,vontgrceHTTPS,trecryptes.
Le dbut de ce chapitre introduit au fonctionnement des protocoles de scurit utilisables avec HTTP, tels que SSL et
TLS.
Tomcat 6 dispose nativement dun connecteur supportant HTTPS, cependant la vocation premire dun serveur
dapplicationsoudunconteneurJEEestdhbergerdesapplications,lesmoteursdecommunicationHTTPetHTTPSne
sontdoncpasaussiperformantqueceuxdesserveursWeb.
UnmoyensimpledutiliserceprotocolescurisavecTomcat6,consisteprendreenchargelaconnectivitHTTPSavec
unserveurWebfrontalTomcat,commeleserveurApache,ouencoreleserveurIISdeMicrosoft.Cetteconfiguration
permetdebnficierdesperformancesduserveurWeb,ainsiquedestrsnombreusesoptionsdeconfigurationdeces
serveursconcernantlascurit,Tomcat6tantunpeumoinsconfigurableconcernantHTTPS,quunserveurWeb.
Cetypedeconfigurationestexpliquunpeuplusloindanscettepartie.

1.Gnrationdescertificatsetclsdecryptage
Pour crypter les changes entre clients et serveur, HTTPS utilise une cl publique et une cl prive, tout ce qui est
crypt avec la cl prive, nest dcryptable quavec la cl publique, et inversement. La cl publique est diffuse au
client, la cl prive reste sur le serveur, et ladministrateur veillera tout particulirement protger cette cl, bien
quellesoitprotgeparunmotdepasse.
Audel de laspect cryptage de flux entre le serveur et ses clients, il faut galement un moyen de sassurer de
lauthenticit du serveur, en effet, rien ne garantit au client que le serveur avec lequel il va changer des donnes
sensibles,estbienceluiquilprtendtre !
Pour garantir lauthenticit dun serveur, les techniques de cryptage introduisent la notion de certificat. Un certificat
obtenuparunclientluipermetdevrifierlidentitdunserveur,etdobtenir,silacceptelecertificat,laclpubliquedu
serveur,danscecas,leschangesscurisspourrontavoirlieu.
Lescertificatspeuventtregnrsparladministrateurduserveur,mais,danscecas,riennegarantitauclientquele
serveurnestpasunserveurpirate,touteslesdonnesducertificatpeuventtrefalsifiesCestlquinterviennent
lesautoritsdecertification.
Une autorit de certification est une socit habilite dlivrer des certificats de cryptage : avant de dlivrer ce
certificat,lautoritdecertificationaurafaittouteslesvrificationsncessairesconcernantlauthenticitdudemandeur
ducertificatainsiquesursesintentionsconcernantlutilisationdececertificat.
Il existe plusieurs autorits de certification, comme par exemple la socit VeriSign qui est la plus connue. Les
navigateursWebactuelsdisposentdunelistedesautoritsdecertification,desortequelorsquunnavigateurreoit
uncertificatmisparcessocits,ilsneposentaucunesquestionsconcernantlauthenticitducertificatreu.
Ilestcependantpossiblepourunadministrateurdegnrerluimmeuncertificat,maislesutilisateursnesontpasen
mesuredevrifierlauthenticitdececertificat,toutdpenddudegrdeconfianceentrelesdeuxparties,etdudegr
deconfidentialitdesdonneschanges.
LagnrationduncertificatpourlestechnologiesJavasefaitavecunoutilfourniparleJDK,loutilKeytool.Cetoutilen
ligne de commande permet de gnrer un certificat sign par lmetteur mais pas par une autorit de certification.
CettecommandesetrouvedanslerpertoireJAVA_HOME/bin.
Lensembledesclsgnreseststockdansunfichierparticulierappelkeystore,ouentreptdestockagedescls,
cefichierdoittreprotgparunmotdepasse.Deplus,unmotdepassedoittrefournipourlaclpriveduser
veur:avecTomcat6,ilestncessairequecesdeuxmotsdepassesoientidentiques !
Pourgnreruncertificatautosign,loutilkeytoolsutilisedelamaniresuivante :
JAVA_HOMEdoittreremplacparsavaleurenfonctiondelinstallationduJDK.
keytool -genkey -alias monserveur -keyalg RSA
Par dfaut, le fichier de stockage des cls est gnr dans le rpertoire personnel de lutilisateur qui saisit cette
commande,etlefichiersappel.keystore.Ilestpossibledemodifierlenometlemplacementdecefichierenutilisant
loptionkeystore.
Exemple :
Changementdunometdelemplacementdufichierdestockagedescls.

ENI Editions - All rigths reserved

- 1-

keytool -genkey -alias monserveur


-keyalg RSA - k e y s t o r e C : \ s e c u r i t y \ m o n f i c h i e r . k e y s t o r e
Unefoislacommandevalide,ilfautrenseignerlesinformationsquivontpermettredesignerlecertificat.Lapremire
chose consiste donner un mot de passe pour le fichier de stockage des cls, ensuite, toutes les informations
concernantlidentitdelasocitquignrelecertificat,etenfin,lemotdepasseducertificat:ilestimportantquece
motdepassesoitlemmequeceluidufichierdestockagedescls.
Interactionaveclacommandekeytoollesinformationsdonner:

Pourobteniruncertificatsignparuneautoritdecertification,laprocdureestassezdiffrente.Lapremiretape
consiste crer le certificat et une demande de certificat (CSR Certificate Signing Request), qui sera utilise par
lautoritdecertificationpoursignerlecertificat.
Il faut pour ceci utiliser la commande keytool avec la syntaxe prcdente, attention simplement au fait quici, il est
ncessairededonnerlURLdesonsiteInternet(parexemple,www.monentreprise.com)danslazonedesaisienom
etprnom,sicecertificatdoittreutilissurInternet.
keytool -genkey -alias tomcat6 -keyalg RSA -keystore
C:\security\www_monentreprise_com.keystore
Ensuitelademandedecertificatestcreaveclacommandesuivante :
keytool -certreq -keyalg RSA -alias tomcat6
-file www_entreprise_com.csr
-keystore C:\security\www_enterprise_com.keystore
Lefichierwww_monentreprise_com.csrcontientlademandedecertification.Ilfautmaintenantserendresurlesite
Internetdelautoritdecertificationchoisieetsuivrelesinstructionspermettantdobteniruncertificat:laprocdure
peutprendreplusieursjours.
Unefoisquelautoritdecertificationarenvoylecertificat,ilfautlimporterdanslefichierdestockagedescls.La
premirechosefaireestdetlchargerlecertificatracinedelautoritdecertificationsursonsiteInternet,puisenfin
dimporterlesfichiers.
Importationducertificatracinedelautoritdecertification :
keytool -import -alias root -keystore
C:\security\www_monentreprise_com.keystore -trustcacerts -file
<fichier de certificat racine>
Importationdunouveaucertificatsignparlautoritdecertification :
keytool -import -alias tomcat6 -keystore
C:\security\www_monentreprise_com.keystore -trustcacerts -file
<le fichier du certificat>

- 2-

ENI Editions - All rigths reserved

2.ConfigurationduconnecteurHTTPS
LeserveurTomcat6propose,danssaconfigurationpardfaut,unconnecteurHTTPSprconfigur:cetteconfiguration
estmiseencommentairedanslefichierserver.xml,aussiilesttrssimpledactiverceconnecteur.Cependant,ilpeut
trencessairedadaptercertainesdecesdirectives,notammentencequiconcernelemotdepassedelentreptde
stockagedescls,etlemplacementdufichierquireprsentecetentrept.
LeconnecteurHTTPSdeTomcat6utilisellmentdeconfiguration<Connector>,voicisadclarationcommentedans
lefichierserver.xmlpardfaut :
<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<!-<Connector port="8443"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
Cetlment<Connector>possdelesmmesattributsquelesautresconnecteurs,maisilenagalementquiluisont
propres.
keystoreFile :permetdindiquerlechemindufichierdestockagedesclssiunautrefichierqueceluiutilispardfaut
estutilis,lecheminpeuttreabsoluourelatifCATALINA_HOME.Lefichierpardfautsenomme.keystoreetse
trouvedanslerpertoirepersonneldelutilisateurquignrecefichier.
keystorePass :LEmotdepassedufichierdestockagedescls.Lavaleurpardfautestchange.
sslProtocol : le protocole de cryptage utilis par HTTPS. Les recommandations sont les suivantes : si une Machine
VirtuelleJavadeSunMicrosystemsestutilisealorsdonnerlavaleurTLScetattribut,silaMachineVirtuelleJavaest
fournieparIBM,alorsutiliserSSL.
clientAuth : permet dindiquer si les clients qui veulent utiliser ce connecteur doivent ou non disposer duncertificat
client.Lavaleurpardfautestfalse.
truststoreFile :lefichierutilispourvaliderlescertificatsclients.
truststorePass :lemotdepassedecefichier.
Voicilaconfigurationutiliseraveclecertificatautosigngnrltapeprcdente :
<Connector port="8443"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="c:\security\www_monentreprise_com.keystore"
keystorePass="Mot De Passe" />
lexemple fourni dans le fichier server.xml par dfaut, sont simplement ajouts les attributs faisant rfrence au
fichierdestockagedesclsetsonmotdepasse.
Une fois le connecteur configur, le serveur Tomcat 6 doit tre accessible via HTTPS, par exemple
https://localhost:8443.

3.UtiliserleserveurWebApachecommeserveurfrontalHTTPS
La configuration idale en termes de performance et de fiabilit, comme prcis prcdemment, consiste utiliser le
moteur HTTPS dun serveur Web la place de celui de Tomcat 6. Il existe deux implmentations dApache pour
fonctionnersurHTTPS :ApacheSSLetApacheutilisantlemodulemod_ssl.
La configuration dApache pour fonctionner sur HTTPS dpasse le cadre de cet ouvrage, cependant la procdure est
donneendtailsdanslouvrageApache(version2) :Installation,configurationetscurisationdanslacollection
RessourcesInformatiquesauxEditionsENI.
Voicilaportiondufichierhttpd.confdApachepermettantlaconfigurationdeHTTPSavecmod_ssl :
LoadModule ssl_module modules/mod_ssl.so
...
Listen 443
...
AddType application/x-x509-ca-cert .crt
ENI Editions - All rigths reserved

- 3-

AddType application/x-pkcs7-crl .crl


...
<VirtualHost _default_:443>
SSLEngine on
SSLOptions +StdEnvVars +ExportCertData
SSLCipherSuite
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile /usr/apache2/conf/ssl/ritomcat6.crt
SSLCertificateKeyFile /usr/apache2/conf/ssl/ritomcat6.key
</VirtualHost>
Dans la mise en uvre conjointe dApache et Tomcat 6 pour utiliser HTTPS, il y a des options de configuration
indispensablesajoutersilesdeuxserveurscommuniquentgrcemod_jk.Cesoptionspermettentdetransfrerles
informations HTTPS dApache vers Tomcat 6 car les applications peuvent avoir besoin daccder ces informations,
tellesquelidentifiantSSLparexemple.
Voicilesdirectivessupplmentairesajouterpourmod_jkdanslefichierhttpd.confdApache :
JkExtractSSL On
JkHTTPSIndicator HTTPS
JkSESSIONIndicator SSL_SESSION_ID
JkCIPHERIndicator SSL_CIPHER
JkCERTSIndicator SSL_CLIENT_CERT
Ces directives permettent Apache de crer les variables denvironnement ncessaires mod_jk pour obtenir et
propagerlesinformationsSSL.

- 4-

ENI Editions - All rigths reserved

Restrictionsdaccs
Unautreaspectdelascuritestlinterdictionpureetsimpledaccderdesressources.Selonlaconfiguration,ilest
possibledinterdirelaccsauserveurcomplet,unhteparticulierdeceserveur,ousimplementuneapplication.

1.UtiliserlesValves
Tomcat6utiliselemcanismedefiltrevoquauchapitreAdministrationduserveurpourimplmenterdesrestrictions
daccs en fonction du nom dhte ou des adresses IP des clients qui se connectent. Les composants Valve utiliss
sont respectivement implments avec les classes org.apache.catalina.valves.RemoteHostValve et
org.apache.catalina.valves.RemoteAddrValve.
Cesdeuxfiltresutilisentlesmmesattributsallowetdeny.
Lattribut allow prend une liste dadresses IP ou de noms de machines, selon le type du filtre, si cet attribut est
spcifi,unclientquiseconnectedoitimprativementappartenirlalistespcifiepar allow,sinonsarequteest
rejete. Par contre, si lattribut allow nest pas spcifi, toutes les requtes clientes sont acceptes sauf si elles
correspondentuneconditiondfiniepardeny.
Lattributdenyprend,luiaussi,unelistedadressesIPoudenomsdemachines.Sicetattributestspcifi,unclientqui
seconnectenedoitpasappartenirlalistespcifiepardeny,sinonsarequteestrejete.Sicetattributnestpas
spcifi,alorslapolitiquedacceptationestentirementgreparallow.

a.RestrictionparadresseIP
LesadressesIPsontspcifiesintgralementoubienenutilisantdescaractresderemplacement.Ilestpossiblede
spcifierplusieursadressesouplagesdadressesenlessparantpardesvirgules.
Exemple:
Laccsestautorisuniquementpourladresselocale(127.0.0.1),etlesmachinesdadresse10.x.x.x.
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1,10.*" />

b.Restrictionparnomdemachine
DelammemanirequepourlarestrictionparadresseIP,lesnomsdhtespeuventtrespcifisintgralementou
bienenutilisantdescaractresderemplacement.
Pourfonctionnercorrectement,leserveurTomcat6doitfaireunersolutionDNSinverse,ilestdoncncessaireque
lattributresolveHost de llment<Connector>aitlavaleur true.Deplus,ilfautprendregardespcifiertousles
nomspossiblespourunemachinesiellepossdeplusieursnoms.
Exemple:
Laccsestautorisuniquementpourlesmachinesdurseaueni editions.fr.
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.eni-editions.fr" />

ENI Editions - All rigths reserved

- 1-

Legestionnairedescurit :utiliserTomcatenmodescuris
LesMachinesVirtuellesJavadisposentduneclasseJavaparticulireappeleSecurityManager,etcedepuislesversions
1.2.Cetteclasseestungestionnairedescuritquipermetderestreindrelexcutiondecertainesclassesetdinterdire
laccsauxressourcesdusystmeauxclassesJavaquisexcutent,etce,avecuntrsgranddegrdecontrlesurles
classesetlesressources,ilestdoncpossibledinterdirelaccsunfichierouunprogrammeparticulierparexemple.
Lactivationdugestionnairedescuritestparticulirementrecommandsurlesserveursdapplications,eneffet,sipar
exemple, un composant Java utilise la mthode Java System.exit() permettant larrt de lenvironnement dexcution,
cestlaMachineVirtuelleJavaduserveurTomcat6quisarrte,ilfautdonctoutprixviterceci.
Lorsquil est activ, le gestionnaire de scurit interdit tout, il utilise des fichiers de configuration qui dterminent les
autorisationsdaccsauxressources.Cesfichiersportentengnrallextension.policy.
Unfichierpolicypossdelasyntaxesuivante :
grant [codeBase <code>] {
permission <classe> [<nom>, <liste dactions autorises>];
};
LadirectivecodeBasepermetdespcifierlemplacementducodepourlequelcetteautorisationsapplique,siellenestpas
indique,cetteautorisationsappliquetouteslesclassessansexceptions.Ladirectivepermissiondoitfairerfrence
uneclasseJavaquimatrialiseletypedaccsautoriscecode,ainsiquunelistedactionspossibles,siaucuneaction
nestprcise,ellessonttoutesautorises.
Exemple:
Ladirectivesuivantepermetdautorisertoutlecodedurpertoire JAVA_HOME/lib/ext,lire(etuniquementlire)lefichier
C:\tmp\fichier.txt.
grant codeBase "file:${java.home}/lib/ext/*" {
permission java.io.FilePermission "C:\\tmp\\fichier.txt", "read";
};
IlyaplusieursmoyensdexprimerlavaleurdelattributcodeBase,selonlemplacementducode :
file:/C:/moncode/ :permetdefairerfrenceauxclassesJavadecerpertoire,lessousrpertoiresetfichiersJARde
cerpertoirenesontpasinclusparcemotif.
file:/C:/moncode/* :permetdefairerfrenceauxclassesJavaetauxfichiersJARdecerpertoire,lessousrpertoires
nesontpasinclusparcemotif.
file:/C:/moncode/- : permet de faire rfrence aux classes Java et aux fichiers JAR de ce rpertoire, ce motif implique
galementlessousrpertoires.
IlestpossibledefairerfrenceducodeenyaccdantparHTTP,danscecaslemotifdoitcommencerparhttp://au
lieudefile:/.
Les types de permissions sont indiqus par des classes Java, ainsi dans lexemple prcdent, la classe
java.io.FilePermissionfaitrfrenceauxautorisationsdaccsauxfichiers.
Voici les principales permissions dfinies en standard dans la plateformeJavaJ2SE,dautres produits peuvent ajouter
desclassesdepermissionsupplmentaires,cestlecasdeTomcat6quiajouteuneclassepourcontrlerlesaccsson
arborescenceJNDI.
java.security.AllPermission :permetdetoutautoriser.
java.security.SecurityPermission : autorise laccs aux diffrentes fonctionnalits du langage Java, et notamment le
SecurityManager.
java.io.SerializablePermission :autoriselasrialisationetlapersistancedesdonnesJava.
java.lang.reflect.ReflectPermission :autoriselutilisationdesfonctionnalitsderflexiondanslecodeJava.
java.lang.RuntimePermission : permet laccs aux lments dexcution. Cette permission permet notamment
dautoriser les mthodes qui agissent sur la Machine Virtuelle Java, comme larrt de cette dernire, le lancement dun
programme
java.net.NetPermission :autoriselesfonctionsrseaux.
java.net.SocketPermission : autorise la cration de sockets clients pour mettre des requtes rseau, la cration de
socketsserveurspourliredesrequtesentrantes.
java.util.PropertyPermission :autoriselaccsauxpropritssystmeschargesdanslaMachineVirtuelleJavalorsde
sondmarrage.

ENI Editions - All rigths reserved

- 1-

Lalistecompltedespermissionsetdesactionsquipeuventleurtreassocies,estdisponibleladressesuivante :
http://java.sun.com/j2se/1.5.0/docs/guide/security/permissions.html
Pour activer le gestionnaire de scurit, il faut ajouter une option de dmarrage la Machine Virtuelle Java, loption
Djava.security.manager,lefichierdautorisationpardfautchargparlegestionnairedescuritsappellejava.policy
etsetrouvedansledossierJAVA_HOME/lib/security.
Plus dinformation sur le gestionnaire de scurit et sur lcriture de fichiers dautorisations personnaliss sont
disponibles
sur
le
site
de
Sun
Microsystems

ladresse suivante
:
http://java.sun.com/j2se/1.5.0/docs/guide/security/

1.LancerTomcatenmodescuris
Dans le cas de Tomcat 6, lactivation du gestionnaire de scurit est dj prvu dans le script
CATALINA_HOME/bin/startup.bat ouCATALINA_HOME/bin/startup.sh, pour lactiver il faut invoquer ce script avec
loptionsecurity.
CATALINA_HOME/bin/startup.bat -security
Le
fichier
dautorisation
qui
est
CATALINA_HOME/conf/catalina.policy.

utilis

par

le

gestionnaire

de

scurit

est

le

fichier

2.ConfigurationdugestionnairedescuritpourTomcat
Le fichiercatalina.policy se dcoupe en trois parties, dabord les autorisations daccs pour les classes Java du JDK,
ensuitelesautorisationspourlecodedeTomcat6,etenfinlesautorisationspourlesapplicationsWeb.Ilesttrsrare
davoirmodifierlecontenudesdeuxpremiressections,parcontre,ilpeuttrencessairedajouterdesautorisations
pourlesapplications.
Lefichierdautorisationcatalina.policypermetauxapplicationsdesexcuteretdelireetcriredesfichierssetrouvant
dansleursrpertoirespersonnels,parcontreilneleurestpaspossiblede :

crerunchargeurdeclasse,

douvrirunesocketrseau,cequiestncessairepourseconnecterunebasededonnesouunserveurde
messagerieparexemple,

delireetcriredesfichiersquisetrouventendehorsdeleursrpertoires.

Lafindufichiercatalina.policycontientdesexemplesdautorisationpourlesapplications.
Exemple :
Autorisation pour laccs une base de donnes MySQL 5, situe sur la machine dadresseIP 10.1.1.1 et qui coute les
connexionssursonportpardfaut(3306).
grant codeBase "file:${catalina.home}/webapps/-" {
permission java.net.SocketPermission "10.1.1.1:3306", "connect";
};
noterquecetteautorisationsappliquetouteslesapplicationscarcodeBasefaitrfrenceaurpertoiredebasedes
applications.
Plusfinement,cetteautorisationpeutsappliquerpouruneseuleapplication :
grant codeBase "file:${catalina.home}/webapps/ListeEmployes/-" {
permission java.net.SocketPermission "10.1.1.1:3306", "connect";
};
Cependant ce nest pas suffisant pour permettre cette application de se connecter la base de donnes, il faut
galementquelle puisse lire le fichier JAR du pilote JDBC utilis, il faut donc ajouter une permission de lecture sur ce
fichier.
Exemple :
Ajout de la permission de lecture sur le fichier JAR du pilote JDBC pour MySQL 5, se trouvant dans le rpertoire
- 2-

ENI Editions - All rigths reserved

CATALINA_HOME/lib.
grant codeBase "file:${catalina.home}/webapps/ListeEmployes/-" {
permission java.net.SocketPermission "10.1.1.1:3306", "connect";
permission java.io.FilePermission"${catalina.home}/lib/mysql
-connector-java-5.0.3-bin.jar", "read";
};
Encasdeproblmepourdfinirlesautorisationsdaccs,ilestpossibledactiverunmodededbogagedugestionnaire
descurit.Attentioncarledbogagegnrenormmentdemessagesetilfaudraparcourirdesmilliersdelignesde
codeavantdetrouverlaligneintressante:latechniqueconsisterechercherlemotdenied.
Pour activer le dbogage, il suffit dajouter une option de dmarrage la Machine Virtuelle Java dans le fichier
CATALINA_HOME/bin/catalina.bat ou CATALINA_HOME/bin/catalina.sh, juste aprs les lignes de commentaires
situesendbutdefichier.
Syntaxepourlefichiercatalina.bat(Windows) :
set CATALINA_OPTS=%CATALINA_OPTS% -Djava.security.debug=all
Syntaxepourlefichiercatalina.sh(Unix/Linux) :
CATALINA_OPTS=$CATALINA_OPTS -Djava.security.debug=all
noter quici toutes les traces de dbogage sont actives, il est souvent suffisant de remplacer la valeur all par la
valeuraccess,failure.
Pourconclure,mmesilaconfigurationdugestionnairedescuritestlongueetfastidieuse,lactiverestungagede
scurittrsimportantpoursonserveuretlesapplications.

ENI Editions - All rigths reserved

- 3-

Autresconsidrationsdescurit
MmesilacommunautdedveloppeursdeTomcat6prendunsointoutparticulierlascurisationdesonserveur,il
existetoujoursunrisque,aussifaiblesoitil,devoirleserveurdtourndesavocationpremireparunpirate.Dansce
cas, le pirate peut avoir la main sur le systme et excuter des commandes sous lidentit de lutilisateur qui a lanc
Tomcat 6, il est donc recommand dexcuter Tomcat 6 sous lidentit dun utilisateur ayant le moins de privilges
possibles.
ancerTomcatavecuncompteutilisateurnonadministrateurnepeutsefairequesileserveurnutilisepasdeport
L
TCP/IPdontlenumroestinfrieur1024,cequiestlecaspardfaut.

1.ExcuterTomcat6avecuncomptesansprivilges
a.ConfigurationsousWindows
Sous Windows, il faut crer un compte avec les outils dadministration du systme, pour viter de lui donner des
permissions par hritage, il faut galement sassurer que cet utilisateur nappartient aucun groupe. Une fois le
comptecr,leserveurpeuttrelancaveclacommandesuivante :
C:\>runas /user:tomcat C:\apache-tomcat-6.0.13\bin\startup.bat
SiTomcat6estinstallpoursexcuterentantqueserviceWindows,ilfautditerlescaractristiquesdeceservice
pourquilsexcuteaveclecompteutilisateurspcifi.

Le systme Microsoft Windows peut utiliser deux types de systme de fichiers : NTFS et FAT32. Le premier dispose
dune gestion des permissions trs fine, alors que le second en est totalement dpourvu. Les systmes serveurs
dentrepriseutilisentmajoritairementNTFS.
Pour permettre lutilisateur sans privilge de dmarrer correctement le serveur, il faut lui donner les droits
ncessaires.Laprocdureestlasuivante :

SurlerpertoiredinstallationdeTomcat6,faireunclicdroitetchoisirProprits.

ENI Editions - All rigths reserved

- 1-

SlectionnerlongletScurit.

Ajouterlutilisateurlalisteetluidonnerlecontrletotaldurpertoire.

Ilpeuttregalementjudicieuxdesupprimerlesautrescomptesayantdesdroitssurcerpertoiredesortequilny
aitquelutilisateursansprivilgequipuisselancerleserveur.

b.ConfigurationsousLinux
Il y plusieurs possibilits pour crer un nouveau compte utilisateur sous Linux, soit utiliser les outils graphiques ou
bienutiliserlescommandesenligne.Danslamesureolesoutilsgraphiquesvarientdunedistributionuneautre,
seuleslescommandesenlignesontdonnesdanslesexemplesquisuivent.
UnutilisateurLinuxdoitncessairementappartenirungroupe,ilestdoncimportantdecrerungroupeparticulier
pourcenouveaucompteutilisateur.
Voicilesdiffrentestapesdecrationducompteutilisateursansprivilges,lescommandesdoiventtreexcutes
entantqueroot.
Dabord,crerlenouveaugroupepourcetutilisateur :
[root@localhost ~]# groupadd tomcat
Ensuitecrerlecompteutilisateurenlajoutantaugroupeprcdemmentcr :
[root@localhost ~]# useradd -g tomcat tomcat
Enfin,assignerunmotdepasseaucompteutilisateur :
[root@localhost ~]# passwd tomcat
Il faut galement donner les permissions cet utilisateur sur le rpertoire dinstallation du serveur et ses sous

- 2-

ENI Editions - All rigths reserved

rpertoires.
[root@localhost ~]# chown -R tomcat:tomcat /usr/apache-tomcat-6.0.13
Enfin,ledmarrageduserveursefaitaveclacommandesuivante :
[root@localhost ~]# /bin/su tomcat $CATALINA_HOME/bin/startup.sh
Si un script de dmarrage automatique a t cr pour Tomcat 6 comme prsent au chapitre Le serveur Apache
Tomcat6Installationetconfiguration,ilfautgalementpensermodifierlescommandesquiysontinvoques.
LescriptdedmarragepourTomcat6 :
Ceci est le script utilis au chapitre Le serveur Apache Tomcat 6 Installation et configuration, les lignes modifies
apparaissentengras.
#! /bin/sh
# Script de dmarrage pour Tomcat 6
#
# chkconfig: 2345 90 10
# description: Tomcat est un conteneur Web JEE
# processname: tomcat6
export CATALINA_HOME=/usr/apache-tomcat-6.0.13
export JAVA_HOME=/usr/jdk1.5.0_14
case "$1" in
start)
# Dmarrage echo "Dmarrage de Tomcat 6."
/bin/su tomcat $CATALINA_HOME/bin/startup.sh >/dev/null 2>&1
;;
stop)
# Arrt
echo "Arrt de Tomcat 6."
/bin/su tomcat $CATALINA_HOME/bin/shutdown.sh >/dev/null 2>&1
;;
restart)
# Re-dmarrage
echo "Re-dmarrage de Tomcat 6."
/bin/su tomcat $CATALINA_HOME/bin/startup.sh >/dev/null 2>&1
sleep 10
/bin/su tomcat $CATALINA_HOME/bin/shutdown.sh >/dev/null 2>&1
;;
*)
# Usage
echo "Usage: $0 start|stop|restart"
;;
esac

uel que soit le systme, il faut sassurer que lutilisateur qui lance le serveur a la visibilit des variables
Q
denvironnementJAVA_HOMEetCATALINA_HOME.

ENI Editions - All rigths reserved

- 3-

LesfichiersjournauxdeTomcat6
1.LesfichiersjournauxdeTomcat6
a.LesystmedejournalisationdeTomcat6
LabibliothqueCommonsloggingfaitpartieduprojetJakartadelafondationApache.LeprojetJakartaCommons
contientunensembledebibliothquesdedveloppementJavatrsvaries.Commonsloggingestunebibliothque
permettantlapriseenchargedelajournalisationdesapplications,ilexistedautresAPIdeprogrammationJavapour
lajournalisation,commeLog4j,unautreprojetApache,etjava.util.logging,uneAPIstandardinclusedansleJDK.
La caractristique deCommonslogging est doffrir une interface de programmation unifie permettant dutiliserde
manire transparente les fonctionnalits de journalisation natives cette bibliothque, mais galement celles de
Log4jetdejava.util.logging.
Tomcat 6 utilise limplmentation java.util.logging par dfaut, mais le problme de cette API est quelle ne peut
utiliserquuneseuleconfigurationparMachineVirtuelleJava.LesdveloppeursdeTomcat6ontdoncdveloppune
extensiondecetteAPIappeleJULI(JavaUtilLoggingInterface).
LesystmedejournalisationdeTomcat6utiliselefichierdeconfigurationlogging.propertiesquisetrouvedansle
rpertoire CATALINA_HOME/conf, cest le fichier de configuration principal du serveur, mais les applications
dployes dans le serveur peuvent fournir leur propre fichier logging.properties dans leur rpertoire WEB
INF/classes.

b.Structuredufichierlogging.properties
La premire partie du fichier logging.properties permet de spcifier les gestionnaires de fichiers journaux (les
handlers),lasecondequantelle,leslmentsquicriventdanscesfichiers(lesloggers).
Leshandlers
Leshandlerspeuventcriredestinationdunfichiertexte,oubienverslasortiestandard.Leshandlersquicrivent
dans un fichier utilisent la classe Java org.apache.juli.FileHandler, la sortie standard, elle, sappelle
java.util.logging.ConsoleHandler.
Pourdclarerunhandler,ilfautdabordluidonnerunnom,cenomdoittrecomposdunprfixeconstruitpartir
dun chiffre et de lettres, comme par exemple 1catalina, auquel on ajoute le nom de la classe du handler, ce qui
donnera par exemple 1catalina.org.apache.juli.FileHandler. Le dbut du fichier logging.properties contient la
proprit handlers, qui fait rfrence tous les gestionnaires de journaux utiliss dans le fichier. La
proprit.handlerspermetderfrencerlegestionnaireprincipalpourleserveur.
Unefoisnomm,leshandlersdoiventtreconfigursgrcedesattributs,certainsdecesattributssontcommuns
auxdeuxtypes,etdautressontspcifiqueschacun.
Listedesattributsdeconfigurationcommunsorg.apache.juli.FileHandleretjava.util.logging.ConsoleHandler :
level :permetdespcifierleniveaudejournalisation,lesvaleurspossibles,desmessageslesplusgravesauxplus
anodins,sont : SEVERE,CONFIG, INFO,WARN, FINE,FINEST ouALL. Le fait de positionner le niveau de journalisation
INFO,affichetouslesmessagesdetypeINFO,WARN,etSEVERE.
formatter : permet dindiquer une classe Java pour formater le contenu du fichier, les valeurs possibles sont
java.util.logging.SimpleFormater (par dfaut) et java.util.logging.XMLFormater, pour gnrer une sortie au
formatXML.
Listedesattributsdeconfigurationspcifiquesorg.apache.juli.FileHandler:
prefix :permetdespcifierleprfixedunomdufichier.Lavaleurpardfautestjuli..
suffix :permetdespcifierlesuffixedunomdufichier.Lavaleurpardfautest.log.
directory : permet dindiquer le rpertoire dans lequel sera stock le fichier. Lemplacement par dfaut est
CATALINA_HOME/bin/logs.
noterquelarotationdesfichiersjournauxseffectuetouteslesnuitsminuit,etlesnomsdesfichiersgnrsont
lasyntaxesuivante :
<prefix><date><suffix>
OdateestexprimselonlemotifAAAAMMJJ.

ENI Editions - All rigths reserved

- 1-

Exempledeconfigurationsimple :
LesfichiersproduitssontnommsCATALINA_HOME/logs/listeEmployes.AAAA DD JJ.txt.
handlers = 1le.org.apache.juli.FileHandler
1le.org.apache.juli.FileHandler.prefix = listeEmployes.
1le.org.apache.juli.FileHandler.suffix = .txt
1le.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1le.org.apache.juli.FileHandler.level = FINE
Lesloggers
LeslmentsdeTomcat6quipeuventutiliserlesystmedejournalisationsont<Engine>,<Host>,et<Context>.
Pourfairerfrenceun<Engine>ouun<Host>,cestlavaleurdesonattributdeconfigurationnamedanslefichier
server.xmlquivaservirlidentifier.
Parexemple,lenomutilissurllment<Engine>dufichierserver.xmlpardfautestCatalina,pourfairerfrence
cetlment,ilfautdonccrire :
org.apache.catalina.core.ContainerBase.[ C a t a l i n a ]
Pourcequiestdellment<Host>sonnomestlocalhost,cequidonne :
org.apache.catalina.core.ContainerBase.[ C a t a l i n a ].[l o c a l h o s t ]
Deuxattributsdeconfigurationsontdisponibles,levelethandlers.
Lattribut level permet de spcifier le niveau de journalisation, les valeurs possibles sont les mmes que pour les
handlers.Leniveaudejournalisationsurleshandlerspermetdefiltrerlestypesdemessagesquisontcrits,alors
queleniveaudejournalisationsurlesloggersdterminerellementlesmessagesquisontcrits.Cedoubleemploi
esttrsutilecarplusieursloggerspeuventutiliserhandlers.
Lattributhandlerspermetdespcifierlecomposantouunelistedecomposantshandlerappliquercecomposant.
Pourcequiestdesapplications,ladclarationestdiffrente.IlfautprciserlenomdesclassesJavaouunensemble
declasses.Parexemple,lapplicationillustresurleschmasuivantcontientlesclassesJava :

fr.eni.editions.ritomcat6.servlet.InteroServlet

fr.eni.editions.ritomcat6.bean.Employee

fr.eni.editions.ritomcat6.admin.servlet.AddUserServlet

Arborescencedelapplication :

Ilestpossiblededfinirunloggersuruneclasseprcise :
fr.eni.editions.ritomcat6.servlet.InteroServlet.level = INFO
fr.eni.editions.ritomcat6.servlet.InteroServlet.handlers =
1le.org.apache.juli.FileHandler
Oubiensurunensembledeclasses :
fr.eni.editions.ritomcat6.level = INFO

- 2-

ENI Editions - All rigths reserved

fr.eni.editions.ritomcat6.handlers = 1le.org.apache.juli.FileHandler
Danscedeuximeexemple,touteslesclassesdelapplicationsontdfiniesdanslelogger.
Laconfigurationsimplecomplte :leslignesrajoutessontengras.
handlers = 1test.org.apache.juli.FileHandler
1test.org.apache.juli.FileHandler.prefix = listeEmployes.
1test.org.apache.juli.FileHandler.suffix = .txt
1test.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1test.org.apache.juli.FileHandler.level = FINE
fr.eni.editions.ritomcat6.level = INFO
fr.eni.editions.ritomcat6.handlers = 1le.org.apache.juli.FileHandler
CetteconfigurationpeuttreajouteaufichierCATALINA_HOME/conf/logger.properties,oubientrecritedans
unfichierlogger.propertiesquidevrasetrouverdanslerpertoireWEBINF/classesdelapplication.

c.Lefichierlogging.propertiespardfaut
LefichierCATALINA_HOME/conf/logging.propertiesestpardfautconfigurpourgnrerlesjournauxsuivants :

un journal global pour le serveur qui saffiche simultanment dans la console MSDOS du serveur sous
WindowsetdanslefichierCATALINA_HOME/logs/catalina.AAAAMMJJ.log.

un journal pour lhte par dfaut (localhost) dans le fichier CATALINA_HOME/logs/localhost.AAAAMM


JJ.log.

unjournalpourchacunedesapplicationsdadministrationduserveur,commeparexemplelemanageretla
consoledadministration.Lesfichiersgnrsportentlenomdelapplication.

Enconclusion,cenouveausystmedejournalisationesttrsprometteurmaisdjbeaucoupplusintressantque
lanciensystmeutilisantleslments<Logger>.Eneffet,ilntaitpasparexemplepossibleprcdemmentdedfinir
plusieurs journaux sur un mme lment, le fait que ce nouveau systme soit bas sur un standard Java est
galementungagedeprennitetdestabilit.Enfin,proposerunealternativetellequeLog4jpermetdallerunpeu
plusloindanslamiseenplacedunsystmedejournalisation.
PourplusdinformationssurLog4jetsaconfiguration :http://logging.apache.org/log4j

ENI Editions - All rigths reserved

- 3-

Testerlamonteenchargeduserveur
Aprsavoircorrectementconfigursonserveur,unadministrateursedoitdetesterlachargequeceluiciseraamen
subirlorsquilseradfinitivementinstallenproduction.valuerlachargequunserveurpeutsupporternestpaschose
facile,maisquelquestechniquesexposesdanscechapitredevraientpermettreunepremirevaluation,lobjectiftant
degarantirlesmeilleuresperformancespossiblesduserveuretdesapplications.
Entouscas,ilestncessairedavoirrecoursdesoutilspermettantdesimulercettechargeetdenmesurerlesimpacts
surlesdiffrentscomposantsduserveur,afindintervenir,lecaschant,sursaconfiguration.
Ilexistebeaucoupdoutilsdetestdemontenchargesurlemarch,commeloutilcommercialLoadRunnerdelasocit
Mercury.Lemondedulogiciellibrenestpasenreste,etApacheJMeterestunproduitquimonteetquimritequelon
syintresse.

1.ApacheJMeter
ApacheJMeter est un outil crit entirement en Java permettant de tester les performances des diffrents lments
duneinfrastructuremultitiers.JMeterestcapabledegnrerdestestssurlesserveursWebenHTTPetHTTPS,surles
serveursdebasededonnesavecJDBC,surlesserveursdannuaireavecLDAP,etsurdesserveursFTP.Enplusde
supporter ces diffrents protocoles rseaux, JMeter fournit galement un ensemble de composants de collecte et de
mesuredesrsultatsdestestsexcuts.
tantcritenJava,ilrequiertuneMachineVirtuelleJavapourfonctionner,laversioninstallepourleserveurTomcat
peutamplementfairelaffaire,maisilvautmieuxviterdexcuterJMeteretTomcat6surlesmmesmachinesafinde
nepasfausserlestests.
JMeter est librement tlchargeable sur le site http://jakarta.apache.org/jmeter, et est fourni sous forme darchive
ZIPoudarchiveTARpourlessystmesUnix.LaversionactuelledeJMeterestla2.3.1.
InstallerJMeterncessitesimplementladcompressiondelarchivedansunrpertoiredusystmequiestutilispour
lancer les tests. Il faut videmment au pralable, sassurer quun JRE ou un JDK soit install correctement, et que la
variabledenvironnementJAVA_HOMEpointeverssonrpertoiredinstallation.
ans la suite de louvrage, JMETER_HOME fait rfrence au rpertoire dans lequel larchive de loutil a t
D
dcompresse.
LelancementdeJMetersefaitenutilisantlescriptjmeter.batsousWindows,etjmetersousUnixetLinux,cesscripts
setrouventsousJMETER_HOME/bin.Audmarrage,linterfaceestassezsommaireetprsentedeuxparties,leplan
detest(TestPlan),etleplandetravail(WorkBench).Leplandetestcontientlalistedescomposantsutiliss pourle
test, comme les chantillons, les moniteurs de rsultats Le plan de travail contient des lments qui ne sont pas
utilissparleplandetestetquipeuventtreprconfigursetrajoutsparsimpleglisserdplacerversleplandetest,
ilsagitdunespacedestockagetemporaire.
InterfacedeJMeteraudmarrage:

ENI Editions - All rigths reserved

- 1-

a.criredesplansdetestWebavecJMeter
Avant dcrire des plans de test avec JMeter, il est ncessaire de configurer le serveur et ses ressources dans des
conditionslesplusprochespossiblesdunenvironnementdeproduction.Ilfautgalementtravailleravecdesjeuxde
donnes significatifs, en effet, les rsultats seront compltement fausss si les tests sont mens avec trois
enregistrementsenbasededonnesalorsquelleestameneencontenirplusieursmilliersensituationrelle !
UnplandetestWebconsistetesteret stresser unserveurenutilisantHTTPouHTTPS,cestcetypedeplande
testquilfaututiliseravecTomcat6,maisgalementavecleserveurWebquipeuttrepositionnenfrontal.
VoicilestapesclsdelaconstructiondunplandetestWeb :

Dfinirungroupedethreads :lobjectifdecettepremiretapeestdesimulerlenombrederequtesquele
serveur va absorber, ainsi que lintervalle de temps pendant lequel elles seront gnres. Un thread est
finalementassociunutilisateurpotentiel,quinaviguesurlapplication.

crirelaconfigurationduserveur :ilfautensuiteconfigurerlaccsauserveurdefaondfinitiveenindiquant
lenomdemachinesurlequelilsetrouve,sonnumrodeport,ainsiqueleprotocolequiserautilis(HTTPou
HTTPS).

crire les requtes HTTP : les requtes HTTP vont permettre de simuler la navigation de lutilisateur dans
lapplication.Chaquerequtecorrespondunedemandederessourcesdelapartdelutilisateur.

Ajouterunoudescomposantsdemesure :JMeterdisposeenstandarddeplusieurscomposantsdemesure,
ilssonttousdiffrentsetcomplmentaires,ilfautdoncchoisirlesplusapproprisenfonctiondesparamtres
mesurer.

Enregistreretlancerletest :JMeterutilisedesfichiersdextension.jmxpourstockersesplansdetest.

Dfinirungroupedethreads
Voicilaprocduresuivrepourajouterungroupedethreads(ThreadGroup)auplandetest :

FaireunclicdroitsurTestPlan.

ChoisirAddThreadGroup.

Lapagedeconfigurationdugroupedethreadapparatdanslapartieprincipaledelcran.
- 2-

ENI Editions - All rigths reserved

Cetcranpermetdeprciserlenombredethreadsainsiquelintervalledetempspendantlequelilsserontdmarrs,
aveclechampRampUpPeriod,ainsisilenombredethreadsvaut100,etquelintervalledetempsvaut5,celafait
une moyenne de 20 threads dmarrs par secondes. Si lintervalle de temps vaut 0, alors tous les threads sont
dmarrsenmmetemps.
Il est possible de rejouer cette squence plusieurs fois ou linfini, avec le champ Loop Count. Enfin un calendrier
(Scheduler)estdisponiblepourprogrammeruntestendiffr.
Lecalendriersutiliseenspcifiantuneheurededbut(StartTime)etuneheuredefinpourletest(EndTime),siune
durepourletestestspcifieavecDuration,alorslavaleurEndTimeestignore,demme,siuncompterebours
pourledmarrageestspcifiavecStartupdelay,lavaleurStartTimeestignore.
crandeconfigurationdugroupedethread :

crirelaconfigurationduserveur
Unefoislegroupedethreadsajout,ilfautdfinirlesparamtresduserveurcontacterpourcesthreads,pourcela :

FaireunclicdroitsurThreadGroup.

ChoisirAddConfigElementHTTPRequestDefaults.

Llmentapparatentantqulmentenfantdugroupedethreads.
Lesvaleursdonnericisontleprotocoleutilis,httpouhttps,lenomouladresseIPduserveur,etlenumrodeport
de celuici. Il est galement possible dajouter des paramtres de requtes, dans ce cas, ils seront transmis avec
touteslesrequtesversceserveur.
crandeconfigurationduserveurcontacter :

ENI Editions - All rigths reserved

- 3-


crirelesrequtesHTTP
Le moment est maintenant venu dcrire les requtes HTTP, lobjectif tant de simuler la navigation dun utilisateur
danslapplication,ilfautdoncajouterautantdlmentsrequtesHTTPquencessaire.

FaireunclicdroitsurThreadGroup.

ChoisirAddSamplerHTTPRequest.

Lcran de configuration de la requte apparat. Il ny a que peu de chose renseigner ici, dans la mesure o la
configurationduserveurraliseltapeprcdenteapermisdespcifierdesvaleurspardfaut.Ilnestdoncpas
ncessairederedonnerlenomouladresseIPduserveur,nileprotocole,nilenumrodeportduserveur.
LesvaleursindispensablessonticilamthodeHTTPutiliser(GETouPOST),ainsiquelechemindelaressource.Le
chemin exprim ici doit prendre en compte le chemin de contexte de lapplication Web, par
exemple,/docs/index.html,pourenvoyerunerequtesurlapagedaccueildeladocumentationdeTomcat6.
IlpeuttregalementjudicieuxderenseignerlechampNameavecunevaleurexplicite,etcepourpouvoirfacilement
identifierlarequteparmitouteslesautresdanslarborescencedecomposants.
Dautresoptionspermettentdesuivrelesventuellesredirectionsprogrammesdanslespages,ouencoredenvoyer
des paramtres ou des fichiers dans la requte, trs utilises pour simuler un envoi de fichier sur le serveur par
exemple.
crandeconfigurationdunerequteHTTP :

- 4-

ENI Editions - All rigths reserved


Ajouterunoudescomposantsdemesure
Enfin,unplandetestneseraitpasintressantsansunmoyendevisualiserlecomportementduserveur,ilfautdonc
ajouterunmoniteurdersultat.

FaireunclicdroitsurThreadGroup.

ChoisirAddListenerViewResultsTree.

noterquelesmoniteurssonttrsnombreux,dautresexemplesmontrerontlutilisationdesprincipaux.
LemoniteurViewResultsTreeestextrmementsimplepuisquilpermetdafficherlarequteenvoyeauserveurainsi
quelesenttesHTTPetlesdonnesdelarponse.Ilnyapasdeconfigurationparticulire,saufdanslecasoles
donnesreuesdoiventtreenregistresdansunfichier,quilfautalorsindiquerdanslechampFilename.
crandeconfigurationdumoniteur.Voirlarbredesrsultats :

ENI Editions - All rigths reserved

- 5-


Enregistreretlancerletest
Unefoisleplandetesttermin,ilfautlenregistrer,puislelancerenutilisantlemenuRunStart.Lexcutionduplan
detestpeuttreinterrompuetoutmomentenutilisantlemenuRunStop.Pendantlexcutionduplandetest,un
carrvertapparatenhautdroitedelafentredeJMeter.

b.Plansdetestavancs :lescomposantsdeJMeter
Enplusdeslmentsdeconfigurationsimplesvoqusdanslapartieprcdente,JMeterdisposedunemultitudede
composantsdeconfigurationpermettantdecrerdesplansdetestreproduisantleplusfidlementpossiblelaralit.
Cescomposantstanttrsnombreux,lobjectifdecettepartieestdeprsenterceuxquisontlesplusemploysetqui
sontlisauxtestsWeb.
LescomposantsdeJMetersajoutentenutilisantlemenucontextuelobtenuparunclicdroitsurunlmentexistant,
etenchoisissantAdd.
Lescomposantsdevrification(Assertions)
Les composants de vrification (ou dassertion) permettent dappliquer des conditions sur les donnes qui sont
renvoyesparleserveur,etdevrifierquelesrponsesdecederniersatisfontbiencesconditions.Danslecasola
condition nest pas satisfaite, la requte laquelle ce composant a t ajout, apparat comme ayant gnr une
erreur.
LescomposantsdevrificationsajoutentsurlesrequtesHTTP.
Deux composants dassertions principaux sont disponibles : Response Assertion et Duration Assertion, ils sont
disponiblesdanslemenucontextuelAddAssertions.
Le composant Response Assertion permet de tester si une chane de caractre est prsente dans la rponse du
serveur,oubienlecodedtatHTTPdecetterponse.
Le composant Duration Assertion impose un temps de rponse minimum pour le serveur. Cette condition est trs
pratique pour vrifier que le serveur satisfait bien les demandes dans un temps imparti dfini par un cahier des
chargesparexemple.
Lescontrleurslogiques(LogicalController)
Ils sont trs nombreux, ils permettent de conditionner lexcution de certaines requtes ou de modifier des
paramtresdfinisdanslegroupedethreads.Lescontrleurslogiquessedfinissentsurlesgroupesdethreads,ou
sur dautres contrleurs logiques, ils sappliquent tous leurs lments de configuration enfants. Les contrleurs
logiquessontaccessiblesdanslemenucontextuelAddLogicalController.
Troisdentreeuxsontparticulirementintressants :

- 6-

ENI Editions - All rigths reserved

RandomOrderController

LoopController

OnceOnlyController

Lecontrleur RandomOrderController permet dexcuterlesrequtesdansunordrealatoire,chaquenavigation


utilisateurtantdiffrente.
LecontrleurLoopControllerpermetdedfinirlenombredefoisolesrequtesdoiventtrerptes,etce,quel
quesoitlenombreditrationsdfiniauniveaudugroupedethreads.
Enfin,lecontrleurOnce Only Controller,permet,commesonnomlindique,dexcuterlesrequtesuneseulefois,
indpendammentdunombreditrationsdugroupedethreads.
Exemple :lecontrleurRandomOrderController
Legroupedethreadsestdfiniavec3threads(simulant3clients)dmarrsimmdiatement.Lcrandumoniteurmontre
lexcutiondespagesdansunordrediffrentpourchaquethread.Lenomdesrequtesatchangpourplusdeclart,
ellessenommentAccueil,IntroductionetInstallation,dunomdespagesauxquellesellesseconnectent.

Leslmentsdeconfiguration(ConfigElement)
DunpointdevuedestestsWeb,ilspermettentlamiseen uvredeslmentsduprotocoleHTTPquipeuventtre
ajouts la requte, comme les donnes dauthentification, les cookies, ou les enttes HTTP. Les lments de
configurationsontaccessiblesdanslemenucontextuelAddConfigElement.
LecomposantHTTPAuthorizationManagerpermetdemettreenplaceuneauthentificationdebaseHTTP.
LecomposantHTTPCookieManagerpermetdenvoyerdescookiesaveclarequteduclient.
LecomposantHTTPHeaderManagerpermetdajouterdesenttesHTTPdanslarequte.
Lescomposantsdetemps(Timer)
Lescomposantsdetempspermettentdefairedespausesentrelesrequtes,permettantainsideserapprocherdela
ralit.Deuxprincipauxtimersexistent,leConstantTimeretleGaussianRandomTimer.Lestimerssontaccessibles
danslemenucontextuelAddTimer.
Lepremierpermetdintroduireunepausedunedurefixeentretouteslesrequtes,alorsquelesecondpermetde
dfinirunevaleuralatoiredepause.Cettevaleurestcalculepartirdelavaleurconstante(ConstantDelayOffset)
etdeladviation(Deviation)donneenparamtres,etdunnombrealatoire.Lecalculsefaitcommececi :

ENI Editions - All rigths reserved

- 7-

Tempspause=(Nombrealatoire*dviation)+valeurconstante
Lesmoniteurs(Listener)
LesmoniteurssontaccessiblesdanslemenucontextuelAddListener.
LaplupartdesmoniteursdersultatsfournisparJMeterproposentdenregistrerlesrsultatsaffichsdansunfichier,
cecipermettantdelesreconsulterultrieurement.Cettefonctionnalitestextrmementapprciable,eneffet,aprs
unpremiertestquimontredesproblmesdeperformanceduserveur,ilestncessairedereconfigurercedernierpuis
de relancer le test. La sauvegarde du premier test dans un fichier permet de faire un comparatif des performances
avantetaprsreconfigurationduserveurpourenmesurerlesimpacts.
Pourcrirelesdonnesdunmoniteurdansunfichier,ilfaututiliserlechampdesaisieFilenamepourdonnerunnom
defichier.Lesfichiersderapportportentlextension.jtl.Pourouvriretlireunfichierderapport,ilsuffitsimplementde
slectionnerlefichieravecleboutonBrowseetlecontenusaffichesurlemoniteur.
LadocumentationdeJMetercontientbeaucoupdinformationssurleformatdecesfichiersetleurpersonnalisation.
Lescomposantsmoniteurslesplusutilisssont :
GraphResults
Ce moniteur fournit un graphique prsentant les diffrentes valeurs de temps dexcution des requtes. Les temps
affichssontletempsmoyen(Average),ladviation(Deviation)dutempsderponsedesdiffrentesrequtes,ainsi
queledbitduserveur(Throughput),exprimennombrederequtestraitesparminute.
Exemple
Surcetexemple,lescourbessontrelativementconstantes.Uneaugmentationbrutaledelacourbededviation(cellequi
est la plus basse) par exemple, serait caractristique dune augmentation du temps de rponse, et donc dun dbut de
saturationduserveur.

ViewResultsTree
Ce composant permet dafficher les donnes de rponse envoyes par le serveur. Lcran principal possde trois
onglets : Sampler result permet dafficher les enttes et code de rponse, longlet Request affiche lURL de la
requte,enfinlongletResponsedataaffichelaressourcedemande,engnral,lecodeHTMLdelapage.
Exemple :

- 8-

ENI Editions - All rigths reserved


ViewResultsinTable
Cemoniteuraffichelersultatdelexcutiondesrequtesdansuntableau.
Exemple :

AggregateReport
Le rapport agrg affiche des statistiques sur lexcution du test, notamment les temps de rponse moyens
(Average),minimumetmaximum,lenombrederequtesexcutes(#Sampler),lepourcentagederreurs,etledbit
duserveurenrequtesparseconde(Throughput)etenkilooctetsparseconde(KB/sec).
Cemoniteurpermetdevisualiserdirectementlesvaleursimportantes,etce,parrequte.
Exemple
Lesstatistiquessontaffichespourchacunedestroispagesvisitesparlesclients :Accueil,IntroductionetInstallation,un
totalestgalementcalcul.

ENI Editions - All rigths reserved

- 9-


07RI11.bmp
AssertionResults
Ce moniteur est particulier car il permet de vrifier que les conditions poses par les composants dassertions sont
bienvrifies.
Exemple
Un composant de vrification Duration Assertion a t ajout, les requtes doivent sexcuter en moins de 100
millisecondes,cequinestpaslecasdes2dernires.

c.Stratgiedeconceptiondestests :Unexemplecomplet
Laralisationdetestsdemonteenchargeaengnralpourobjectifdevrifierquuneapplicationsecomportebien
selondescritresdeperformancesdfinis,commeparexempledestempsderponseminimumimpossparuncahier
descharges,maisgalementdeconnatreleslimitesduserveurquilhbergeenlesollicitantjusquseslimitesde
fonctionnement.
Dans le premier cas les donnes qui vont permettre de concevoir le plan de test sont connues, il faut simplement
vrifierquelapplicationremplissecorrectementlesconditionsimposes.
Parexemple,siuneapplicationdoitsupporterunnombreprcisdutilisateurssimultansetquelledoitrpondreaux
requtesutilisateursenmoinsde500millisecondes,ilestfaciledecrerleplandetest.Danscecas,lesmoniteursde
typeAggregateReportetGraphResultsservlenttoutparticulirementadapts.
Miseenuvre
Dansceplandetest,40utilisateursseconnectentsimultanmentlapplication,dabordsurlapageAccueil,puissur
lapageListe.LemoniteurAggregateReportmontrequeletempsderponsemaximumpourlapageAccueilestde
361millisecondes,cequiestacceptable,parcontre,ilestde1191millisecondespourlapageListe.Deplus,letaux
derreurestde0%cequisignifiequeleserveuratcapabledesatisfairetouteslesrequtesentrantes,cenest

- 10 -

ENI Editions - All rigths reserved

donc pas un problme li la connexion HTTP, mais plutt li lexcution mme de cette page et aux ressources
quelleestsusceptibledutiliser(connexionsunebasededonnes).

Untauxderreur0%signifiequeleserveurestcapabledesatisfairetouteslesrequtesutilisateur,danscecasles
paramtresduconnecteurHTTPdeTomcat6sontsuffisantspourcetteapplication,parcontreilfaudraitlesmodifiersi
jamaisletauxderreurvenaitaugmenter.
Une fois que le fonctionnement correct de lapplication dans le serveur a t valid, il faut tester le serveur en
conditionsextrmes,cestdireaugmenterlenombredutilisateurssimultans,lobjectiftantdesolliciterleserveur
dans ses limites de fonctionnement de manire en connatre les limites. Lors de mesures rgulires des
performances du serveur, il est plus facile de constater que les valeurs mesures se rapprochent de ces valeurs
limites,etdoncdanticipersurlaconfigurationduserveur.
Ilfautgalementpenserraliserlestestsenincluantchaquelmentdelinfrastructurerelledeproduction,ainsi,
sileserveurTomcat6estutilisavecunserveurWebfrontal,ilfautdabordtesteretreconfigureraubesoinTomcat6,
puisajouterleserveurWebetprocderdelammemanire.

2.OptimisationetreconfigurationdeTomcat
En fonction des rsultats des tests de monte en charge mens sur le serveur, il peut tre ncessaire dadapter
certainsparamtresdefonctionnementdeTomcat6.Pourintervenirsurlaconfiguration,ilestindispensabledesavoir
interprter les rsultats des tests pour agir correctement et viter les effets nonsouhaits que constitueraient une
dgradationdesperformancesetdesdysfonctionnementsduserveur.
EnplusdavoirintervenirsurlaconfigurationduserveurTomcat6luimme,ilfautgalementconsidrerunlment
cl sur lequel il repose : la Machine Virtuelle Java. Cet environnement dexcution possde lui aussi des paramtres
doptimisation qui ont des impacts trs importants, aussi bien positifs que ngatifs, sur le fonctionnement et les
performancesdeTomcat.

a.LesparamtresdoptimisationdeTomcat6
Lesconnecteurs
Les connecteurs de Tomcat 6 sont les premiers composants du serveur qui sont utiliss par les clients des
applications,leurconfigurationpardfaut,bienqueconfortablepourbeaucoupdenvironnements,peutmontrerdes
signesdefaiblessepourlesinfrastructuresunpeuplusconsquentesolesclientssontnombreux.
UnconnecteurutiliseunthreadJavapoursatisfaireunerequteclient,cestjustementleparamtragedunombrede
cesthreadsdansleconnecteurquiagitdirectementsurlescapacitsduserveurtraiterlesrequtesdesclients.
UnconnecteurTomcat6exploitelemcanismedepooldethreadsfourniparllment<Executor>,pouroptimiserses
performances. Ce pool de thread garantit quune certaine quantit de threads sera toujours disponible, la valeur
maximumtantindiqueparlattributminSpareThreads.
Lenombremaximumderequtesclientqueleconnecteurpeutsatisfaireestdfiniparlenombremaximumdethreads
autoris sur lExecutor : lattribut maxThreads, les autres clients sont mis en file dattente dimensionne par
acceptCountetleurtempsdeprsencemaximumdanscettefileestdfiniparmaxWaitTimeout.Ledpassementdece
tempsdattenteouencoreunefiledattentesaturesontsanctionnsparunrefusduserveurdetraiterlarequte.
Les valeurs par dfaut pour ces attributs sont donnes dans le chapitre Administration du serveur, dans la partie
concernantllment<Connector>.
Si le nombre maximum de clients que le serveur peut accepter est trop bas, le message suivant apparat dans le
journalprincipalduserveur(etdanslafentreMSDOSsousWindows) :

ENI Editions - All rigths reserved

- 11 -

GRAVE: Tous les threads (200) sont actuellement occups, attente.


Augmentez maxThreads (200) ou vrifiez le servlet status
CestcequisepasseparexempleaveclaconfigurationdeplandetestJMetersuivante :
Ungroupedethreadsconfigurpourdmarrer400threadsimmdiatement(RampUp Period=0).Laconfiguration
pardfautduconnecteurHTTP/1.1deTomcat6aunevaleurdemaxThreadsde200etunevaleurdeacceptCountde
100,leconnecteurnepeutdoncaccepterque300threadssimultanment.
Le pourcentage derreurs affich par les moniteurs de JMeter est significatif, et les fichiers de rapport JMeter
contiennentlerreursuivante :
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
...
Pour ce cas prcis, la configuration par dfaut du connecteur est trop faible, il faut ladapter jusqu ce quaucune
erreurnesubsiste.
UnevaleurcorrectepourmaxThreadsestlenombremoyendeclientsamensseconnecterlapplication.
LattributacceptCountnedevraitjamaistresuprieurlavaleurpardfaut,etcepourviterdesaturerleserveur,
les connexions qui se trouvent dans cette file dattente peuvent y rester un moment (maxWaitTimeout vaut 60
secondespardfaut)etaugmenterlaconsommationderessource.
La valeur donner minSpareThreads dpend de la rapidit du changement de contexte, cestdire la vitesse
laquellelenombredeclientsaugmenteoudiminue.
Silenombredeclientssimultansestamenchangertrsrapidement,ilfaudradesvaleursrelativementleves
pour cet attribut, de sorte ce que le connecteur soit capable de rapidement associer un thread une requte, le
connecteurnedoitavoirbesoindecrerquunnombretrsrduitdethreadssupplmentaires.
Exempledeconfigurationpourunchangementdecontexterapide :
<Executor maxThreads="200" minSpareThreads="75" name="mainTomcat"/>

<Connector acceptCount="100" executor="mainTomcat"/>


Par contre, si le nombre de clients varie lentement, il nest pas ncessaire de conserver beaucoup de threads en
attentecarilsconsommentdesressources,danscecaslacrationdethreadssupplmentairesparleserveurnest
pasprjudiciableauxperformances.
Exempledeconfigurationpourunchangementdecontextelent :
<Executor maxThreads="200" minSpareThreads="25" name="mainTomcat"/>

<Connector acceptCount="100" executor="mainTomcat"/>


Lapplication manager de Tomcat 6 permet de visualiser la configuration des connecteurs ainsi que leur occupation
actuellegrcelapageEtatduServeur,ilfautpourcelautiliserlURLhttp://<hote>:<port>/manager/status.
LasectionrelativeauconnecteurHTTPdelapageEtatduServeur :

Enfin,danslecasoTomcat6estutilisavecunserveurWebfrontal,cesvaleurssontbienvidemmentdfinirsur
leconnecteurJKetnonpassurleconnecteurHTTP !Deplus,ilfautgalementquelenombremaximaldethreadsde
ceserveurWebsoitgalceluiduconnecteurJK.
LespoolsdeconnexionJDBC

- 12 -

ENI Editions - All rigths reserved

Desperformancesettempsderponsedsastreuxpeuventaussitrelisdestempsdaccstroplongsunebase
de donnes. Dans le cas o lapplication utilise un pool de connexions JDBC, il faut que le nombre de connexions
prsentesdanscepoolsoitsuffisantpourviterlestempsdattentelisuneindisponibilitdeconnexions.
LespoolsdeconnexionJDBCutilisentlattribut de configurationmaxActivepourdterminerlenombredeconnexions
maximumautoris,ilestclairquesidemauvaistempsderponsesontlisuneinsuffisancedeconnexionsdansle
pool,cestceparamtrequilfaudraaugmenter.
Dans le cas o le pool est dans lincapacit de fournir une connexion, la demande de lutilisateur va tre mise en
attentependantuntempsdfiniparlattributmaxWait,quivaut0pardfaut,cequisignifiequelademandeduclient
vaattendreindfinimentjusqucequuneconnexionsoitdisponible.
Cest aussi un bon moyen de dtecter les applications qui ne librent pas correctement les connexions aprs
utilisation.
Comme pour un pool de threads sur un connecteur, il y a ici aussi deux valeurs permettant de dfinir le nombre
minimumetmaximumdeconnexionsenattentedanslepool,grce,respectivement,auxattributsminIdleetmaxIdle.
Les valeurs donner ces attributs sont lies la frquence dutilisation des connexions par lapplication, plus les
connexionslabasededonnessontfrquentes,etplusilfaudrafaireensortequelepoolenconserveunnombre
suffisantendonnantdesvaleurslevescesattributs.Lenombreinitialdeconnexionsprsentesdanslepoolau
dmarrageduserveurdoitgalementtreadaptenconsquence,grcelattributinitialSize.
Quelsquesoientlesbesoinslisauxapplications,ilconvientderespecterlarglesuivante :
initialSize < minIdle < maxIdle < maxActive
Enfin, un autre paramtre est souvent omis dans cette configuration : le nombre de connexions que la base de
donnes ellemme accepte en simultan. Ce paramtre doit tre au minimum dimensionn comme lattribut
maxActive.
En cas dincapacit pour le pool de connexions de satisfaire une demande, le message suivant est affich dans les
journauxduserveur :
org.apache.commons.dbcp.SQLNestedException: Cannot get a connection,
pool exhausted

Caused by: java.util.NoSuchElementException: Timeout waiting for


idle object
Conclusion
Avec une analyse fine des moniteurs de JMeter et des fichiers journaux du serveur, il est possible daffiner les
paramtres du serveur pour quils conviennent aux applications hberges. Augmenter le nombre de threads, le
nombre de connexions, sont finalement des oprations qui sont assez courantes lorsque le nombre de clients ou
dapplicationsdansleserveuraugmente.
Une consquence directe de laugmentation de ces ressources est laugmentation de la mmoire ncessaire au
serveurpourfonctionner.Danslecasocettequantitdemmoireestinsuffisante,lestempsderponserisquent
dtredsastreuxcarTomcat6commenceutiliserlammoirevirtuelle,etpire,ilpeutsarrter.Lammoireutilise
parTomcatestdirectementcelledelaMachineVirtuelleJava.

b.LaMachineVirtuelleJava
La Machine Virtuelle Java est responsable de la rservation de lespace mmoire ncessaire lapplication pour
fonctionner.
son dmarrage, elle rserve de la mmoire auprs du systme dexploitation, cette valeur dpend du systme
dexploitationetdelarchitecturematrielle.AufuretmesurequelapplicationvoluedanscetteMachineVirtuelle,
lesbesoinsdemmoirepeuventaugmenter,laMachineVirtuellevadoncrallouerdelammoireauprsdusystme
dexploitationdansunelimitede64mgaoctetspardfaut.
Si lapplication ncessite plus de mmoire que cette valeur limite, alors la Machine Virtuelle sarrte en dclenchant
lerreurjava.lang.OutOfMemoryError,etavecelle,lapplication.DanslecasdeTomcat,lapplication,cestTomcatlui
mme !
IlestdoncextrmementimportantdemesureretdesurveillerlaconsommationmmoireduserveurdanslaMachine
Virtuelle pour anticiper dventuels problmes. Il est tout fait possible de modifier la quantit de mmoire
initialementrserve,ainsiquelaquantitmaximale.
La configuration de la Machine Virtuelle Java peut tre visualise sur la page dEtat du Serveur ladresse
http://<hote>:<port>/manager/status.
LasectionrelativelaMachineVirtuelleJavadelapageEtatduServeur :

ENI Editions - All rigths reserved

- 13 -

Les informations disponibles sont la quantit de mmoire disponible dans la Machine Virtuelle (Free Memory), la mmoire
totalutilisable(TotalMemory),etlammoiremaximaleallouableauprsdusystme(MaxMemory).

Pourmodifierlavaleurinitialeetmaximale,ilfautpasserlesoptionsXmsetXmxlacommandededmarragedela
MachineVirtuelle,enindiquantlesvaleurssouhaites, parexemple pourunevaleurinitialede128Moetunevaleur
maximalede256Moilfaututiliserlacommande :
java -Xms128m -Xmx256m
Dans le cas de Tomcat 6, il est ncessaire de modifier le script catalina.bat (Windows) ou catalina.sh (Linux) du
rpertoireCATALINA_HOME/bin.
Exemplepourcatalina.bat :
ajouteraudbutdufichier,aprsleslignesdecommentaires.
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx256m
Exemplepourcatalina.sh :
ajouteraudbutdufichier,aprsleslignesdecommentaires.
JAVA_OPTS=$JAVA_OPTS -Xms128m -Xmx256m
Ilnyapasdevaleursidales,toutdpenddesapplications,desressourcesquellesutilisentetdelaconfiguration
globaledeTomcat6.Cependant,ilnefautpassecontenterdaugmenterlaquantitmaximale,ilfautaussiaugmenter
la valeur initiale, en effet, rien ne sert de partir avec une valeur trs faible si cest pour finir avec une valeur trs
leve,lesrallocationsncessaireseffectuesparlaMachineVirtuellesontcoteusesentempsCPUetperturbeles
applications. Une bonne moyenne est dutiliser, comme valeur initiale, la moiti de la valeur maximum, certains
administrateursprconisentmmedeleursdonnerlammevaleur,limpactestuntempsdedmarragepluslongdu
serveur,etuneconsommationmmoireconsquentemmeencasdinactivit.

- 14 -

ENI Editions - All rigths reserved

UtiliserlinterfaceJMXdeTomcat
Les tests de monte en charge raliss avec JMeter dans la partie prcdente de ce chapitre offrent des possibilits
intressantespourvisualiserlecomportementduserveurdanslesdiffrentscasdetest.Cependant,ilnestpaspossible
de visualiser le comportement interne du serveur, le nombre de connexions JDBC disponibles un instant prcis, ou
encorelenombredethreadsoccupsdansunconnecteur,cestlqueJMXintervient.

1.QuestcequeJMX ?
Java Management Extensions (JMX) est une API Java conue pour la supervision des applications Java, elle permet
dimplmenterunservicedesupervisiondanslapplication,maisgalementdedvelopperlesoutilsquipermettentde
collecterlesdonnesauprsdeceservicedesupervision.JMXestintgredanslaplateformeJ2SEdepuislaversion
1.5.
JMX est aujourdhui le standard pour le dveloppement des outils de supervision et dadministration dans les
technologiesJava:enfournissantcetteinterfacestandard,detrsgrandespossibilitssontdonnespourcrireces
outils.
Dans une Machine Virtuelle Java, il est possible dassocier aux diffrents objets Java des composants permettant
dobtenir des informations et dexcuter des traitements sur ces objets, ces composants sont appels MBeans. Les
MBeansdelaMachineVirtuelleJavasonttousrpertorisetrendusaccessiblesviaunlmentcentral :leserveurde
MBeans (MBean Server) . Enfin des connecteurs utilisant des interfaces et des protocoles varis peuvent tre utiliss
pour connecter des outils de supervision sur le MBean server, et ainsi avoir accs lensemble des MBeans de la
MachineVirtuelleJava.
LesMBeansreprsententfinalementunevueparticulireduneapplicationsurlaquelleilestpossible,grceunclient
JMX, de voir et parfois modifier des attributs, appels des mthodes, ou bien de recevoir des notifications
dvnements.
LesclientsJMXpeuventtrelocauxlapplication,silsrsidentdanslammeMachineVirtuelleJava,oubiendistants,
dans ce dernier cas, ils utilisent un connecteur pour accder, via le MBean Server, aux diffrents MBeans. Il existe
aujourdhuienstandarddesconnecteursquiutilisentlesprotocoles :

HTTP

SNMP(SimpleNetworkManagementProtocol)

SOAP(SimpleObjectAccessProtocol)

RMI(RemoteMethodeInvocation)

ArchitecturedeJMX :

ENI Editions - All rigths reserved

- 1-

2.JMXetTomcat
LesupportdeJMXestintgrTomcatdepuislaversion4.1,enutilisantleJDK1.5.LAPIJMXestnativementprsente,
pourlesversionsantrieuresduJDKiltaitncessairedajouterunebibliothqueJMX,commeMX4Jparexemple.
La plupart des lments de configuration de Tomcat 6, notamment ceux dclars dans le fichier server.xml, sont
associs des MBeans, de plus Tomcat 6 cre galement des MBeans dynamiquement pendant son excution, cest
notammentlecaspourlesapplicationslorsquecellescisontdployesencoursdefonctionnementduserveur.Tomcat
6disposededeuxconnecteurspouraccderauMBeanserver,unconnecteurHTTPetunconnecteurRMI.
LesMBeansdynamiquesdeTomcat6sontcrsgrceauxlmentsdeconfiguration<Listener>dufichierserver.xml,
cesontdeslmentsenfantde<Server>.LesMBeansstatiquessontcrspartirdelaconfigurationXML.
Dclarationdes<Listener>dansTomcat6 :
<Server port="8005" shutdown="SHUTDOWN">
<!-- Comment these entries out to disable JMX MBeans support used
for the administration web application-->
<Listener
className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener
className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener
className="org.apache.catalina.core.JasperListener"/>
Lapplicationmanager de Tomcat 6 prsente au chapitre Dploiement et gestion des applications, propose un client
JMXsousformedunproxyutilisantunconnecteurJMXHTTPpouraccderauMBeanserver.LeproxyJMXdumanager
permet dobtenir les attributs des MBeans prsents dans le serveur et dafficher leurs valeurs dans la fentre du
navigateurWeb,maisilpermetgalementdemodifierlesvaleursdesattributsquisontaccessiblesencriture.
Le proxy JMX est disponible lURL http://<hote>:<port>/manager/jmxproxy/. Cet outil permet de rcuprer un
ensembledeMBeansenfonctiondunerequtedinterrogationpassedanslabarredadressedunavigateurWeb,par
exemple, la requte suivante : http://<hote>:<port>/manager/jmxproxy/?qry=*:* permet dafficher tous les
MBeansprsentsdansleserveuraumomentocettecommandeestexcute,lavaleurdonneauparamtreqryest
lenomduMBean.
LesnomsdeMBeansontlasyntaxesuivante :

- 2-

ENI Editions - All rigths reserved

[Domaine JMX]:[proprit=valeur][,proprit=valeur][,*]
LedomaineJMXfaitrfrencelaporteduMBean,lespropritssontdescaractristiquesdeceMBean,commepar
exemple son type, ainsi dans lexemple prcdent, le fait dcrire ?qry=*:* permet de rcuprer tous les MBeans de
touslesdomaines,lecaractre*tantuncaractregnriquederemplacement.
Enanalysantlesrsultatsaffichsparcettecommande,ilesttrsfacileavecunpeudexprience,dcriredesrequtes
dinterrogationplusfines,parexemple :
http://<hote>:<port>/manager/jmxproxy/?qry=Catalina:type=Connector,*
Cette requte permet dafficher tous les MBeans de type connecteur, le rsultat affich dans le navigateur montre
touteslescaractristiquesdesdeuxconnecteurspardfautdeTomcat6,leconnecteurJKetleconnecteurHTTP.

Le premier attribut affich pour chacun de ces MBean est Name, qui correspond son nom, dans la syntaxe de
nommageJMX,partirdumomentolenomduMBeannestpasentirementdonn,ilfautterminerlenomavecune
virgulesuiviedunetoile,commedanslexempleprcdent.
Les informations affiches dans le navigateur ne montrent pas les caractristiques du pool de threads de ces
connecteurs, tout simplement parce quelles sont renvoyes par un autre MBean dont le type est ThreadPool. Pour
obtenircesdonnes,ilfautcrire :
http://<hote>:<port>/manager/jmxproxy/?
qry=Catalina:type=ThreadPool,*
Enplusdepouvoirobserverlesvaleursdfinieslaidedesattributsdeconfigurationsurlobjet<Connector>,tellesque
maxThreads ou acceptCount, dautres attributs aux noms relativement explicites sont renvoys, cest le cas de
currentThreadCount etcurrentThreadsBusy. LattributcurrentThreadCount est le nombre de threads prsents dans le
pool,etcurrentThreadsBusy,lenombredethreadsoccups.
LeproxyJMXfournitdoncuneinterfacepermettantdavoirdesinformationssurlesressourcesinternesdeTomcat6,il
peut tre utilis pour obtenir ces donnes pendant lexcution dun test avec JMeter, ou bien lorsquun
dysfonctionnementouuncomportementimprvuduserveurseproduit.
Cetteapplication,enplusdepermettrelavisualisationdesattributsdeMBean,permetgalementdemodifiercertaines
valeursdattributs,siceuxcisontaccessiblesencriture,lasyntaxeestlasuivante :
http://<hote>:<port>/manager/jmxproxy/?set=<nom du MBean>&att=<nom
attribut>&val=<valeur attribut>
Par exemple, pour dfinir la valeur de maxThreads 300 pour le connecteur HTTP, il faut crire la commande set
suivante :

ENI Editions - All rigths reserved

- 3-

?set=Catalina:type=Connector,name=http-8080&att=maxThreads&val=300
Cettecommandeesttrspratiquepuisquellepermetdechangerdesparamtresdexcutionduserveursansavoirle
redmarrer, lors de lexcution de tests de monte en charge o les besoins de reconfiguration en ttonnant sont
nombreux,lacommandesetduproxyJMXpeutfairegagneruntempsprcieux.
noter que la commande set ne modifie pas la configuration crite dans le fichier server.xml, aussi, au prochain
dmarragedeTomcat6,cesontlesvaleursdecefichierquisontutilises.

3.MC4J :UneconsoleJMX
LeproxyJMXdeTomcat6offreunepremireinterfacedesupervisiondeslmentsinternesduserveur,cependantson
ergonomie est un peu particulire, et linterface graphique assez sommaire, de plus, il est difficile de suivre les
statistiquesentempsrel:cestlinconvnientdesinterfacesWeb.
Pour pouvoir obtenir des statistiques en temps rel, il faut une application client lourd JMX, de tels logiciels existent
dans le domaine commercial, comme les produits de la gamme Tivoli de lditeur IBM, ou encore UniCenter de chez
ComputerAssociates.Dansledomainedulogiciellibre,MC4J(ManagementConsoleforJava)estprobablementleplus
abouti des logiciels de supervision JMX. La version actuelle est la 1.2b9, elle est tlchargeable ladresse
http://mc4j.org.
MC4J est dfinitivement orient vers la supervision des serveurs dapplications JEE, mais peut galement tre utilis
avecdesapplicationsclient/serveurcompatiblesJMX.LesserveurscompatiblesavecMC4Jsont :

ApacheGeronimo1

JBoss34

OracleContainer4J2EE

SunJavaApplicationServer

ApacheTomcat4.15

BEAWeblogic6.19

IBMWebSphere56

MC4JestdisponiblepourlamajoritdessystmesdexploitationavecdespackagesdinstallationpourWindows,Linux
etMacOSX,ainsiquunearchiveZIPpureJava.Pourlesautressystmes,ilfautunJDKouunJREpourpouvoirinstaller
etexcuterMC4J.
Avant de pouvoir connecter Tomcat 6 MC4J, il faut configurer la Machine Virtuelle Java du serveur pour autoriser
laccsdistantsonconnecteurRMI.PourcelailestncessairedajouterdesoptionslaMachineVirtuellevialescript
de dmarrage de Tomcat 6. Le connecteur RMI de la Machine Virtuelle est scuris, il faut donc galement configurer
lauthentificationpourseconnecteur.
ConfigurerlaMachineVirtuelledeTomcat6
La premire tape de configuration consiste mettre en uvre la scurit daccs au connecteur RMI, sil nest pas
ncessairedactiverlascurit,alorscetteprocdurepeuttreignore.
Laconfigurationdelascuritdmarreparlacrationdesfichiersjmxremote.accessetjmxremote.passworddansle
rpertoire CATALINA_HOME/conf. Le fichier jmxremote.access va permettre dindiquer les noms dutilisateurs
autorissutiliserleconnecteur,ainsiqueleurspermissionssurceconnecteur,lefichierjmxremote.passwordcontient
lesmotsdepasseassocis.
Lefichierjmxremote.access :
Crationducompteadministrateuravecdespermissionsenlectureetcriture,etducompteoperateuravecdespermissions
enlectureseule.
administrateur
operateur

readwrite
readonly

Lefichierjmxremote.password :

- 4-

ENI Editions - All rigths reserved

Dfinitiondesmotsdepassepourlescomptescrsprcdemment.
administrateur
operateur

MotDePasse
AutreMotDePasse

Ilfautensuitescuriserlaccsaufichierjmxremote.password,eneffet,sicefichierestaccessibleparlesutilisateurs
du systme autres que ceux qui dmarrent Tomcat 6, la Machine Virtuelle Java refuse de dmarrer et affiche le
message :
Error: Password file read access must be restricted
Pour scuriser ce fichier sous Linux, il suffit simplement de faire en sorte que son propritaire soit lutilisateur qui
dmarreleserveur,puisderestreindrelesdroitsdaccsaveclacommande :
chmod 600 jmxremote.password
DanslecasdeWindows,laprocdureestunpeupluscomplique :

FaireunclicdroitsurlefichieretchoisirProprits.

SlectionnerlongletScuritetcliquersurleboutonParamtresAvancs.

Danslafentredespropritsavancesquiapparat,slectionnerlongletPropritaire.

VrifierquelutilisateurpropritairedufichierestceluiquivadmarrerlaMachineVirtuelleJava,puisvalideravecle
boutonAppliquer.

SlectionnerensuitelongletAutorisationsetdcocherlacasePermettreauxautorisations.Unebotededialogue
apparat,rpondreCopierlaquestionpose.

Supprimer tous les utilisateurs autres que le propritaire du fichier dans la liste des autorisations, et ajouter le
propritairedufichierlalistesilnyapparatpas,puisvalideravecleboutonOK.

ValiderlafentredespropritsdufichieravecOK.

Lefichierestscuris.
ConfigurerTomcat6
PourdmarrerlaMachineVirtuelledeTomcat6avecunconnecteurRMIactiv,ilfautpasserdesoptionsdedmarrage
cetteMachineVirtuelleparlajoutdunelignedeconfigurationdanslescriptcatalina.batoucatalina.shselonlaplate
forme,enajoutantlavariableJAVA_OPTSaudbutduscriptaprslalignequicommencepar :doStart.
Surcetteligne,ilestobligatoiredeprciserleportutiliserparleconnecteurRMI:ilfautchoisirunportnonutilis,les
exemplesdeladocumentationenlignedeMC4Jutilisentleport9004.Ensuite,silascuritestutiliseilfautprciser
lemplacement des fichiers jmxremote.access et jmxremote.password, enfin, dsactiver loption de cryptage SSL du
connecteurcarMC4JnesupportepaslesconnectionsSSL.
Syntaxepourcatalina.bat avecscuritactive:
ToutdoittrecritsuruneseuleligneavecunespaceseulementpoursparerlesdiffrentesoptionsintroduitesparD.
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=9004
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
-Dcom.sun.management.jmxremote.ssl=false
Syntaxepourcatalina.bat avecscuritdsactive:
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=9004
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Syntaxepourcatalina.sh :
IlnyaquelamaniredcrirelavariableJAVA_OPTSquichange,lesoptionsdedmarragesontlesmmes.

ENI Editions - All rigths reserved

- 5-

JAVA_OPTS=$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9004
Leserveurpeutensuitetredmarr.
ConfigurationdeMC4J
Aprs le dmarrage de MC4J, il faut configurer une connexion au serveur Tomcat 6, en choisissant Create Server
ConnectiondanslemenuManagementdelinterface,lassistantdecrationdesconnexionsapparat.
Lapremirechosedfinirestletypedeserveurselequelilfautseconnecter,cechoixpermetderemplirlesautres
champs de saisie avec des valeurs spcifiques ce serveur. Dans la liste droulante, seule une rfrence Tomcat
5.5+apparat,effectivement,aumomentoceslignessontcrites,Tomcat6nestpassupportnativementparMC4J,
ilvadoncfalloirrecourirunepetiteastuceetchoisirJ2SE5.0 qui propose une connexion standard JMX compatible
avecTomcat6.
Ilfautensuitedonnerunnomlaconnexionetventuellementmodifierlenumrodeportquiapparatsurlalignede
paramtre du champ Server URL, enfin, ne pas oublier de prciser les donnes dauthentification si la scurit est
active.
Pourlaconfigurationindiqueprcdemment,lepremiercrandelassistantdoitressemblerceluici :

Ensuite, la troisime tape de cet assistant affiche les bibliothques Java de MC4J qui vont tre utilises pour la
supervision, ici il est ncessaire de faire galement rfrence aux bibliothques de Tomcat 6 dans la section Custom
classpath and server libraries en y ajoutant tous les fichiers .jar contenus dans CATALINA_HOME/lib. Ce second
crandoittresimilaireceluici :

- 6-

ENI Editions - All rigths reserved


LassistantpeutensuitetreterminavecleboutonFinish.
Unefoislaconnexioncre,lcranprincipaldelaconsoleMC4Japparat,etavecelle,lalistedesMBeansduserveur.
Lexplorationpeutcommencer.
Danslcranquisuit,larborescencemetenvidenceleMBeanassociaupooldethreadsduconnecteurHTTP,etsur
celuici, lattribut currentThreadBusy est slectionn, il reprsente le nombre de threads occups satisfaire les
requtesclient.Pourobtenirlavaleurcourante,ilfautfaireunclicdroitsurcetattributetchoisirProperties,mieux,il
estpossibledafficherunecourbequimontrelvolutiondecettevaleurdansletempsenchoisissantGraph.
VisualisationdelattributcurrentThreadBusyavecMC4J :

Il est galement possible dafficher plusieurs courbes sur le mme graphique, pour cela il suffit de faire une slection
multipledesattributssouhaitsenmaintenantlatouche[Ctrl]enfonce,puisdefaireunclicdroitetchoisirGraph.
ParmilesautresMBeansvisualisables,ceuxquisontassocisauxpoolsdeconnexionJDBCsontprobablementlesplus
ENI Editions - All rigths reserved

- 7-

intressants. Un MBean de pool de connexions JDBC possde notamment les attributs numActive et numIdle
permettant respectivement de connatre le nombre de connexions actives du pool, et le nombre de connexions
inactives.
Exemple:
AffichagedesattributsnumActiveetnumIdlesurlemmegraph.Danscetexemple,lepooldeconnexionsestconfigur
pourutiliser10connexionsmaximum(maxActive=10),etpourmaintenir5connexionsinactiveaumaximum(maxIdle=5).
LepremierpiccorrespondlacourbenumActive,touteslesconnexionssontutilises,ensuitelacourberedescend0etla
deuxime,quicorrespondnumIdle,montejusqu5,elleyresterajusqularrtduserveur.
AvecunoutilcommeMC4J,ildevienttrsfaciledesuivrelvolutionentempsreldesressourcesinternesduserveur
pendantuntestdemonteenchargeparexemple,maisgalementencoursdefonctionnementpourunserveurde
production.UnteloutilfaitpartiedeslogicielsindispensablesquunadministrateurTomcatdoitpossder.

- 8-

ENI Editions - All rigths reserved

IntroductionauclusteringavecTomcat6
Garantir la disponibilit et les performances des applications multitiers fait partie des challenges relever pour les
administrateurs de serveurs dapplications. Ces architectures distribues possdent lavantage dtre centralises et
doncdtre maintenables en un point unique, de plus, la puissance de calcul des machines de type serveur peut tre
exploite.
Cependant,faceunnombredutilisateursgrandissantetuneutilisationplusimportantedesapplications,ilestsouvent
ncessairedemettreenplacedessolutionsdehautedisponibilitdanslesarchitecturesmultitiers,garantissantainsi
performancesetaccessibilitsdecesapplications.
UndesrlesdesserveursdapplicationsJEEestdefourniruntelservice,etTomcat6nchappepaslargle.Lobjectif
de ce chapitre est de prsenter les solutions de rpartition de charge et de tolrance de panne quil est possible de
mettreen uvreavecTomcat6.

ENI Editions - All rigths reserved

- 1-

UnesolutiondehautedisponibilitavecTomcat6
Lasolutionuniverselledehautedisponibilitconsisteutiliserlaredondance,demultipleprocessusisolsetrpartis
permettentdliminerlespointsfaiblesdelinfrastructuremiseenplace.Ilfautdistinguerdeuxtypesderpartition,la
rpartitionverticaleetlarpartitionhorizontale.
La rpartition verticale consiste utiliser plusieurs instances de serveurs Tomcat 6 sur une mme machine physique,
permettant ainsi disoler des applications critiques dans leur propre Machine Virtuelle Java. Par instance, il faut
comprendreprocessus,chaqueserveurTomcat6fonctionnantdanssapropreMachineVirtuelle:cestelleleprocessus.
Cettesolutionpermetdviterquuneapplicationconnaissantunedfaillance,perturbeetrendeindisponiblelesautres,
cependant,ellenepermetpasdeseprmunirdunepannematrielle.
Larpartitionhorizontalequantelle,utiliseplusieursinstancesdeserveursTomcat6quisontcettefoiscirpartiessur
plusieursmachinesphysiques.Cettesolutionapportelatolrancedepannencessairepourgarantirladisponibilitdes
applications, les performances sont galement au rendezvous puisque la charge globale est rpartie entre les
diffrentes instances de serveur. Cependant, les serveurs tant situs sur des machines physiques diffrentes,
lutilisationdurseaupeutavoiruneincidencenfastesurlesperformances,selonlaqualitdecerseau.

1.Uneinfrastructuredisponibleetperformante
Pourgarantirlafoisperformanceetdisponibilit,ilfautidalementmlangerlesdeuxapproches.Quellequesoitla
solutionretenue,ilfautrpartirlesrequtesutilisateursurlesmultiplesinstancesdeserveurTomcat6,cestaussiune
desraisonspourlaquelleTomcat6estsouventmisen uvreavecunserveurWebenfrontal,commecelaestexpliqu
auchapitreLeserveurApacheTomcat6:installationetconfigurationdecetouvrage.
LutilisationconjointedeTomcat6avecunserveurWebtelqueApacheHTTPServerouMicrosoftIISfaitintervenirun
module additionnel charg de rediriger les requtes entrantes vers le serveur dapplications, si cette requte fait
rfrence une ressource dynamique Java. Il est assez facile denvisager que ce module complmentaire puisse
rpartir les requtes vers plusieurs serveurs Tomcat 6, et ce, galement, afin de rpartir la charge. Confier la
rpartition de charge un module tel quemod_jkpourApacheouleredirecteurISAPIJKpourIISestlasolutionla
pluscourammentutilise,puisquelleestdisponibledepuislapparitiondemod_jkavecTomcat4.
Dautressolutionspeuventtreenvisages,dessolutionsmatriellesparexemple.Ilexistedesbotiersderpartition
derequtescapablesdefonctionnersurplusieursprotocoles,lutilisationdelundecesbotiersenfrontaldesserveurs
Tomcat 6 permettrait de remplacer le serveur Web. De telles solutions sont notamment disponibles chez Cisco
Systems,ouencoreNortelNetworksquipossdeunproduitpharedanscedomaine,lAlteon.

ENI Editions - All rigths reserved

- 1-

ConfigurationdunclusterTomcat6
LorsdelamiseenplacedunclusteravecTomcat6,ilestindispensabledegarantirlintgritdesapplicationsentreles
instances. En effet, il ny a pas lheure actuelle doutil dadministration permettant de dployer les applications Web
dansunclusterTomcat6,lesapplicationsdoiventtreinstallesindividuellementsurchacunedesinstancesdeserveur.
Unteloutilpossdevidementunetrsgrandevaleurajoutecarilpermetladistributionautomatiquedesapplications
verstouteslesinstances,ycomprissiellessetrouventsurdesmachinesdiffrentes.
Conscientedecemanque,lquipededveloppeursdeTomcatsestpenchsurlaquestionetunoutildecetypedevrait
apparatredanslesprochainesversionsdeTomcat.

1.InstallerplusieursinstancesdeTomcat6surlammemachine
Pour permettre plusieurs instances de Tomcat 6 de sexcuter sur la mme machine, linstallation des instances du
serveurestunpeuparticulire.Eneffet,unepremirecontrainteimposechacunedesinstancesdutiliserdesports
TCP/IPdistinctspourviterlesconflits,maisilnestpaspossibledesimplementdcompresserlarchiveZIPduserveur
deux endroits diffrents pour avoir deux instances, car il ne peut y avoir quune seule variable denvironnement
CATALINA_HOME.
LasolutionconsisteutiliserlavariabledenvironnementCATALINA_BASE.Cettevariablepermetdefairerfrenceau
rpertoire contenant la configuration spcifique dune instance. Lorsquune seule instance de Tomcat 6 fonctionne, la
valeurdecettevariableestcopiedeCATALINA_HOME.
Danslecaso,parexemple,deuxinstancesdeserveurdoiventfonctionnersurlammemachine,lesdeuxinstances
partagerontlammevariableCATALINA_HOME,maisaurontchacuneunevariableCATALINA_BASE.Ilyadoncune
partiecommunecesinstances,etunepartiequileurestpropre.
Chaqueinstancedeserveurdoitpossder :

sapropreconfiguration(lerpertoireconf/),

sonproprerpertoirelogs/,

sespropresrpertoirestemporaires(work/ettemp/).

Les autres rpertoires, cestdire bin/ et lib/, peuvent tre commun, ainsi, les librairies du serveur ne sont pas
dupliques.
VoiciunexempledarborescencedeclusterTomcat6 :

Ilfautensuitecrerdesscriptsdedmarrageetdarrtspcifiquespourchacunedesdeuxinstances,lobjectifestde
positionner la variable CATALINA_BASE puis dinvoquer le scriptstartup.bat oushutdown.bat, chacun de ces scripts
devantsetrouverdansCATALINA_HOME/bin.
Lescriptdedmarragedelapremireinstancepeutparexempletrenomm startTomcat1.bat,ilcontientleslignes

ENI Editions - All rigths reserved

- 1-

suivantes :
set CATALINA_BASE=C:\Cluster\tomcat1
call startup
LescriptdarrtstopTomcat1.bat :
set CATALINA_BASE=C:\Cluster\tomcat1
call shutdown
Lesscriptsdeladeuximeinstancesontidentiques,lavaleurprsdeCATALINA_BASE.
LaversionLinuxdecesscriptsnestpaspluscomplique,parexemple,lescriptdedmarragedelapremireinstance
peutsappelerstartTomcat1.shetilcontientleslignessuivantes :
# ! /bin/bash
export CATALINA_BASE=/usr/cluster/tomcat1
. $CATALINA_HOME/bin/startup.sh
LescriptdarrtquantluipeutsappelerstopTomcat1.sh :
# ! /bin/bash
export CATALINA_BASE=/usr/cluster/tomcat1
. $CATALINA_HOME/bin/shutdown.sh
CesdeuxexemplessupposentqueCATALINA_HOMEpointevers/usr/cluster/.
La dernire tape consiste faire en sorte que chacune des instances utilise des ports distincts pour le connecteur
HTTP,leconnecteurJK,etleportdarrtduserveur.
Voiciunexempledevaleurspertinentesquipeuventtreutilises :
Nomdelinstance

ConnecteurHTTP

ConnecteurJK

Portdarrt

tomcat1

8180

8109

8105

tomcat2

8280

8209

8205

Les deux instances peuvent maintenant tre dmarres, en cas de problme, les fichiers journaux de chacune des
instancessontsuffisammentexplicitessurleserreursdeconfiguration.

2.RpartitiondechargeaveclesmodulesJK
Le chapitre Le serveur Apache Tomcat 6 Installation et configuration aborde la configuration de Tomcat 6 avec un
serveurfrontalApacheHTTPServerouMicrosoftIIS,lesmodulesJKrespectifspourcesserveurs,mod_jkpourApache,
etleredirecteurISAPIpourIIS,permettentlamiseen uvredunesolutionderpartitiondechargeetdetolrancede
panne.
Dun point de vue de la rpartition de charge, les modules JK utilisent un algorithme de rpartition de type Round
Robin,cestdirequelesrequtessontenvoyesalternativementsurchacunedesinstances,etce,toujoursdansle
mmeordre.
Cetalgorithmeestundesplusutilisdansledomainedelarpartitiondechargecarilpermetdquilibrerlachargesur
chacunedesinstances,ilestcependantpossibledaffecterunpoidsplusimportantuneinstance,siellesetrouvesur
unemachinepluspuissantequelesautresparexemple.
Cependant,unproblmesurvientlorsquilsagitdegrerlessessionsutilisateurs,quisontconservessurleserveur
(voir le chapitre La plateforme JEE 5). En effet, en supposant quun client mette une premire requte et quil soit
dirig vers la premire instance, cette requte va lui crer une session, qui sera conserve dans la mmoire de la
MachineVirtuelleJavadecetteinstance.Ensuite,sicemmeclientmetunedeuximerequte,lalgorithmedeRound
Robinpeuttrsbienenvoyercetterequteversuneautreinstancedanscecas,lasessiondececlientestperdue.
Pour viter ce phnomne, les modules JK utilisent un mcanisme appel affinit de session . Laffinit de session
permetdegarantirqupartirdumomentounclientseconnecteuneapplicationquiutiliselessessions,ceclient
seratoujoursdirigverslammeinstancedeserveur.
Ducotdelatolrancedepanne,siuneinstancedeserveurTomcat6nerpondpasunenvoiderequtefaitparle
module JK, alors cette instance est marque indisponible, et le module tente denvoyer cette requte sur une autre
instance.
RpartitiondechargeetdetolrancedepanneaveclesmodulesJK :

- 2-

ENI Editions - All rigths reserved


Lobjectif est maintenant dtendre la configuration tudie au chapitre Le serveur Apache Tomcat 6 Installation et
configurationpourfairecohabiterplusieursserveursTomcat6avecunserveurWeb.Lesfichiersdeconfigurationsont
lesmmesqueceuxquiontdjtmisen uvrepouruneconfigurationavecunserveurTomcat6unique.

a.ConfigurationavecApacheHTTPServer
Apacheutilisesonproprefichierdeconfigurationhttpd.confainsiquelefichierworkers.propertiespourcommuniquer
avecTomcat6.
Voici,titrederappel,unexempledeconfiguration.
LefichierdeconfigurationdApachehttpd.conf :
JkWorkersFile
JkLogFile
JkLogLevel
JkMount

conf/workers.properties
logs/mod_jk.log
info
/ListeEmployes
worker1

Lefichierworkers.properties :
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
EnreprenantlexempledeclusterproposaupointConfigurationdunclusterTomcat 6 Installerplusieursinstances
de Tomcat sur la mme machine de ce chapitre, il faut modifier la configuration de telle sorte que chacune des
instancessoitassocieuntravailleur:voicilefichierworkers.propertiesutiliserpourcetteconfiguration :
Pourplusdeclart,lestravailleursportentlenomdesinstances.
worker.list=tomcat1, tomcat2
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8109
worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=8209
Danscetexemple,leserveurWebainsiquelesdeuxinstancesdeTomcat6sontsurlammemachinephysique,do
lutilisation de la valeur localhost en tant que nom dhte, il faut bien sr adapter ces valeurs en fonction de
larchitecturemiseen uvre,etutiliserdeprfrencedesadressesIPpluttquedesnomsdemachines.
Lestravailleurspourchacunedesdeuxinstancestantmaintenantdclars,ilfautmaintenantajouteruntravailleur
supplmentaire responsable de la rpartition de charge avec lalgorithmeRoundRobin. Ce travailleur est particulier,
carsontypenestpasajp13,maislbdanslamesureoilnecommuniquepasavecTomcat6maisfaitsimplementla
rpartition des requtes (lb = LoadBalancing). En plus davoir un type diffrent, ce travailleur utilise un attribut
permettant de faire rfrence tous les travailleurs qui participent la rpartition de charge, cest lattribut
balanced_workers.

ENI Editions - All rigths reserved

- 3-

Voici le fichier workers.propertiesmodifi avec lajout du travailleur supplmentaire, il est nomm balancer. Les lignes
modifiessontengras.
worker.list=tomcat1, tomcat2, balancer
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8109
worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=8209
worker.balancer.type=lb
worker.balancer.balanced_workers=tomcat1,tomcat2
Il est galement possible dajouter un attribut supplmentaire sur les travailleurs de typeajp13, lattribut lbfactor
permetdaffecterunpoidsauxtravailleurs,pardfautcetattributvaut1,chaquetravailleurreoitdoncunequantit
identique de requte. En donnant la valeur 1 pour cet attribut au travailleur tomcat1, et la valeur 2 au travailleur
tomcat2,lepremierreoitalorsdeuxfoismoinsderequtesquelesecond.
Une fois le fichier workers.properties modifi, la configuration du serveur Apache doit, elle aussi, subir un petit
changement. En effet, le travailleur associ aux applications doit tre le travailleur responsable de la rpartition de
charge.
Lefichierhttpd.confprcdentdoitdonctremodificommececi :
JkWorkersFile
JkLogFile
JkLogLevel
JkMount

conf/workers.properties
logs/mod_jk.log
info
/ListeEmployes
balancer

LaconfigurationductduserveurWebestmaintenanttermine.
La topologie de cluster prsente prcdemment dans ce chapitre est quasiment oprationnelle, il manque
simplement un lment pour permettre laffinit de session. Il sagit dun attribut de configuration rajouter sur
llment <Engine> de chaque instance, cest lattribut jvmRoute. Cet attribut doit prendre comme valeur le nom du
travailleur Tomcat 6 qui sera amen envoyer des requtes sur cette instance. Il faut donc diter les fichiers
server.xmldesdeuxinstancespourajoutercetattribut.
Fichierserver.xmldelapremireinstance(C:\Cluster\tomcat1\conf\server.xml) :
...
<!-- Define the top level container in our container hierarchy -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
...
Fichierserver.xmldelasecondeinstance(C:\Cluster\tomcat2\conf\server.xml) :
...
<!-- Define the top level container in our container hierarchy -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
...
noterquilnyariendeparticulierfaireducotdumoduleJKoudApachepouractiverlaffinitdesession:elle
lestpardfaut.Parcontre,sil est ncessaire de dsactiver ce mcanisme, il faut ajouter lattribut de configuration
sticky_sessionsurletravailleurdetypelbdanslefichierworkers.properties,etluidonnerlavaleur0(Ilvaut1par
dfaut).
Exemple :
worker.balancer.sticky_session=0
Laconfigurationestmaintenanttermine.Pourlatester,ilfaututiliserplusieursclients,etvrifierquechacunestbien
envoysuruneinstancediffrente.
Pour tester ce fonctionnement, il suffit juste dajouter une page HTML lapplication en cluster, mais qui aura un
contenudiffrentsurlapremireinstanceetsurlaseconde,ellepeutafficherlenomdelinstanceparexemple.
Ensuite,laprocduresuivantepermetdetesterquelatolrancedepannefonctionnecorrectement.

- 4-

DmarrerlesdeuxinstancesdeserveurTomcat6.

ENI Editions - All rigths reserved

OuvrirunnavigateurWebetdemanderlapageajouteprcdemment.

Arrterlinstancequiaservicettepage.

RafrachirlaffichagedanslenavigateurWeb,ildoitmaintenantafficherlapagedelautreinstance.

b.ConfigurationavecMicrosoftIIS
LaconfigurationavecleserveurWebdeMicrosoftdiffreassezpeudecelleralisepourApache,danslamesureo
IISutilisegalementlefichierworkers.propertiesavecexactementlammesyntaxe.
La diffrence rside dans la manire de mettre en relation les applications Web avec les travailleurs, en effet, IIS
utilise pour ceci le fichier uriworkermap.properties. Pour utiliser la mme configuration de cluster Tomcat 6 que
prcdemment,lefichieruriworkermap.propertiesdoitcontenirlalignesuivante :
/ListeEmployes/*=balancer
Pourtesterlaconfiguration,laprocduredcriteavecApachefonctionnegalementtrsbienavecIIS.

3.ConfigurationdunclusterTomcat6enmodematre/esclave
Avec les versions rcentes de mod_jk, il est galement possible de configurer un cluster Tomcat 6 en mode
matre/esclave. Dans ce mode de fonctionnement avec deux instances de serveurs par exemple, une seule des deux
instances est active pour satisfaire les demandes utilisateur, la deuxime instance sert uniquement remplacer la
premireencasdedfaillance.
Pour mettre en uvre une telle configuration, peu de modifications doivent tre apportes la configuration de
rpartition de charge tudie prcdemment, il suffit simplement dajouter deux directives au fichier
workers.properties.
Exempledeconfigurationavecdeuxserveurs :
worker.list=tomcat1, tomcat2, balancer
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8109
# Spcifier quelle instance doit prendre
# le relais en cas de dfaillance (matre)
worker.tomcat1.redirect=tomcat2
worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=8209
# Spcifier que cette instance nest quune instance
# de secours (esclave)
worker.tomcat2.activation=disabled
worker.balancer.type=lb
worker.balancer.balanced_workers=tomcat1,tomcat2
Danscetteconfiguration,uneseuleinstanceestsollicitepoursatisfairelesrequtesutilisateur(tomcat1),ladeuxime
(tomcat2)prendlerelaisencasdedfaillancedelapremire.CetypedefonctionnementdunclusterTomcat6peut
biensrtremisen uvreavecunnombredeserveursplusimportant.

ENI Editions - All rigths reserved

- 5-

Maintenirltatdesclientsdansuncluster
1.Laproblmatique
Dansunenvironnementdecluster,laproblmatiquedumaintiendessessionsutilisateursestunedesplusdifficiles
rsoudre. Chaque session utilisateur nest prsente que dans une seule et unique instance de serveur, dans la
mesureoelleeststockedanslammoiredelaMachineVirtuelleJavadecetteinstance.
Le mcanisme daffinit de session prsent prcdemment garantit quun client est toujours dirig vers la mme
instance pendant que sa session est valide, en fait le choix de linstance se fait initialement par le module JK qui
mmorise ce choix et qui utilise cette instance tant que la session de ce client est valide. La mise en uvre de la
rpartitiondechargeaveclemoduleJKnestdoncpasunhandicappourlemaintiendessessions.
Parcontre,danslecasolinstancelaquelleunclientestassociconnatunedfaillance,lemoduleJKfaitsontravail
detolrancedepanneetenvoielesrequtesdececlientversuneautreinstance,etsasessionestperdue.Dansce
casdefigure,ilestncessairedesavoirquelleestlimportanceattachelasessiondelutilisateur.
DansunemajoritdesitesWeb,lessessionssontutilisespourconserverdesdonneslieslauthentificationdun
client,cestparexemplelecassurbeaucoupdebanquesenligne.Danscettesituation,sileclientperdsasession,le
comportement attendu est quil sera redirig vers la page dauthentification du site ou de lapplication, aprs stre
rauthentifi:ilpourracontinuerutiliserlesservicesenligne,lapertedelasessionnafinalementquetrspeude
consquences,mispartledsagrmentprovoquparlaredemandedidentification.
Dautres sites Web et applications utilisent par contre les sessions pour y stocker des donnes en quantit plus
importante, cest par exemple le cas de certains sites de commerce lectronique. Sur un site marchand, la session
utilisateur peut galement servir de panier dachat, tous les achats faits par le client sont conservs sous forme
dobjets Java dans sa session et en fin de parcours, le site analyse le contenu de cette session pour gnrer une
commande.Danscecasdefigure,lapertedesasessionpourunutilisateurauneconsquencebeaucoupplusgrave,
puisquilperdtouteslesrfrencesdachatquilsouhaitaitfaire.
Limportancedunesessionutilisateurestdonctouterelative.Cecidit,dansbiendescasdefigure,ilestncessairede
pouvoirconservercessessionsycomprissilatolrancedepannesenmle.Danscecasilfautmettreen uvreun
mcanismepermettantchaqueinstancedeserveur,davoiraccstouteslessessions.

a.Desprocessusisols
La principale difficult lie au maintien des sessions dans un environnement distribu est lie lchange de ces
informationsdesessionentrelesprocessus.ChaqueinstancedeserveurTomcat6fonctionnedansunprocessusqui
luiestpropre :saMachineVirtuelleJava.Chacundesprocessusdunsystmedexploitationpossdesaproprezone
mmoirelaquellelesautresnepeuventaccder,quandcelaseproduit,cestengnralfatalauxprocessus !
Poursaffranchirdecetteisolationentrelesprocessus,plusieurssolutionssontenvisageables.Dabord,ilpeuttre
possible pour ces processus dchanger leurs informations de session en utilisant un mcanisme comme une
communicationrseaubasesurlessocketsTCP/IPparexemple.Lautrepossibilitconsistecrerunemplacement
communauxinstancespourstockercesdonnes,chacundesprocessusayantensuitelapossibilitdylireetcrire
sesdonnes.Cetypedesolutionpeutmettreen uvreunebasededonnesrelationnelle,unrpertoirepartag,
ouencoreunesolutionpropritaire.
Quelle que soit la solution technologique choisie, si elle doit tre implmente directement dans lapplication elle
mme, cela rend le travail du dveloppeur plus compliqu, et lapplication devient dpendante dun mcanisme
particulierquilseralourddefairevoluer.
Les serveurs dapplications JEE proposent quasiment tous dimplmenter cette fonctionnalit de maintien des
sessions entre plusieurs instances de serveurs, et Tomcat 6 nchappe encore pas la rgle. Les mcanismes
proposs sontvariablesdunproduitunautre.

2.Lessolutions
Tomcat6proposetroismcanismesdistinctspourpermettrelemaintiendessessions,chacunayantdesavantageset
desinconvnients.Entouscas,avantdepouvoirpartagerdessessionsentreplusieursinstances,ilfautlepermettre
carpardfaut,uneapplicationWebJEEestlieuneseuleetuniqueinstancedeserveur.
Pour permettre aux informations dune application dtre partages entre plusieurs instances de serveur, il faut
modifier le descripteur de dploiementweb.xml de cette application. Il faut raliser cette modification sur toutes les
copiesdetouteslesinstances !
La modification en question consiste ajouter llment XML <distributable/> ce fichier, voici o il doit tre
positionn :

ENI Editions - All rigths reserved

- 1-

<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<description>
Une application Web JEE pour Tomcat 6
</description>
<display-name>Mon Application</display-name>
<distributable/>
...
</web-app>
LepremiermcanismedemaintiendesessionsproposparTomcat6estunmcanismederplicationdesdonnesde
sessionsviaunrseaumulticastpermettantladtectiondesinstances.
Lautre mcanisme permet de stocker les sessions de manire persistante, soit dans une base de donnes
relationnelle,soitdansunfichier.

a.Larplicationdemmoiremmoire
LarplicationdemmoiremmoireentrelesinstancesestunenouveautdeTomcat6.
Dansleprincipe,larplicationdemmoiremmoireavecTomcat6utilisedeuxtypesdecommunicationrseau,la
premire sert dtecter les diffrentes instances prsentes sur le rseau, et la seconde sert transfrer les
donnesentrelesinstances.
PourdtecterlaprsencedesautresinstancesTomcat6prsentessurlerseau,uneinstanceparticulireutilisele
mcanisme de multicast IP. Le multicast IP est une technique qui permet un systme dappartenir un groupe,
rfrenc par une adresse IP de multicast. Cette adresse sajoute ladresse IP dj existante (appel adresse
unicast).
TouteslesinstancesdeserveurTomcat6configurespourparticiperlarplicationdemmoiremmoireutilisent
lammeadressedemulticast:ellessontdonctoutesdanslemmegroupe.UneinstanceTomcat6utiliselanotion
de heartbeat (littralement battement de c ur) pour notifier sa prsence aux autres instances du groupe, ce
heartbeat est en fait une information rseau simple envoye au groupe multicast. Une instance doit envoyer
rgulirement ce signal, dans le cas contraire, elle est considre comme tant inactive, et ce, jusqu ce quelle
envoiesonsignaldenouveau.
Uneadressedemulticastestcompriseentrelesadresses224.0.0.0et239.255.255.255ensachantquelesadresses
224.0.0.1,224.0.0.2et224.0.0.13sontrserves.
Lautreconnexionrseausertenvoyerlesdonnesdesessionverslesautresinstances,chaqueinstancequivoit
sesdonnesdesessionmodifies,seconnectetourtourtouteslesautrespourleurenvoyerlesdonnes.
ConfigurationdeTomcat6pourlarplicationdemmoiremmoire
La configuration de ce mcanisme de rplication de session se fait dans le fichier server.xml, llment de
configurationutilissenomme<Cluster>etsepositionnedansunlment<Host>.
Cettepositiondanslefichierdeconfigurationesttrsimportantepuisquetouteslesapplicationshbergesparcet
htevoientleurssessionsrpliquesverslesautresinstancesducluster.Ilestdoncindispensabledeneconserver
dans cet lment <Host> que les applications dont les sessions doivent tre rpliques, les autres applications
ventuellementprsentesdansleserveur,devronttredployesdansunautrehte.
Unlment<Cluster>possde4lmentsenfants :

- 2-

<Manager> :permetdedfinirlapolitiquederplication.

<Channel> :permetdedfinirledomainederplication,ungroupedeserveursTomcat6quichangentleurs
donnesdesessions.

<Valve> :llment<Valve>permetdefiltrerlesressourcesdesapplicationspourneconserverquecellesqui
utilisentlessessions,cestdirelesressourcesdynamiquesJava.

<Deployer> :pouractiverledploiementdesapplicationssurchacundesmembresducluster.
ENI Editions - All rigths reserved

Llment<Channel>tantluimmecomposdeslmentssuivants :

<Membership> :cetlmentpermetlaconfigurationmulticastpourlenvoidusignalheartbeat.

<Receiver> :cestlercepteurdesdonnesderplication.

<Sender> : cet lment est celui qui envoie les donnes de session destination des autres instances du
cluster.

Llmentdeconfiguration<Cluster>possdelattributsuivant :
className :lenomcompletdelaclassepermettantdimplmentercemcanisme,laseulevaleurpossiblelheure
actuelleestorg.apache.catalina.ha.tcp.SimpleTcpCluster.
Llment<Manager>possdelesattributssuivants :
className : permet de spcifier le type de rplicateur en indiquant le nom de sa classe Java :
org.apache.catalina.cluster.session.DeltaManager,ellepermetdenerpliquerquelesdonnesdesessionquiont
tmodifiesdepuisladernirerplication.
expireSessionOnShutdown : permet dindiquer si les sessions doivent tre marques comme expires larrt de
linstance.Lavaleurpardfautestfalse.
Exemple :
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"/>
...
</Cluster>
Llment<Channel>possdelattributsuivant :
className :lenomcompletdelaclassepermettantdimplmentercemcanisme,laseulevaleurpossiblelheure
actuelleestorg.apache.catalina.tribes.group.GroupChannel.
Le premier lment enfant de <Channel>, <Membership>, permet de configurer lenvoi du signal heartbeat. Sa
configuration fait donc rfrence ladresse de multicast utiliser par la cluster, ainsi que le port de multicast. Il
possdelesattributssuivants :
className :
la
seule
classe
Java
org.apache.catalina.tribes.membership.McastService.

disponible

lheure

actuelle

est

address :ladressedemulticastIPutilisepourenvoyerlesignalheartbeat,touteslesinstancesdoiventutiliserla
mmeadresse.
port :leportutiliserpourlemulticast,lencore,ildoittreidentiquesurtouteslesinstances.
frequency :lintervalledetempsentredeuxenvoisdesignalheartbeat,lavaleurestexprimeenmillisecondes.
dropTime : le temps en millisecondes au bout duquel une instance est considre comme inactive si aucun signal
heartbeatnestreudecetteinstance.
Exemple :
<Membership
className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
Ensuite, llment <Receiver> utilis pour recevoir les donnes de session rpliquer, possde les attributs
suivants :
className :laseulevaleurpossibleactuellementestorg.apache.catalina.tribes.transport.nio.NioReceiver.
address :ladresse IP utiliser pour la rception des donnes de sessions. La valeur peut tre auto,danscecas,
ladresse IP du systme est utilise. Une adresse IP doit tre spcifie dans le cas de systmes avec plusieurs
adressesIP.
port :leportutiliserpourlarceptiondesdonnesderplication.Danslecasoplusieursinstancesfonctionnent
ENI Editions - All rigths reserved

- 3-

surlammemachine,ellesdoiventchacuneutiliserunportdistinct.
maxThread :lenombredethreadsutiliserpourprendreenchargelesrequtesderplication,lavaleurdonnerici
doittregaleaunombredinstancesprsentesdanslecluster.
selectorTimeout :letempsmaximumdattentedelappelsystmeselect().Lavaleurdonnericiest100pourviter
unbug delabibliothqueJavaNIO.
Exemple :
<Receiver
className=" org.apache.catalina.tribes.transport.nio.NioReceiver "
address="auto"
port="4001"
selectorTimeout="100"
maxThread="6"/>
Llment <Sender> permet lenvoi des donnes de session aux autres instances du cluster qui sont considres
commeactives,saconfigurationesttrssimplepuisquellenutilisequunseulattribut :
className :laseulevaleurpossibleestorg.apache.catalina.tribes.transport.ReplicationTransmitter.
Enfin,llment <Valve>permetdedfinirlesrequtesHTTPquidclenchentunerplication.Cetlmentutiliseun
attribut permettant dexclure, grce des motifs, les ressources qui ne ncessitent pas de rplication, ce sont en
gnraldesressourcesstatiques.
Llment<Valve>possdedeuxattributs :
className :cefiltreparticulierutiliselaclassedimplmentationorg.apache.catalina.ha.tcp.ReplicationValve.
filter : permet de spcifier un ensemble de motifs reprsentant les requtes pour des ressources ne ncessitant
pasdedclencherunerplicationdesdonnesdesession.Cesmotifsutilisentlesexpressionsrgulires,etchacun
deuxestspardesautresparunpointvirgule.
Exemple :
<Valve
className="org.apache.catalina.cluster.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
Llmentdeconfiguration<Deployer>seradtailldanslapartieDdecechapitre.
Un exemple complet de cette configuration existe dans la configuration par dfaut de Tomcat 6 de sorte ce que
lactivationdelarplicationsefasseleplussimplement.Ilestpossibledactivercemcanismepardfautcarlaligne
deconfigurationestprsenteencommentairedanslefichierserver.xmldunenouvelleinstallationdeTomcat6.Il
suffit simplement de dcommenter cette section pour avoir une configuration de rplication de mmoire mmoire
oprationnelle.
Laconfigurationpardfautdanslefichierserver.xml :
<Engine name="Catalina" defaultHost="localhost">
<!-- For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!-<Cluster
className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
Pourtesterlefonctionnementdecemcanisme,unesimplepageJSPpeuttreutilise.LexempledecodeJSPqui
suitpermetjustedafficherlidentifiantdesessioncrparleserveurpourunclientdonn.
PageJSPdetest :
LinstructionJavasession.getId()permetdercuprerlidentifiantdesessiondelutilisateurquimetlarequte.
<%@page language="java" %>
<html>
<body>
<h3>
Identifiant de session : <%= session.getId() %>
</h3>
</body>
</html>

- 4-

ENI Editions - All rigths reserved

Il faut ensuite copier cette page dans le rpertoire racine dune application en cluster. En se connectant cette
applicationvialeserveurWebfrontal,lemoduleJKdevraitenvoyerlarequtedelutilisateurversunedesinstances
deserveurTomcat6.
Enreprenantlesexemplesdeconfigurationcidessus,lapplication/ListeEmployesestdployedanslecluster,en
copiant la page JSP de test dans son rpertoireracine,souslenomsession.jsp,etenyaccdant,voicicequiest
affich :

Lidentifiantdesessionsetermineparlachanedecaractrestomcat1,cestenfaitlenomdutravailleurdumodule
JKquiatraitlarequteHTTP,cestlemoyenutilisparlemoduleJKpourmettreenplacelaffinitdesession.Cest
donclapremireinstancedeserveurTomcat6quiareuetrpondularequte.
Pourtesterlarplication,ilsuffitjustedarrtercetteinstance,puisderafrachirlapagedanslenavigateurWeb,le
module JK devrait utiliser alors un autre travailleur, et donc la deuxime instance de serveur, si la rplication a
fonctionn, lidentifiant de session doit tre exactement le mme que prcdemment, cependant lidentifiant de
travailleurTomcat6doitchangerdevaleur.
Leprincipalavantagedecemcanismepourmaintenirltatdesclientsdansunclusterestlasimplicitdemiseen
uvrecarlaconfigurationesttouteprtedanslefichierserver.xmlpardfaut,etdeplus,cemcanismenerequiert
pasdoutilsupplmentaire,commeunebasededonnesparexemple.
Cependant, les communications rseaux sont lourdes et ncessitent normment de bande passante pour tre
efficaces. De plus, si lensemble des instances vient connatre une dfaillance qui les arrtent, alors toutes les
donnesdesessionsontperdues.
Un autre inconvnient est la consommation mmoire, toutes les donnes tant rpliques sur les instances. La
quantit de mmoire utiliser par les Machines Virtuelles Java des serveurs Tomcat 6 peut tre extrmement
consquenteenfonctiondunombredesessionsmaintenir,etdelaquantitdedonnesdechacunedentreelles,
cequiposeradesproblmessilyaplusieursinstancessurunemmemachine.

b.Lessessionspersistantessursystmedefichiers
Un autre moyen de rendre ltat des clients disponible entre plusieurs instances de serveurs Tomcat 6 est dcrire
physiquementcesdonnesdesessionsdansunfichier.Unfichierestcrparsessionetilssontrendusdisponibles
etpartagspartouteslesinstancesdeserveurs.
Tomcat6utilisellmentdeconfiguration <Manager>pourimplmentercemcanisme,cetlmentdeconfiguration
estprsentauchapitreAdministrationduserveur.
ChaqueapplicationWebdployesousTomcat6estautomatiquementassocieunlment <Context>.Danscet
lment <Context>, Tomcat 6 ajoute galement un lment <Manager> responsable de la gestion des sessions, ce
<Manager> par dfaut stocke simplement les donnes de session dans la mmoire de la Machine Virtuelle Java du
serveur.LaclasseJavadimplmentationdecetlmentestalorsorg.apache.catalina.session.StandardManager.
En redfinissant llment <Manager> dune application, il est possible de lui demander dcrire galement les
informations de session de manire persistante. La classe Java dimplmentation est alors
org.apache.catalina.session.PersistantManager.
La classe org.apache.catalina.session.PersistantManager est galement utilise par le mcanisme de persistance
dessessionsenbasededonnes.
CertainsdesattributsdeconfigurationontdjtprsentsauchapitreAdministrationduserveur,envoicilaliste
complte
lorsque
llment
<Manager>
utilise
la
classe
dimplmentation
org.apache.catalina.session.PersistantManager :

ENI Editions - All rigths reserved

- 5-

className :vautvidemmentorg.apache.catalina.session.PersistantManager.
maxActiveSessions :lenombremaximumdesessionsquipeuventtrecresparcetlment,lavaleurpardfaut-1
signifiequelenombredesessionsestillimit.
maxIdleBackup : le temps dinactivit dune session, exprim en secondes, au bout duquel une session peut tre
critedanslentreptpersistant(lefichieroulabasededonnes),lasessionestgalementconserveenmmoire.
Cette fonctionnalit peut permettre danticiper un crash du cluster. La valeur par dfaut -1, dsactive cette
fonctionnalit.
minIdleSwap :letempsdinactivitdunesession,exprimensecondes,auboutduquelunesessionestcritedans
lentrept persistant, et supprime de la mmoire du serveur. Cette fonctionnalit permet dviter datteindre le
nombre maximum de session dfinit par maxActiveSession ce qui saturerait le serveur et interdirait la cration de
sessionssupplmentaires.Lavaleurpardfautde-1dsactivecemcanisme.
saveOnRestart :permetdedfinirsilessessionssontautomatiquementsauvegardeslarrtduserveurounon.La
valeurpardfauttrue,activecemcanisme.
sessionIdLength :latailledelidentifiantdesessiongnr,lavaleurpardfautest16.noterquecettetaillene
tientpascomptedunomdutravailleurTomcatquiestajoutpourlaffinitdesessiondumoduleJK.
Laconfigurationdelentreptpersistantsefaitavecllmentenfant<Store>dellment<Manager>.
Quand la persistance est mise en uvre avec un systme de fichiers, llment <Store> possde les attributs
suivants :
className : le nom de la classe dimplmentation de lentrept persistant, ici la valeur doit tre
org.apache.catalina.session.FileStore.
directory : le chemin absolu ou relatif au rpertoire de travail de lapplication, permettant dindiquer le rpertoire
utilispourstockerlesfichiersdepersistancedessessions.Lenomdesfichiersestbassurlidentifiantdesession.
checkInterval :intervalleensecondesentrelesvrificationsdelavaliditdessessions.Lavaleurpardfautest60.
Voiciunexemplecompletdeconfiguration,llment<Manager>etsonlment<Store>doiventtreajoutsdansla
configurationdetouteslesinstancesdeserveurTomcat6.
Configurationdessessionspersistantessurunsystmedefichier :
<Context path="/ListeEmployes" docBase="ListeEmployes">
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
maxIdleBackup="600">
<Store className="org.apache.catalina.session.FileStore"
directory="C:\Cluster\store" />
</Manager>
</Context>
LemmetestqueprcdemmentaveclapageJSPpeuttreutilispourvaliderlefonctionnementdelapersistance
des sessions sur un systme de fichiers, de plus, le rpertoire utiliser dans la configuration de llment<Store>
doitcontenirunfichierquiportelenomdelidentifiantdelasessioncre.
Lavantage dutiliser ce mcanisme de persistance est que, mme en cas darrt complet du cluster, ltat des
sessions peut tre restaur puisquelles sont crites physiquement, de plus, lutilisation de llment <Manager>
permet dappliquer la persistance des sessions sur une application particulire, contrairement la rplication de
mmoiremmoirequisappliqueunhtecomplet.
Linconvnient est que les multiples lectures et critures sur le disque dur peuvent tre prjudiciables aux
performances,deplus,lerpertoiredoittreaccessibletouteslesinstances,ilfautdoncpartagerlerpertoiresi
lesinstancesdeserveurssontsurdesmachinesdiffrentes.

c.Lessessionspersistantesenbasededonnes
LederniermcanismeutilisableparTomcat6pourconserverlessessionsutilisateursentreplusieursinstancesest
trsprochedeceluiprsentprcdemment,ladiffrenceprsquelentreptdestockagepersistantdessessions
estunebasededonnesrelationnelle.
CetypedepersistanceutiliseJDBCpourseconnecterlabasededonnes,etlepiloteJDBCdelabaseutiliser
doit tre configur pour Tomcat 6. Si cest un pilote de type 4, il doit se trouver dans le rpertoire
CATALINA_HOME/lib.
Laconfigurationdellment<Manager>eststrictementidentique,ilnyaquelaconfigurationdesonlmentenfant
<Store>quichange.
Pourutiliserunepersistanceenbasededonnes,llment<Store>utiliselesattributssuivants :

- 6-

ENI Editions - All rigths reserved

className :laclassedimplmentationdoitdanscecasavoirlavaleurorg.apache.catalina.session.JDBCStore.
driverName :lenomdelaclassedepiloteJDBCutiliserpourlaconnexionlabasededonnes.
connectionURL :lURLdeconnexionspcifiqueaupiloteJDBCutilisepourseconnecterlabasededonnes.
sessionTable :lenomdelatabledebasededonnesutilisepourstockerlesinformationsdesession.Cettetable
doitaumoinspossderlescolonnesquisontrfrencesparlesattributsquisuivent.
sessionAppCol : le nom du champ de la table des sessions qui permet de faire rfrence lapplication laquelle
appartient la session. Les valeurs enregistres font rfrence aux lments <Engine>, <Host> et <Context>
permettantdidentifierlapplication,sousleformat/Engine/Host/Context.
sessionDataCol : le nom du champ de la table des sessions qui contient les donnes srialises de la session de
lutilisateur.LetypededonnesutilisparcechampdoittreuntypebinaireSQL,commeparexempleBLOB.
sessionIdCol : le nom du champ de la table des sessions qui contient lidentifiant de session, le type de donne
utilispoursechampdoitaccepteraumoins32caractres.
sessionLastAccessedCol : le nom du champ de la table des sessions qui contient la valeur de la proprit
lastAccessedTimedunesession.Cettepropritestlenombredesecondescoulesdepuisle1erjanvier1970au
momentolasessiontaccdepourladernirefois.Letypededonneutilispourcechampdoitpermettrede
stockerunentierde64bits.
sessionMaxInactiveCol :lenomduchampdelatabledessessionsquicontientletempsensecondesauboutduquel
unesessionestautomatiquementinvalidesiellenapastmanipule.Letypededonneutilispourcechamp
doitaccepterunentiercodsur32bits.
sessionValidCol : le nom du champ de la table des sessions qui contient un identifiant permettant de savoir si la
sessionesttoujoursvalideounon.Letypededonneutilispourcechampdoitaccepteruncaractreunique.
Le tableau qui suit rsume les valeurs par dfaut utilises pour ces attributs de configuration relatifs la table de
basededonnes.
Nomdelattribut

Valeurpardfaut

sessionTable

tomcat$sessions

sessionAppCol

app

sessionDataCol

data

sessionIdCol

Id

sessionLastAccessedCol

lastaccess

sessionMaxInactiveCol

Maxinactive

sessionValidCol

Valid

VoiciuneconfigurationcompltedecemcanismeutilisantunebasededonnesMySQL5.
La premire chose faire est de crer la base de donnes ainsi que la table avec la structure prsente
prcdemment.LescriptSQLutilispourcefaireestlesuivant :
CREATE DATABASE `sessionstomcat`;
USE `sessionstomcat`;
CREATE TABLE `sessionstomcat`.`sessions` (
`id_session` varchar(50) NOT NULL default ,
`application` varchar(50) NOT NULL default ,
`data` blob NOT NULL,
`LastAccessedTime` bigint(20) unsigned NOT NULL default 0,
`MaxInactive` int(10) unsigned NOT NULL default 0,
`Valid` char(1) NOT NULL default ,
PRIMARY KEY (`id_session`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Ensuite,ilfautconfigurerlapplicationquidoitutilisercemcanismedepersistance,enajoutantllment<Manager>

ENI Editions - All rigths reserved

- 7-

sonlment<Context>,etce,pourtouteslesinstancesdeserveursTomcat6quihbergentcetteapplication.
noter ici que les donnes dauthentification sont passes en paramtres de lURL de connexion avec user et
password.
<Context path="/ListeEmployes" docBase="ListeEmployes">
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
maxIdleBackup="600">
<Store className="org.apache.catalina.session.JDBCStore"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/sessionstomcat?user=tomcat&amp;password=secret"
sessionTable="sessions"
sessionIdCol="id_session"
sessionAppCol="application"
sessionDataCol="data"
sessionLastAccessedCol="LastAccessedTime"
sessionMaxInactiveCol="MaxInactive"
sessionValidCol="Valid"
/>
</Manager>
</Context>
IlnefautpasoublierdecopierlepiloteJDBCpourMySQL5danslerpertoireCATALINA_HOME/lib,afinquechaque
instancedeserveurTomcat6yaitaccs.
Ici encore, la mme JSP de test, et le mme test peuvent tre utiliss pour valider le fonctionnement de cette
mthodedepersistance,latabledebasededonnesdoitgalementcontenirdesinformationsdesessionsaprsun
accscettepage.
Lavantagedecemcanismeesticiencore,dcrirephysiquementlessessions,desortequesilintgralitducluster
venaitsarrter,lessessionspourraienttrerestauresauprochaindmarrage.Unavantagenotableparrapport
lasolutiondepersistancesurlesystmedefichierestquilnestpasncessairedepartagerunrpertoire,labase
dedonnesestnativementutilisevialerseau,deplus,lescrituresenbasededonnessontplusperformantes
quelescrituressurunsystmedefichier.
Cependant,cemcanismerequiertunebasededonnessupplmentairepourtreimplment.
Cemcanismedemaintiendessessionsdansunclusterestceluiquiestlepluscourammentmisen uvreparles
administrateursdeserveursTomcat6.

- 8-

ENI Editions - All rigths reserved

DploiementdapplicationsdansunclusterTomcat6
Unedifficultintroduiteparlesclustersdeserveursdapplicationsconcerneledploiementdesapplications.Eneffet,il
fautsassurerquetouteslesinstancesduclusterdisposentbiendesmmesapplicationsaveclammeversion.
Tomcat 6 introduit un nouveau mcanisme permettant de dployer les applications dans un cluster et faire en sorte
quellessoientdiffusesautomatiquementtouslesserveursmembresducluster.
Cettefonctionnalitestapporteparllmentdeconfiguration<Deployer>quiestunlmentenfantde<Cluster>.En
effet, le service de rplication des sessions de mmoire mmoire va tre mis contribution pour diffuser les
applicationsauxmembresducluster.

1.Configurationdudeployerencluster
Llment de configuration <Deployer> doit imprativement rsider au sein dun lment <Cluster>. <Deployer>
possdelesattributssuivants :
className :laseuleimplmentationactuellementdisponibleestorg.apache.catalina.ha.deploy.FarmWarDeploy.
tempDir :permetdespcifierunrpertoiretemporairepourlestockagedesapplicationsavantleurdiffusion.
deployDir :lerpertoirededestinationdelapplication.Ilestconseillaveclimplmentationactuelledudeployerde
donnericilemplacementdurpertoirewebapps/deTomcat6.
watchDir :lerpertoiredontlecontenuestsurveillparledeployer,touteslesnouvellesapplicationsquisontpublies
icisontdployesdanslecluster.
watchEnabled : active la reconnaissance des applications, donner la valeur true pour que le dploiement en cluster
fonctionne.
Voiciunexempledeconfigurationpourlesserveursutilissdanslesexemplesdecechapitre.
Pourleserveurtomcat1 :
Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="C:\Cluster\farm\war-temp"
deployDir="C:\Cluster\tomcat1\webapps"
watchDir="C:\Cluster\farm\war-listen"
watchEnabled="true"/>
Pourleserveurtomcat2 :
Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="C:\Cluster\farm\war-temp"
deployDir="C:\Cluster\tomcat2\webapps"
watchDir="C:\Cluster\farm\war-listen"
watchEnabled="true"/>
noterquelasurveillancenauraitputreactivequepourunseuldesdeuxserveurs.

2.Conclusion
IlestimportantdenoterquecettefonctionnalitestrcentedansTomcat6etquelleseratrsprobablementamene
voluerdanslesprochainesversions.

ENI Editions - All rigths reserved

- 1-

IntroductionlutilisationdeTomcatpourledveloppement
Pendant la phase de ralisation dun logiciel, une quipe de dveloppement doit rgulirement tester le fruit de son
travail. Dans le cadre des applications JEE, ces tests ne peuvent se faire sans serveur dapplications. Dans lidal, le
serveurutilisparlquipededveloppementdevraittreidentiqueceluiutilisenproduction,cependant,danslecas
o un serveur commercial est utilis, les cots de licence sont parfois beaucoup trop importants pour permettre
lacquisitiondunelicencedeserveursupplmentaire.
LeserveurApacheTomcatestundesenvironnementsJEElesplusutilisspendantlesphasesdedveloppement,etce
pour plusieurs raisons. Dabord sa gratuit est souvent mise en avant par les chefs de projets qui dcident de
lenvironnement de travail utilis, mais ce nest pas le principal intrt. Ce qui fait de Tomcat le serveur le plus
intressantendveloppementestquilatpendanttrslongtempsimplmentationderfrence.
LimplmentationderfrencedunetechnologieJavaestunedclinaisondunetechnologieparticulirequirespectele
mieuxlesspcificationstechniquesdecettetechnologie,enloccurrenceavecTomcat,ilsagitdelatechnologieServlet
etJSP.
Tomcat6estdoncundesserveursdapplicationsWebdumarchquirespectelemieuxcettetechnologie,cestdoncun
gagedequalitnonngligeablepourlesapplicationsdveloppes.
De plus, la simplicit et la lgret de Tomcat 6 font quil est trs facilement installable sur des machines de
dveloppement,lesenvironnementsdedveloppementJavatantengnraldesoutilsgourmandsenressources,ilest
apprciabledavoirunenvironnementdetestlger.
Cependant, malgr un standard aussi fort que JEE, il peut exister malgr tout quelques petites diffrences de
comportemententredeuxserveursJEE,aussi,utiliserTomcatendveloppementpourfaciliterledploiementdespostes
dedveloppeur,nedoitpasfaireoublierqueletravaildelquipededveloppementdoittrergulirementtestsur
unserveurdapplicationsidentiqueceluiquiestutilisenproduction.
Lobjectif de ce chapitre, un peu en marge du reste de louvrage, est de prsenter lintgration des principaux
environnementsdedveloppementdumarchavecTomcat6pourlutiliserentantqueserveurdetest.

ENI Editions - All rigths reserved

- 1-

DvelopperavecEclipse
Avecplusdunmillionetdemidetlchargementsdanslepremiermoisdedisponibilitdesadernireversion,Eclipse
estsanscontestelenvironnementdedveloppementJavaincourtounabledecesdeuxoutroisderniresannes.
Initiative de lditeurIBM,Eclipseseveutaudpartunsoclederalisationdoutilsdedveloppementintgrs.Aprs
avoirinvestibeaucoupdetempsetdargent,IBMdcidededonnerlecodedEclipseunecommunautOpenSource,
aujourdhui charge de faire voluer loutil : la fondation Eclipse. La particularit dEclipse est dtre compltement
modulaire, ainsi la version actuelle dissocie lenvironnement graphique (Eclipse Workbench) dEclipse et les outils de
dveloppement (JDT Java Development Tools), de plus des fonctionnalits additionnelles sont prsentes sous forme
dextensions(ouplugins).
Les plugins dEclipse permettent loutil dtre totalement adapt un besoin particulier, ainsi mme si Eclipse a
initialementtconupourledveloppementJava,plusieurspluginspermettentdeconstruireunenvironnementpour
ledveloppementenlangageCouenPHP,dautrespluginspermettentledveloppementJEEetlesupportdeserveurs
dapplications.
Lesperspectivesetlesvues
Avec Eclipse, lenvironnement de travail (appel Workbench) est organis en vues et perspectives. Une vue est une
fentreaffichantdesdonnestellesqueducode,ouunearborescencedefichiersdunprojet,uneperspectiveestune
maniredorganisercesvuesetlesmenusdanslenvironnementdetravail.Eclipseestfourniavecunensembledevues
etdeperspectivesstandards,maisdautrespeuventtreapportespardesplugins.
VoiciunaperudelenvironnementEclipseaveclaperspectiveJava(sonnomapparatdanslabarredetitre),etlesvues
Outline,Problems,PackageExplorer.

LadernireversiondEclipseesttlchargeablesurlesitedelafondation,ladressehttp://www.eclipse.org.

1.LesplugindEclipsepourTomcat
IlyaplusieurspropositionsdepluginspourlesupportdelaplateformeJEEdansEclipse,lobjectifdecetypedeplug
ins est en gnral de fournir des assistants de cration des applications, composants, et services JEE, ainsi quun
moyen de configurer et de piloter un serveur dapplications. Toutes ces fonctionnalits sont absentes dEclipse par
dfautcarlenvironnementnepermetquedecrerdesprogrammesJavaautonomes,desapplicationsclient/serveur
Depuislaversion3dEclipse,unsousprojetdelafondationavulejour,ilsagitdeWebToolsPlatform(WTP).
WebToolsPlatform
ENI Editions - All rigths reserved

- 1-

WTP(WebToolsPlatform)estunensembledepluginspourEclipsequiapportentlesupportdeJEEEclipseviades
assistantsetdespossibilitsdintgrationdesserveurscompatiblesJavaEE5dontTomcat6.WebToolsPlatformest
dcoupentroisparties :

Web Standard Tools : permet la manipulation des technologies standards du Web, telles que HTML,
JavaScript

JEE Standard Tools : ajoute le support des applications et des modules JEE, ainsi que des fonctionnalits de
dmarrage,arrtetdbogagesurlesserveursdapplications.

JSFTools :complmentpourledveloppementdapplicationJavaServerFaces(JSF),lenouveaustandardpour
ledveloppementWebJEE.

Web Tools Platform est directement intgr au package de tlchargement intitul Eclipse IDE for Java EE
DevelopersetdisponiblesurlapagedetlchargementdEclipse.
WTP apporte un ensemble de vues ainsi quune perspective supplmentaire Eclipse, cest la perspectiveJava EE.
CetteperspectivecontientlesprincipalesvuesutilisespourledveloppementJEE,cestdire :

La vue Project Explorer montrant larborescence des modules et des applications JEE, il est possible de voir
chacundescomposantsJEEprsentdanslesmodules,

LavueServersproposedeconfigurerunouplusieursserveursdapplications compatibles JEE 5, et de grer


cesserveurs.

VuedensembledeEclipsepourledveloppementJavaEE :
LavueProjectExplorerestgauche,lavueServers,avecuneconfigurationTomcat6,enbas.

Cependant, cet environnement de dveloppement JEE ne fournit aucun serveur dapplications, il faut obtenir une
versionduserveurutiliser,lesserveurssupportsparladernireversiondEclipse(3.3)sont :

- 2-

ApacheTomcatdelaversion3.2laversion6

BEAWebLogicServer8.1et9

IBMWebSphere6
ENI Editions - All rigths reserved

JBoss3.2,4.0,4.2et5

ObjectWebJOnAS4

OracleOC4J10.1.3

DanslecasdeTomcat,lamthodelaplussimpleconsisteutiliserunearchiveZIPpourlexploiteravecWTP,ainsiil
estplussimpledelamettrejouroudutiliserplusieursversionssimultanment,deplus,ilnestpasncessairede
configurerlesvariablesdenvironnementJAVA_HOMEetCATALINA_HOME.
UnefoislarchiveZIPdeTomcat6dcompresse,ilfautconfigurercetteinstancedeserveurpourquellepuissetre
utiliseavecWTP,voicilaprocduresuivre :

DanslemenuWindow,choisirPreferences.

Danslafentredeprfrencesquiapparat,choisirServerInstalledRuntimes.

PourajouterunserveurTomcat6,cliquersurleboutonAddetchoisirlaversiondeTomcatadquatedansledossier
Apachedelafentredassistantquiapparat,surcemmecrancocherlacaseAlsocreatenewlocalserverpuis
cliquersurNext.

DonnerunnomauserveurcenomapparatdanslavueServers.

SlectionnerlerpertoiredinstallationdeTomcat6,puisleJRE.

Terminer lassistant et fermer la fentre de prfrence, le serveur Tomcat 6 est maintenant utilisable dans
lenvironnementEclipseWTPetdoittrevisibledanslavueServers.

ENI Editions - All rigths reserved

- 3-


Ilestpossibledassocierdesprojetsexistantsceserveurdetest,enfaisantunclicdroitsurlalignequilerfrence
danslavueServers,etenchoisissantAddandRemoveProjects

Unefoislesprojetsventuellementajouts,laconfigurationduserveurdetestTomcat6esttermine.
Lenvironnement de dveloppement Eclipse Web Tools Platform permet de crer des projets dapplications JEE
respectant la structure des diffrents modules JEE voqus au chapitre La plateforme JEE 5. Dans le cas du travail
avecTomcat6,ilestpossibledecrerdesprojetsWebdynamiquesquipeuventtretestsdansleserveurconfigur
prcdemment.
PourcrerunprojetWebdynamique :

- 4-

DanslemenuFile,choisirNewProject.

Danslassistantdecrationdeprojet,choisirDynamicWebProjectdansledossierWeb.

Danslcransuivantdelassistant,donnerunnomauprojet,etchoisirleserveursurlequelexcuterceprojet,dans
cetexemple,choisirleserveurTomcat6configurprcdemment.

ENI Editions - All rigths reserved

Laisserlesprfrencespardfautdanslcransuivant.

NoterlechemindecontexteduprojetWebdanslederniercran(ContextRoot),lavaleurpardfautestlenomdu
projet.

ENI Editions - All rigths reserved

- 5-


Le projet Web est maintenant cr, le code Java de lapplication doit tre stock dans le sousrpertoire src, les
ressourcesWebtellesquelesimages,pagesHTMLetpagesJSP,danslesousrpertoireWebContent.
Pour tester le fonctionnement, une simple page JSP peut tre ajoute au projet, pour cela, faire un clic droit sur le
projetetchoisirNewJSPdanslemenucontextuel,donnerunnomaufichierJSPdanslerpertoiredelapplication
WebContentduprojet,parexemplemapage.jsp.CliquersurleboutonFinishdelassistant.
Unmodledepageapparatlcran,voicilesinstructionsajouter :
Lesinstructionsajoutesaumodleapparaissentengras.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Ma Page JSP</title>
</head>
<body>
Bonjour voici la date courante : <%= new java.util.Date() %>
</body>
</html>
Enfin,pourexcutercettepagesurleserveur,slectionnerlapagedansleprojet,faireunclicdroitetchoisirRunAs
RunonServer.Lafentredassistantdelancementsurunserveurapparat.ChoisirleserveurdetestTomcat6cr
prcdemment, lcransuivantdelassistant doit montrer le projet Web dans la liste des projets configurs pour ce
serveur. la fin de lexcution de lassistant de lancement, le serveur dmarre et la page JSP doit sexcuter et
apparatredanslenavigateurintgrdEclipse.

- 6-

ENI Editions - All rigths reserved

AffichagedelapageJSPdanslenavigateurintgrdEclipse :

LepluginSysdeo/SQLIEclipseTomcatLauncher
UneautrepossibilitdedveloppementdapplicationpourTomcat6avecEclipseestoffertegrceaupluginTomcat
LauncherdelasocitSysdeo.Cepluginpermet :

LacrationdeprojetsconformesaustandarddesprojetsWebJEE.

LexcutiondeceprojetentantquapplicationTomcat.

LedmarrageetlarrtduserveurTomcatdepuisEclipse.

Ce plugin est librement tlchargeable sur le site Internet de la socit Sysdeo, ladresse
http://www.eclipsetotale.com/tomcatPlugin.html,ilfautfaireattentionchoisirlaversionduplugin adquate en
fonctiondelaversiondEclipse.
CepluginpermetlexcutiondeprojetsWebJEEtoutsimplementenajoutantunlmentdeconfiguration<Context>
Tomcat 6, soit dans le fichier server.xml, soit sous forme dun fichier de contexte XML dans le rpertoire
CATALINA_HOME/conf/Catalina/localhost. Ces deux possibilits sont prsentes dans le chapitre Dploiement et
gestiondesapplicationsconcernantledploiementdesapplications.
Le plugin Tomcat Launcher sinstalle dans une version de base dEclipse, il ny a pas besoin dextensions
supplmentairespourlefairefonctionner.Pourlinstaller,ilsuffitsimplementdedcompresserlefichierZIPtlcharg
danslesousrpertoirepluginsdelinstallationdEclipse,puisderedmarrercedernier.
Avantdepouvoirlutiliser,ilfautconfigurerlepluginpourluiindiquerquelleinstallationdeTomcat6ildoitutiliser,en
effet,toutcommeEclipseWTP,cepluginnefournitpasdeversiondeTomcat.LinstallationdeTomcat6partirdune
archive ZIP est encore la mthode la plus simple, de plus, il nest pas non plus ncessaire de crer les variables
denvironnementJAVA_HOMEetCATALINA_HOME.
PourconfigurerleTomcatLauncher,procderdelamaniresuivante :

ChoisirPreferencesdanslemenuWindowdEclipse.

Dans la fentre de prfrences qui apparat, la dernire entre dans la liste des prfrences doit tre intitule
Tomcat.Danslecascontraire,ilfautvrifierquelepluginatinstallcorrectement.

SlectionnerTomcatdanslalistedesprfrences.Lapagedeconfigurationduserveurapparat.

Danslapagedeconfigurationduserveurilfautdabordchoisirlaversionduserveurutiliser,puislerpertoireoil
est install, et enfin lendroit o les contextes dapplication seront ajouts pour les projets : dans le fichier
server.xml,oubienencrantunfichierdecontexteXMLparprojet.

ENI Editions - All rigths reserved

- 7-

ValiderlesmodificationsencliquantsurApply,puissurOK.

LaconfigurationduserveurTomcatesttermineetilpeutmaintenanttreutilispourtesterlesprojetsWeb.

PourcrerunprojetWeb,choisirNewProjectdanslemenuFile.

ChoisirProjetTomcatdansledossierJava,cenouveautypedeprojetestapportparlepluginTomcatLauncher.

Danslassistantdecrationdeprojetquisouvre,donnerunnomauprojet,cliquersurNext.

Dansladeuximetapedelassistant,ilestpossibledindiquerlechemindecontexteauquelceprojetestrattach,
cetteinformationmetjourladfinitiondellmentdeconfiguration<Context>quiseracrdansTomcat6lafin
delassistant.Lavaleurpardfautestlenomduprojetprfixparlecaractre/,cecaractreesttrsimportant.

CliquersurFinish,leprojetestcr,etlaconfigurationdeTomcat6estmodifieaveclarfrenceceprojeten
tantquapplication.

Dans ce nouveau projet, le code source Java doit tre stock dans le rpertoire WEBINF/src du projet, les
ressources telles que les images, pages HTML et pages JSP sont, quant elles, directement dans le rpertoire du
projet.
Pourtesterlefonctionnement,lapageJSPutiliseavecEclipseWebToolsPlatformpeutgalementservirdanscecas.
PourcrerunepageJSP,faireunclicdroitsurlerpertoireduprojetetchoisirNewFiledanslemenucontextuel,
donnerunnomaufichier,parexemplemapage.jsp.
Voicilecodesaisirdanslefichiermapage.jspquisouvre dansEclipse:

- 8-

ENI Editions - All rigths reserved

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"


pageEncoding="ISO-8859-1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Ma Page JSP</title>
</head>
<body>
Bonjour voici la date courante : <%= new java.util.Date() %>
</body>
</html>
Leserveurpeutmaintenanttredmarrpourtesterlapage.LepluginTomcatLauncherajoutelemenuTomcatla
configuration dEclipse, ce menu propose de dmarrer, darrter et de redmarrer le serveur Tomcat 6 configur
prcdemment,desicnesquivalentessontgalementprsentesdanslabarredoutilsdEclipse.
LatracedudmarragedeTomcatapparatdanslavueConsoledEclipse.
DmarragedeTomcatsousEclipse :

La
page
JSP
peut
tre
appele
grce
http://localhost:8080/ProjetWeb/mapage.jsp.

un

navigateur

ENI Editions - All rigths reserved

Web

en

utilisant

ladresse

- 9-

- 10 -

ENI Editions - All rigths reserved

DvelopperavecSunNetBeans
NetBeansestlenvironnementdedveloppementJavagratuitetOpenSourcefourniparSunMicrosystems.NetBeansest
galementunframeworkservantlaconstructiondesautresoutilsdedveloppementdeSun.Ladernireversionde
NetBeans, la version 6 lheure de la rdaction de cet ouvrage, est tlchargeable ladresse
http://www.netbeans.org.
CetoutilgratuitutilisemassivementducodesouslicenceOpenSourcenotammentducodedelafondationApache.Ainsi
une version de Tomcat 6 (6.0.14) est fournie en standard avec NetBeans 6 et est propose lors de linstallation du
produit.
Linstallation de NetBeans requiert quun JDK soit pralablement install, de prfrence, une version 1.5 du JDK car la
dernireversiondeloutilatspcialementcritepourcetteversion.Lassistantdinstallationdtecteautomatiquement
leJDKinstall.
Sittlinstallationtermine,lelancementdeNetBeans6proposelinterfacesuivante :

NetBeans6proposelacrationdeprojetJavastandard,maisgalementlacrationdeprojetsdapplications Web JEE


quipeuventsexcutersurunserveurJEE.Laversion6.0.14deTomcatestlivreprconfigurepardfautavecloutil,il
est cependant possible dutiliser une autre version de Tomcat 6, mais galement un serveur BEA WebLogic, Sun Java
SystemApplicationServerouGlassFishoubienencoreJBoss.
La cration dun projet Web peut se faire ds le premier dmarrage de NetBeans 6, sans configuration particulire
puisquelinstancedeserveurTomcat6.0.14estfourniecompltementconfigure.
PourcrerunprojetWeb,voicilaprocduresuivre :

ChoisirNewProjectdanslemenuFile.

Dans lassistant de cration de projet qui apparat, slectionner la catgorie Web, puis le type de projet Web
Application,cliquersurNext.

Dansledeuximecran,ilfautrenseignerlespropritsduprojet,notamment :sonnom,lemplacement, le serveur


surlequeltesterlapplication,etlechemindecontextedelapplicationWeb,parexemple :

ENI Editions - All rigths reserved

- 1-

LederniercranproposedajouterdesframeworksdedveloppementtelsqueStrutsouJavaServerFaces.

TerminerlassistantencliquantsurFinish.

LesprojetsdapplicationsWebcrsavecNetBeans5sontorganissenplusieurssousrpertoires :

WebPagescontientlesdiffrentesressourcestellesquelespagesHTML,pagesJSP,images.

Configuration Files contient le descripteur de dploiement de lapplication Web ainsi que le fichiercontext.xml
quiestutilispourinstallerlapplicationdansleserveurTomcat6.

SourcePackagecontientlecodesourceJavadelapplication.

LibrairiescontientlesbibliothquesJavautilisesparleprojet,pardfaut,labibliothquestandardJava(JDK),
etlesbibliothquesduserveurTomcat6detest.

LeprojetfournitunepageJSPnommeindex.jspquisouvredslafindelacrationduprojet.Lecodedecettepage
peuttrepersonnaliscommedanslesexemplesprcdentsutilisantEclipse.
Pourtesterlapage index.jsp,ilfautlaslectionnerdanslarborescenceduprojet,faireunclicdroitetchoisir Runfile
dans le menu contextuel, le projet est ensuite compil, dploy et le serveur de test Tomcat 6 dmarr, le navigateur
Webpardfautdusystmeestensuitelancavecladressedecettepage.
Lutilisation de Tomcat 6 en tant que serveur de test avec NetBeans est donc immdiate. Cependant il est possible de
configureruneautreversiondeTomcat6quecellefourniepardfaut,etcepourutiliseruneversionidentiquecellequi
estemployeenproductionparexemple.
PourajouterunedfinitiondeserveurTomcat6NetBeans,ilfautdabordinstallerleserveur,larchiveZIPconstituant
unefoisencore,lameilleuresolution.IlnestpasncessairedeconfigurerlesvariablesdenvironnementJAVA_HOMEet
CATALINA_HOMEpourexcuterceserveurdetest,parcontre,ilfautpermettrelaccslapplicationmanagerdeTomcat
6unutilisateur.LapplicationmanagerestutiliseparNetBeanspourinstallerlesprojetsWebentantquapplication
Tomcat6.
Pour permettre lutilisation de cette application, il faut diter le fichier tomcatusers.xml prsent dans
CATALINA_HOME/conf.

- 2-

ENI Editions - All rigths reserved

Modificationdufichiertomcatusers.xmlduserveurTomcatdetest :
Les lignes ajoutes au fichier apparaissent en gras. Le rle manager est ajout, lutilisateur netbeans est ensuite ajout et
associcerle.
<tomcat-users>
<role rolename="manager" />
<user name="tomcat" password="tomcat" roles="tomcat" />
<user name="role1" password="tomcat" roles="role1" />
<user name="both" password="tomcat" roles="tomcat,role1" />
<user name="netbeans" password="netbeans" roles="manager" />
</tomcat-users>
LaconfigurationdeNetBeanspourquilutilisecenouveauserveurdetestsefaitenchoisissant Serversdanslemenu
Tools de loutil.Lassistant de configuration de serveur de test contient la configuration du serveur Tomcat 6.0.14 par
dfaut.
Voiciladmarchesuivrepourconfigurerunnouveauserveur :

CliquersurleboutonAddServer,choisirletypedeserveur,etluidonnerunnom,parexemple :

CliquersurNext.

Dansledeuximecran,renseignerlerpertoiredinstallationdeceserveur,etindiquerlenomdutilisateuretlemot
depasseutiliseraveclapplicationmanager,parexemple :

ENI Editions - All rigths reserved

- 3-

TerminerencliquantsurFinish.

Lanouvelleconfigurationapparatdanslassistantdegestiondesserveurs.Ilpeuttrencessairedemodifierlesports
TCP/IP de cette nouvelle instance pour viter les conflits dans le cas o plusieurs serveurs sont dmarrs en mme
temps. Les valeurs par dfaut utilises sont les valeurs par dfaut de Tomcat 6 : 8080 pour le port HTTP (le champ
ServerPort),et8005pourleportdarrtduserveur(lechampShutdownPort).
Configurationcompltedelinstancedetest:

Enfin, pour tester le projet dapplication Web avec ce nouveau serveur, il faut modifier la configuration du projet pour
lassocierceserveur,pourcela :

- 4-

ENI Editions - All rigths reserved

FaireunclicdroitsurlerpertoireduprojetetchoisirProperties.

Danslafentredepropritsduprojet,choisirRunpuisslectionnerlenouveauserveurdetestdanslalisteServer.

ValideravecOK.

Lexcutiondescomposantsdeceprojet,parexemplelapageJSPindex.jsp,sefaitdsormaisaveccenouveauserveur
detest.
Pour contrler les diffrents serveurs configurs dans NetBeans 6, il faut utiliser longlet Services de loutil, situ
gauchedanslafentreprincipale.

En faisant un clic droit sur linstance de serveur contrler, le menu contextuel permet darrter, de dmarrer, ou de
redmarrerleserveur.

ENI Editions - All rigths reserved

- 5-

DvelopperavecBorlandJBuilder
JBuilderestprobablementleplusancienetleplusclbredesenvironnementsdedveloppementJava.Cettenouvelle
version abandonne linterface qui diffrenciait JBuilder des autres environnements de dveloppement. En effet, la
dernireversion,JBuilder2007estbasesurlaplateformeEclipse,elleestdisponiblesoustroisditionsdiffrentes :

JBuilder2007Enterprise :cestlditionquipermetledveloppementdapplicationsJEEetleurstestssurdes
serveursdapplicationscompatiblesJEE1.4.

JBuilder2007Professionnal :cettedtionpossdelesupportdudveloppementJEEmaisnedisposepasdes
composantsdegestiondutravailenquipecommelaversionEnterprise.

JBuilder2007Developer :cetteditionpermetuniquementledveloppementdapplicationsJava,ilnyapas
desupportdeJEE.

LasuitedecettepartieutilisedoncJBuilderEnterprise,uneversiondvaluationtanttlchargeablesurlesiteInternet
deBorland,ladressehttp://www.borland.com/fr/products/jbuilder/.
Contrairementauxdeuxautresoutilsdedveloppementprsents,JBuilder2007estfourniavecuneversionduJDK1.5
quisinstalleenmmetempsqueleproduit.
LesserveursdapplicationssupportsparJBuilder2007Enterprisesont :

BEAWebLogic7.0,8.0,9.0

Tomcat4,5,uneversion4.1.31etuneversion5.5.9sontfourniesavecJBuilderEnterprise

SunJavaSystemApplicationServerPlatformEdition8.x

BorlandEnterpriseServer6.0,6.5

JBoss4.x

IBMWebSphere6.0

ConcernantTomcat6,ilnestmalheureusementpasdisponiblenativementdanscetteversiondeJBuilder.Cependant,il
estpossibledutiliserlepluginSysdeo/SQLIEclipseTomcatLauncherprsentdanslapartieDvelopperavecEclipse
Lesplugins dEclipsepourTomcatdecechapitre,soninstallationetsaconfigurationsontidentiquesauxprocdures
dcritesprcdemment.
LinstallationdeJBuilder2007Enterpriseneposepasdedifficultsparticulires,lepremierlancementproposelinterface
detravailsuivante :

ENI Editions - All rigths reserved

- 1-


PourcrerunprojetWebsimpleetletestersurunserveurTomcat6,procderdelamaniresuivante :

DanslemenuFilechoisirNouveauProjet.

Danslassistant,slectionnerledossierJava,puischoisirProjetTomcat,lassistantdecrationdeprojetdmarre.

La premire tape de lassistant permet de choisir le nom du projet, choisir par exemple Projet Web, cliquer sur
Terminer.

Leprojetestdsormaiscr,etJBuilderaffichelarborescenceduprojetdanslavueExplorateurdepackage.
PourajouterunepageJSPsimpleauprojet,ettestercettepagesurleserveurTomcat6,procdercommesuit :

DanslemenuFichier,choisirNouveauAutre.

Danslassistantquisouvre,slectionnerledossierWeb,puischoisirJSP,cliquersurSuivant.

Lapremiretapepermetdechoisirlenomdufichier,choisirleprojetetdonnerlenommapage.jspaufichier.Cliquer
surSuivant.

- 2-

ENI Editions - All rigths reserved

La seconde tape permet de crer une nouvelle JSP partir dun modle, choisir le modle Nouveau fichier JSP
(html)etcliquersurTerminer.

Lefichier mapage.jspapparatdanslarborescence du projet et souvre dans la fentre ddition de code de JBuilder.


Remplacerlecodedecettepageparceluici :
<%@ page language="java" %>
<html>

ENI Editions - All rigths reserved

- 3-

<head>
<title>Ma Page JSP</title>
</head>
<body>
Bonjour voici la date courante : <%= new java.util.Date() %>
</body>
</html>
Enfin,pourexcutercettepagesurleserveurdetestTomcat6,ilfautdaborddmarrerleserveurdetestTomcat6via
le menu Tomcat Dmarrer Tomcat, et ensuite invoquer le fichier JSP dans un navigateur Web lURL
http://localhost:8080/ProjetWeb/mapage.jsp.Uneicneenformedeglobeterrestresituedanslabarredoutilde
JBuilderpermetdelancerlenavigateurWebintgrloutil.
ExcutiondelaJSPdanslenvironnementdetestTomcat6:

- 4-

ENI Editions - All rigths reserved

DvelopperavecIBMRationalApplicationDeveloper
Rational Application Developer est le nouvel environnement de dveloppement Java de lditeur IBM, cette nouvelle
version remplace la gamme doutil WebSphere Studio . Rational Application Developer permet le dveloppement
dapplications Java et JEE. Un autre outil est galement disponible : Rational Web Developer, ses fonctionnalits se
concentrentsurledveloppementdapplicationsWebJEE.
IBMRationalApplicationDeveloperestunenvironnementdedveloppementJavaconstruitpartirdEclipse3.Eneffet,
IBM qui est lorigine du projet Eclipse, utilise les dernires versions dEclipse comme base pour leurs outils
propritaires,enleurajoutantunequantitdextensions,principalementpourledveloppementJEE.
LesoutilsdedveloppementIBMRationalsontfournisavecunenvironnementdetestWebSphereApplicationServer6,
leserveurdapplicationsJEEdelamarque.Cependant,dautresserveurssontprisenchargeetpeuventtreutilissen
tantqueserveursdetest.Lesserveursquipeuventtreconfigursentantqueserveursdetestsontlessuivants :

IBMWebSphereApplicationServer5.0,5.1,6.0

ApacheTomcat3.2,4.0,4.1,5.0

noter que de trs nombreux plugins additionnels sont disponibles pour la prise en charge de serveurs
supplmentaires,cestnotammentlecaspourBEAWebLogic.
Une version dvaluation limite 60 jours dIBM Rational Application Developer est tlchargeable ladresse
http://www.ibm.com/developerworks/downloads/r/rad/.
IBMRationalApplicationDeveloper

1.LenvironnementdetestTomcat
IBMRationalApplicationDeveloperfournitunenvironnementdetestpourlescomposantsJEE.Cetenvironnementde
testpermetlaconfigurationetlecontrledesdiffrentesinstancesdeserveursdetestsutilisables.
ConcernantlesupportdeTomcat6,RationalApplicationDevelopernefournitpasdesupportnatifdecetteversionde
Tomcat. Ici encore, il est possible dutiliser le plugin Sysdeo/SQLI Eclipse Tomcat Launcher, son installation, sa
configuration,ainsiquelaralisationdunnouveauprojetaveccetoutil,sontstrictementidentiquesauxprocdures
djdtaillesavecEclipseetJBuilder:sereporterauxsectionA1etCdecechapitre.

ENI Editions - All rigths reserved

- 1-

ApacheANT
ApacheANTestunoutilOpenSourcepermettantdautomatiserlestchesdeconstructionduneapplicationpendantle
cycle de dveloppement. ANT est trs largement utilis pour tout type de projets Java car il sintgre trs facilement
dans les outils de dveloppement : tous les outils prsents dans ce chapitre par exemple, permettent dutiliser ANT
pourautomatiserlestchesdeconstruction.
ANTpermetparexempledecompilerlesclassesJava,decrerunearchivededploiementWebauformatWAR,etde
publierunearchivededploiementsurunserveurdapplication.
LadernireversiondeANTestlibrementtlchargeableladressehttp://ant.apache.org.
Installation
ANT ncessite pour son installation la prsence dun JDK configur avec la variable JAVA_HOME, ANT est fourni sous
formedunearchiveZIPquilfautsimplementdcompresserdanslerpertoiredesonchoix.
La deuxime tape consiste crer une variable denvironnement nomme ANT_HOME qui pointe vers le rpertoire
dinstallation de ANT, ainsi qu ajouter le rpertoire ANT_HOME/bin la variable denvironnement PATH pour pouvoir
invoquerANTdepuisnimportequelrpertoire.
Pourvrifierlinstallationetlaconfiguration,ouvriruneinvitedecommandeMSDOSetsaisirant -version.

ANTutiliseunfichierdeconfigurationpourspcifierlestchesdeconstructionraliser,cefichierestauformatXMLet
sappelletraditionnellementbuild.xml.
Un fichier build.xml contient la dclaration dun projet, luimme constitu de proprits et de cibles . Les proprits
servent dfinir la configuration du projet comme les diffrents rpertoires utiliss, une cible est un traitement
particulier raliser comme la compilation du code ou la construction dune archive de dploiement. Enfin une cible
contientplusieurstchesquisontdesoprationsproposesenstandardparANTouquipeuventtreajoutesviades
bibliothquesadditionnelles.
Voiciunsquelettedefichierbuild.xml :
<?xml version="1.0" encoding="ISO-8859-1"?>
< !-- Dfinition du projet -->
<project >
< !-- Une proprit -->
<property />
< !-- Une premire cible -->
<target >
</target>
< !-- Une autre cible -->
<target >
</target>
</project>
LlmentXML<project>dfinitleprojetANTetdoitpossderlesattributssuivants :

name:lenomduprojet.

default:laciblepardfautduprojet.

basedir:lerpertoiredebaseduprojet,ilsertderfrencepourlescheminsrelatifs.

Exemple :

ENI Editions - All rigths reserved

- 1-

<project name="Test" default="compile" basedir=".">


Ensuite,llment<property>possdelesattributs :

name:lenomdelaproprit.

value:lavaleurdelaproprit.

location:permetdedfiniruncheminlaplacedunevaleur.

file:dfinitunfichiercontenantunensembledeproprits.

Exemple :
<property name="build" location="bin"/>
<property file="mesproprietes.properties" />
<property name="projet.nom" value="mon_projet" />
Pour faire rfrence une proprit dans le script, il faut ensuite utiliser la syntaxe suivante ${name}, par exemple :
${build}.
Enfin, llment<target>permetdedfinirunecibledexcutionpourANT,ilpossdelesattributs :
name:lenomdelacible,cetattributestobligatoire.
description:unebrvedescriptiondelacible.
if:conditionnelexcutionparlexistenceduneproprit.
unless:conditionnelexcutionparlinexistenceduneproprit.
depends:dfinitlalistedesciblesdontdpendcettecible.Lesciblesdpendantessexcutentautomatiquementavant
laciblecourante.
LesciblescontiennentplusieurstchesANT,lalistecompltedecestchesestdonnedanslaidedeANTsituedansle
rpertoiredocs/dunedistributioninstalle.

1.Constructiondunprojet
PourillustrerlefonctionnementdeANT,voiciunexemplecompletdefichierbuild.xmlpourconstruireuneapplication.
Larborescenceduprojetdecetteapplicationestlasuivante :
src : ce rpertoire contient le code source Java de lapplication, le fichier de configuration ANT doit permettre la
compilationdececode.
conf :cerpertoirecontientlesfichiersdeconfigurationdelapplication,danscetexemple,ilnyaqueledescripteur
dedploiementweb.xmlprsentdanscerpertoire.
web :cerpertoirecontientlesressourcesWebtellesquelespagesHTMLetpagesJSP.
build :cerpertoiresertlaconstructiondelarborescencepourensuiteraliserlarchivededploiementWeb.
Lerpertoireracineduprojetcontientgalementlefichierbuild.xml.
La premire tape de la ralisation de ce fichier consiste dclarer llment <project>,icilerpertoiredebasedu
projetestlerpertoirecourantcarlefichierbuild.xmlsetrouvedanslerpertoireracineduprojet,tousleschemins
relatifslesontdoncparrapportcerpertoire.
<project name="ListeEmployes" default="compilation" basedir=".">
Ensuite,ilfautdfinirunepropritfaisantrfrenceaurpertoiredinstallationdeTomcat6eneffetcertainesde
sesbibliothquessontrequisespourcompilerleprojet.
<property name="tomcat.home" location="C:/apache-tomcat-6.0.13" />
Avant de pouvoir compiler le code source, il faut crer les diffrents sousrpertoires pour larchive web dans le
rpertoire build du projet, sachant que le code compil doit se trouver sous WEBINF/classes, voici la cible
permettantdeleraliser :

- 2-

ENI Editions - All rigths reserved

<target name="initialisation" description="Cration des


rpertoires">
<mkdir dir="build/WEB-INF" />
<mkdir dir="build/WEB-INF/classes" />
<mkdir dir="build/WEB-INF/lib" />
</target>
Commeindiquprcdemment,certainesbibliothquesdeTomcat6sontncessaireslacompilationduprojet,voici
unlmentdeconfiguration<path>permettantdecrerunerfrencecesbibliothques :
<path id="classpath.projet">
<fileset dir="${tomcat.home}/lib">
<include name="*.jar"/>
</fileset>
</path>
EnfinlaciblepourlacompilationducodeJava,ilestnoterquelecompilateurutiliselarfrenceauxbibliothquesde
Tomcat 6 cre prcdemment, de plus, cette cible dpend de la cible initialisation pour sassurer que les
rpertoiressontbiencrsavantlacompilation.
<target name="compilation" depends="initialisation">
<javac srcdir="src" destdir="build/WEB-INF/classes">
<classpath refid=" classpath.projet" />
</javac>
</target>
Pourterminer,ilnefautpasoublierdefermerllment<project>.
</project>
PourexcutercescriptANT,ilfautouvriruneinvitedecommandeMSDOS,etsaisirlacommandeant compilation,ou
toutsimplementantpuisquelaciblecompilationestlaciblepardfaut.
Excutionduscriptetaffichageproduit :

LemessageBUILDSUCCESSFULindiquequelexcutionduscriptsestbienpasse.EncasderreurANTafficheBUILD
FAILEDetuneexplicationassocieaumessagederreur.
Lecodecompildoitdoncsetrouverdanslerpertoirebuild/WEBINF/classesdanslerpertoireduprojet.

2.Gnrerlesarchivesdedploiement
UnefoislecodeJavacompil,ilfautcrerlarchivededploiementdelapplicationWeb.Cettearchivedoitinclure :

LecodeJavacompilprcdemmentsousWEBINF/classes.

LesressourcesWeb(pagesHTMLetJSP)directementlaracinedelarchive.

LedescripteurdedploiementdanslerpertoireWEBINF.

ENI Editions - All rigths reserved

- 3-

Le rpertoire build du projet a pour objectif de prparer la structure de larchive prte tre cre. Larchive de
dploiementeststockedirectementdanslerpertoireracineduprojet.
Voicilaciblenommearchive,rajouteraufichierbuild.xml,elledpenddelacibledecompilation,etcommencepar
supprimer un fichier WAR ventuellement dj prsent. Ensuite, elle fait rfrence aux diffrentes ressources
intgrer, llment <fileset> permet dinclure le contenu du rpertoire indiqu dans larchive, ici cela sert pour les
pagesHTMLetJSP.
<target name="archive" depends="compilation">
<delete file="ListeEmployes.war" />
<war destfile="ListeEmployes.war" webxml="conf/web.xml">
<classes dir="build/WEB-INF/classes" />
<fileset dir="web" />
</war>
</target>
Ilpeutgalementtrejudicieuxdemodifierlaciblepardfautduprojetenspcifiantcetteciblearchive.Unefoisle
scriptinvoqu,lefichierListeEmployes.wardoitsetrouverdanslerpertoireracineduprojet.

3.Dployersurleserveur
Enfin,unefoislarchivegnre,ilestpossibledeladployerautomatiquementsurunserveurTomcat6enutilisant
sontapplicationmanager.CetteoprationestdjpartiellementdcritedanslechapitreDploiementetgestiondes
applicationsdecetouvrage.
Pour commencer, il faut ajouter les tches spcifiques Tomcat 6 dans le rpertoire ANT_HOME/lib.Cestchesse
trouventdanslefichierCATALINA_HOME/lib/catalinaant.jar,ilfautdonccopiercefichierdanslerpertoireindiqu.
Ensuite,ilfautdclarerlatchepermettantlinstallationdelapplicationaveclemanager :
<taskdef name="deploy"
classname="org.apache.catalina.ant.DeployTask" />
Puisilfautajouteruneciblepourdployerlapplication,cettecibleutiliselatchedeploydclareprcdemment,cette
tcheseconnecteaumanagerdeTomcat6avecuncomptequipossdecerle,elledoitgalementspcifierlechemin
decontextedelapplicationdployeraveclattributpath :
<target name="installer" depends="archive">
<deploy url="http://localhost:8080/manager"
username="admin" password="secret"
path="/ListeEmployes"
war="ListeEmployes.war"
/>
</target>
Modifier galement la cible par dfaut du projet en "installer", ainsi en invoquant simplement la commande ant, le
processuscompletdecompilation,crationdelarchiveetdploiementversleserveursopre.
<project name="ListeEmployes" default="installer" basedir=".">

IlfautqueleserveurTomcat6soitencoursdexcutionpourpouvoirutilisercettedernirecible.
Pourconclure,voicilefichierbuild.xmlcompletdecetexemple :
<project name="ListeEmployes" default="installer" basedir=".">
<property name="tomcat.home" location="C:/apache-tomcat-6.0.13" />
<target name="initialisation">
<mkdir dir="build/WEB-INF" />
<mkdir dir="build/WEB-INF/classes" />
<mkdir dir="build/WEB-INF/lib" />
</target>
<path id="classpath.projet">
<fileset dir="${tomcat.home}/lib">
<include name="*.jar"/>
</fileset>

- 4-

ENI Editions - All rigths reserved

</path>
<target name="compilation" depends="initialisation">
<javac nowarn="on" srcdir="src" destdir="build/WEB-INF/classes">
<classpath refid="classpath.projet" />
</javac>
</target>
<target name="archive" depends="compilation">
<delete file="ListeEmployes.war" />
<war destfile="ListeEmployes.war" webxml="conf/web.xml">
<classes dir="build/WEB-INF/classes" />
<fileset dir="web" />
</war>
</target>
<taskdef name="deploy"
classname="org.apache.catalina.ant.DeployTask" />
<target name="installer" depends="archive">
<deploy url="http://localhost:8080/manager" username="admin"
password="secret" path="/ListeEmployes"
war="ListeEmployes.war"
/>
</target>
</project>
Cetexemplesimplemontrequilestrelativementaisdautomatiserlacrationetledploiementduneapplication
partir dun rfrentiel de code source, ce qui est apprciable en phase de test o lapplication doit tre installe
plusieursfoisparjoursaugrdesmodificationsetcorrectionsapportesparlesdveloppeurs.
tant la base un outil pour le dveloppement, ANT trouve galement sa place dans la bote outil des
administrateursTomcat6,soucieuxdegagnerdutempsetdautomatiserlestraitementsquotidiens.

ENI Editions - All rigths reserved

- 5-

Intgrationdelibrairiestiercesparties
Lors du dveloppement dapplications Web Java EE, il est trs frquent davoir recours des bibliothques ou des
frameworkstiercesparties. Ces complments souvent ncessaires la plateformeJavasontdailleurs trs nombreux
dansledomainedulogiciellibreetdelOpenSource.
Engnral,ceslibrairiescomplmentairessontfourniessousformesdebibliothquesJava(desfichiers.jar),ilestdonc
ncessairedintgrercesbibliothquesauxapplicationsdveloppes.
LestandardJEEproposedeuxmthodesdintgrationdeslibrairiestiercespartiesdansuneapplication :

Intgrer les librairies dans lapplication. Il faut alors copier les diffrents fichiers .jar dans le rpertoire WEB
INF/libdelapplicationWeb.

Intgrerleslibrairiesdirectementauserveurdapplications.PourTomcat6,celasefaitencopiantlesdiffrents
fichiers.jardanslerpertoireCATALINA_HOME/lib.

Cettedeuximemthodeprsentelavantagedefournirdfinitivement,leslibrairiesncessairesplusieursapplications
dployesdansleserveur.

1.ExemplesavecStruts
Le frameworkApache Struts est une des principales rfrences en ce qui concerne le dveloppement dapplications
Web Java EE, en respectant le modle de dveloppement MVC. Apache Struts est fourni en libre tlchargement
ladressehttp://struts.apache.org.
ApacheStrutsestfournisousformedeplusieursfichiers.jarquilfautintgrerselonlunedesdeuxmthodesdcrites
cidessus.
ExempledeprojetWebJEE
Ici,les8fichiers.jardeStrutsonttcopisdansWEBINF/lib

2.ExempleavecHibernate

ENI Editions - All rigths reserved

- 1-

LeframeworkHibernateetunframeworkdemappageobjet/relationnel,cestdirequilpermetdassocierdesobjets
Javadestablesdebasededonnesrelationnelles.Parcemcanisme,lamanipulationdecesobjetsJavarevient
manipulerlesdonnesstockesentable.
Ce framework de dveloppement Java est lui aussi une rfrence importante, tel point quil a servi de modle
llaborationdelaspcificationJPA(JavaPersistenceAPI).
ToutcommeStruts,Hibernateestgalementfournisousformedefichiers .jar.Lesmthodesdintgrationutilisables
avecStruts,sontapplicablesHibernate.

3.Pourconclure
Cesmthodesdintgrationdelibrairiestiercespartiespeuventsappliquernimportequelbibliothqueouframework
additionnelutilisparlesquipesdedveloppement.
Ilestbondegarderlespritquencasdeconflitdeversion,lesfichierspackagsdanslapplication lemportentsur
ceuxdploysdansleserveur.Cettenotion,standarddeJavaEE,permetdutiliseruneversionndunebibliothque,
utilise par plusieurs applications, dans le serveur, et dutiliser une version n+1, package dans une application, si
cetteapplicationabesoinduneversiondiffrente.

- 2-

ENI Editions - All rigths reserved

Introduction
MySQLestunsystmedegestiondebasededonnesrelationnelleOpenSource.Ladernireversion5estuneversion
majeure car elle apporte normment de nouvelles fonctionnalits trs attendues comme par exemple le support des
procduresstockes,pourprogrammerlabasededonnes,ouencoreceluiduclustering.
La procdure suivante a pour objectif dinstaller et de configurer MySQL 5 et ses outils afin de pouvoir lutiliser avec
Tomcat6selonlesdiffrentsbesoinsexprimsdanscetouvrage.

ENI Editions - All rigths reserved

- 1-

Tlchargement
LadernireversiondeMySQL5esttlchargeableladressehttp://www.mysql.com.
Danscetouvrage,leslmentssuivantssontutiliss :

MySQLServer :cestlabasededonnesentantquetelle.

MySQL GUI Tools : contient les outils de gestion MySQL Administrator (loutil dadministration) et MySQL Query
Browser (loutilpermettantdcriredesrequtesSQL).

MySQLConnector/J :lepiloteJDBCutilisparTomcat6pourpermettrelaconnexionlabasededonnesen
utilisantlestechnologiesJava.

ENI Editions - All rigths reserved

- 1-

InstallationsousWindows

Larchivedetlchargementdoitcontenirlefichiersetup.exe,doublecliquersurcefichierpourlancerlinstallationet
cliquersurNextaupremiercran.

ChoisirletypedinstallationTypical,puiscliquersurNext.

CliquersurInstall.Linstallationpeutdurerplusieursminutes.

Unefoislinstallationtermine,ilestpossibledesenregistrerenligne,cettetapepeuttreraliseplustard,dans
cecaschoisirSkipSignUp.

UnebotededialogueproposeensuitederaliserlaconfigurationdeMySQL.

Danslepremiercrandelassistantdeconfiguration,choisirDetailledConfiguration,cliquersurNext.

ENI Editions - All rigths reserved

- 1-

ChoisirensuiteServerMachinedansletypedinstallation,cliquersurNext.

- 2-

ChoisirTransactionnalDatabaseOnly,cliquersurNext.

ENI Editions - All rigths reserved

Slectionnerlerpertoiredinstallation,puiscliquersurNext,jusqulafentresuivante :

Saisirunmotdepassepourlecompteadministrateur,puiscliquersurNext.

Enfin,cliquersur Executepourappliquerlaconfiguration,unserviceWindowsnommMySQLestcretlabasede
donnesestdmarre.

Unefoisleserveurdebasededonnesinstall,ilfautinstallerMySQLGUITools,voicilaprocdure :

Doublecliquersurlefichiertlcharg,accepterlalicenceetcliquersurNext.

Choisirlerpertoiredinstallation,ouconserverlavaleurpardfaut,puiscliquersurNext.

ENI Editions - All rigths reserved

- 3-

Choisirlinstallationcomplte,cliquersurNext.

LancerlinstallationencliquantsurInstall.

Unefoislesoutilsinstalls,ilfautcreruneconnexiondestinationduserveurMySQL5,cetteconnexionconfiguresur
lundesdeuxoutilsseragalementutilisableparlautre.

Lancerlundesdeuxoutilspourcrerlaconnexion.Lafentresuivanteapparat :

Cliquersurlebouton

ecrans%20png%20qualit%20ok/ic01.png

puissurleboutonAddnewConnectiondanslafentre

quiapparat.

- 4-

Donnerunnomlaconnexion,ilfautgalementdonnerlenomdemachinesurlequelleserveurMySQL5setrouve,
ainsiquelidentifiantducompteadministrateuretlemotdepasseassoci,voiciunexemple :

ENI Editions - All rigths reserved

CliquersurApply,puissurClose.

La connexion apparat dans lcran de connexion de loutil, donner le mot de passe du compte administrateur puis
cliquersurOKpourseconnecterauserveurdebasededonnes.

ENI Editions - All rigths reserved

- 5-

InstallationsousLinux
Linstallation de MySQL 5 sous Linux se fait trs simplement en tlchargeant les archives au format RPM sur le site
http://www.mysql.com, ces archives sont fournies pour une majorit de distributions Linux, cependant il existe un
formatgnriqueutilisablesurtoutedistributionsouslintitulgenericRPM.
noterquepourlesdistributionsnesupportantpasleformatRPM,unearchiveauformatTARcontenantlesbinaires,
estgalementdisponible.
Voicilesarchivestlcharger :

MySQLserver5.0.45.i386.rpm

MySQLclient5.0.45.i386.rpm

mysqlguitools5.0r12rhel4i386.tar.gz

Lesversionspeuventavoirvaridepuislardactiondecetouvrage.
Ilfautcommencerparinstallerlepackageclientaveclacommandesuivante :
rpm -ivh MySQL-client-5.0.45.glibc23.i386.rpm
Suruneinvitedecommandesaisirlacommandesuivanteentantqueroot,pourinstallerleserveur:
rpm -ivh MySQL-server-5.0.45.glibc23.i386.rpm
Unscriptdedmarrageautomatiqueestajout,etlabasededonnesestdmarre.Lesinstructionspourajouterun
motdepasseadministrateurapparaissentlcran,unefoislinstallationtermine.
LinstallationdeMySQLGUIToolssuitlemmeschma.
Pour lancer ces outils il faut utiliser les commandes mysql-administrator et mysql-query-browser sur une invite de
commandes.Pourconfigureruneconnexionauserveurdebasededonnesinstall,ilfautlancerlundesdeuxoutils,la
connexionconfiguresurlunestutilisablesurlautre.

Dans la fentre qui apparat au dmarrage de loutil, slectionnerOpen Connection Editor dans la liste droulante
StoredConnection,lditeurdeconnexionsouvre.

CliquersurleboutonAddnewConnection.

ENI Editions - All rigths reserved

- 1-

Donnerunnomlaconnexion,ilfautgalementdonnerlenomdemachinesurlequelleserveurMySQL5setrouve,
ainsiquelidentifiantducompteadministrateuretlemotdepasseassoci,voiciunexemple :

CliquersurApplyChanges,puisClose.

La connexion apparat dans lcran de connexion de loutil, donner le mot de passe du compte administrateur puis
cliquersurConnectpourseconnecterauserveurdebasededonnes.

- 2-

ENI Editions - All rigths reserved

InstallationsousWindows
OpenLDAPestunserveurdannuaireLDAPOpenSourcetrspopulaire,initialementdisponiblepourLinux : unportage
desoncodeatralispourpouvoirlinstallergalementsousWindows.
La
dernire
version
dOpenLDAP
pour
Windows
peut
tre
tlcharge

ladresse
http://lucas.bergmans.us/hacks/openldap/. Il sagit du site personnel de Lucas Bergmans auteur du portage
dOpenLDAPpourWindows.
Le tlchargement de la dernire version dOpenLDAP propose un paquet autoinstallable Windows, il suffit de double
cliquersurlefichierpourdmarrerlinstallation.

AccepterlalicenceetcliquersurNext.

ChoisirlechemindinstallationdOpenLDAP,cliquersurNext.

Slectionner le type dinstallation, choisir ici Full Installation, car elle permet de crer un service Windows pour le
processusprincipaldOpenLDAPslapd.ContinuerencliquantsurNext.

ChoisirdecrerunmenudanslemenuDmarrerdeWindows,puisdecreruneicnesurlebureauetdedmarrer
leserveurlafindelinstallation,cliquersurNext,puissurInstall.

ENI Editions - All rigths reserved

- 1-

- 2-

TerminerlassistantdinstallationencliquantsurFinish.

ENI Editions - All rigths reserved

InstallationsousLinux
LaplupartdesdistributionsLinuxproposentuneversiondOpenLDAPsurleursCDROMdinstallation, linstallationpeut
alorssefaireenutilisantlesoutilsdegestiondeslogicielspropresladistributionLinux,ouencoreaveclacommande
RPMsicettedistributionsupporteceformatdarchive.
DanslecasoOpenLDAPnestpasfournienstandardparladistribution,oubienpourbnficierdelatoutedernire
version,ilfauttlchargerunearchivedecodesourceladressehttp://www.openldap.org.
ExempledinstallationpartirdepaquetRPMsurunedistributionFedoraCore4.
VoicilesdeuxcommandespassersuruneinvitedecommandeetdepuislerpertoireduCDROMquicontientlespaquets
RPM :
rpm -ivh openldap-2.2.23-5.i386.rpm
rpm -ivh openldap-servers-2.2.23-5.i386.rpm
Ledmarragepeutensuitesefairegrcelacommandeservice ldap start(ilfautquelannuairesoitconfigurcomme
dcritplusloin).
Danslecasduneinstallationpartirducodesource,procderdelamaniresuivante :

Copierlarchivetlchargesous/usr/src,puissepositionnerdanscerpertoire.

Dansuneinvitedecommande,saisirtar xvzf openldap-2.2.23.tgzpourdcompresserlarchive(lenumrodeversion


peutvarier),lacommandecrelerpertoireopenldap2.2.23.

Sepositionnerdanslerpertoirecrparladcompressiondelarchive,etsaisir./configure --prefix=/usr/openldap
pourinstallerOpenLDAPsous/usr/openldap.

Saisirensuitelacommandemake depend.

Saisirlacommandemake.

Terminerlinstallationensaisissantmake install.

Une fois que lannuaire est correctement configur, le dmarrage de celuici peut se faire en excutant le
fichier/usr/openldap/libexec/slapd.

ENI Editions - All rigths reserved

- 1-

Configuration
UnefoislinstallationdOpenLDAPtermine,ilfautraliserlaconfigurationdelannuaireenprcisantlepointdedpart
delarborescence,appelnomdistinctifdebase,ainsiquelesinformationsducompteadministrateursdecetannuaire.
Pour spcifier ces informations, OpenLDAP utilise le fichierslapd.conf : ce fichier se trouve dans le rpertoireetc/ de
larborescencedelannuairedansuneinstallationsousLinuxpartirdessources.SiOpenLDAPestinstallpartirde
paquets RPM, ce fichier se trouve dans le rpertoire /etc/openldap. Dans le cas dune installation sous Windows, le
fichiersetrouvelaracinedurpertoiredinstallation.
lafindecefichier,figurentlesinstructionssuivantes :
#####################################
# BDB database definitions
#####################################
database
bdb
suffix
"dc=my-domain,dc=com"
rootdn
"cn=Manager,dc=my-domain,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw
secret
Il faut adapter les valeurs des directives suffix, rootdn etrootpw en fonction de la structure dannuaire mettre en
place.
titredexemple,lechapitreLascuritduserveuretdesapplicationsmeten uvreunannuaireOpenLDAPpourgrer
lauthentificationdesutilisateurssurlesapplications,lannuairemisen uvrealastructuresuivante :

Lenomdistinctifdebaseestdonco=monentreprise.com,voicilefichierslapd.confpersonnalispourcetexemple.
Leslignesquionttmodifiesapparaissentengras.LecompteadministrateurdelannuaireestlecompteManager.
#####################################
# BDB database definitions
#####################################
database
bdb
suffix
"o=monentreprise.com"
rootdn
"cn=Manager,o=monentreprise.com"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw
secret
LeserveurOpenLDAPestmaintenantcorrectementconfiguretpeutmaintenanttredmarr.

ENI Editions - All rigths reserved

- 1-

InstallationdeLDAPBrowser
OpenLDAP ne dispose pas de programme dadministration et de gestion graphique, tout doit se faire en lignes de
commande.IlexisteungrandnombredelogicielscapablesdeseconnecterunserveurdannuaireLDAP,parmieux,
LDAPBrowserestunprogrammetrslgerettrssimpledutilisation,disponiblelafoispourWindowsetpourLinux
puisquilestcritenJava.
LadernireversiondeLDAPBrowserpeuttretlchargeladressehttp://wwwunix.mcs.anl.gov/~gawor/ldap.
Pour que LDAP Browser fonctionne, la prsence dunJDKoudun JRE est ncessaire avec la variable denvironnement
JAVA_HOMEcorrectementpositionne.
Linstallation de LDAP Browser se fait simplement en dcompressant larchivetlchargedanslerpertoiresouhait,
une fois install, son lancement se fait en double cliquant sur le script lbe.bat sous Windows, ou en saisissant la
commande./lbe.shdepuissonrpertoiredinstallation,sousLinux.
InterfacedeLDAPBrowsersousWindows :

Pour pouvoir connecter LDAP Browser au serveur OpenLDAP, il faut dabord configurer une connexion. La fentre de
configurationdesconnexionsapparatchaquelancementdeLDAPBrowser.

ENI Editions - All rigths reserved

- 1-

Pourcrerunenouvelleconnexion :

CliquersurleboutonNew,lafentredeconfigurationduneconnexionapparat.

Remplacerlesvaleursexistantesparcellesdecetexemple,laconfigurationterminedoittreconformelafentre
suivante :

CliquersurSavepourenregistrerlesmodifications.Lanouvelleconnexionapparatsouslenomnewdanslalistedes
connexions configures. Il est possible de lui donner un nom plus explicite en la slectionnant puis en cliquant sur
Rename.

Pourseconnecterlannuaire,slectionnerlanouvelleconnexionetcliquersurleboutonConnect.

- 2-

ENI Editions - All rigths reserved

ImportationdunfichierLDIF
Pourcrerunestructuredannuaire,lechapitreLascuritduserveuretdesapplicationsproposeunfichierauformat
LDIF.LeformatLDIFestleformatdchangedesdonnesLDAP,ilestpossibledimporterunfichierLDIFgrceLDAP
Browser.
VoicilefichierLDIFproposauchapitreLascuritduserveuretdesapplications :
dn: o=monentreprise.com
objectClass: organization
objectClass: top
o: monentreprise.com
dn: ou=utilisateurs,o=monentreprise.com
objectClass: organizationalUnit
objectClass: top
ou: utilisateurs
dn: cn=administrateur,ou=utilisateurs,o=monentreprise.com
objectClass: person
objectClass: top
cn: administrateur
sn: administrateur
userPassword:: cGFzc3dvcmQ=
dn: ou=roles,o=monentreprise.com
objectClass: organizationalUnit
objectClass: top
ou: roles
dn:cn=admin,ou=roles,o=monentreprise.com
objectClass: groupOfUniqueNames
objectClass: top
cn: admin
uniqueMember: cn=administrateur,ou=utilisateurs,o=monentreprise.com
dn: cn=manager,ou=roles,o=monentreprise.com
objectClass: groupOfUniqueNames
objectClass: top
cn: manager
uniqueMember: cn=administrateur,ou=utilisateurs,o=monentreprise.com
PourlimporterdanslannuaireOpenLDAPviaLDAPBrowser :

Slectionnerlenomdistinctifdebasedanslarborescencedegauche(o=monentreprise.com).

ChoisirImportdanslemenuLDIFdeloutil,puisnaviguerjusquaufichier.

SlectionnerloptionUpdate/AddetvaliderencliquantsurImport.

Unefoislefichierimport,larborescencedelannuaireestlasuivante :

ENI Editions - All rigths reserved

- 1-

- 2-

ENI Editions - All rigths reserved

Vous aimerez peut-être aussi