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 :
q

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 Demandeduneressourceauserveur.Cestla mthodeutiliselorsquunutilisateurcliquesurlelien dunepageWeb,oubienentreladressedunsite Webdanssonnavigateur. Envoidedonnesversleserveur,plusprcisment, versunprogrammehbergparceserveur,etqui seracapabledecomprendrecesdonnespourles traiter. CommepourGET,ellepermetdedemanderune ressource,maislaressourcenestpasenvoyedans larponse,cettemthodeestutilisepourfairedes vrificationsdexistenceduneressource,pourdes tests Permetdenvoyeruneressourceversleserveur. Permetdeconnatretouteslesoptionsde communicationpourobteniruneressource particulire. Suppressionduneressourcesurleserveur. Mthodedecontrle,elledemandeauserveurde renvoyerlarequtetellequelleatreue.

GET

POST

HEAD

PUT

OPTIONS

DELETE

TRACE

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 Larequteatreueettraite correctementparleserveur,la rponseestenvoyedansla suite. Laressourcedemandeat dplace.Lanouvelleadressede laressourceesttransmiseau clientpourquilpuissefaireune nouvelledemande. Laressourcedemandenapas tmodifieetpeutdonctre obtenuepartirducache. Lasyntaxedelarequteest incorrecte,oucetterequtene peutpastresatisfaite. Laressourcedemandencessite uneautorisationpourtre obtenue,leclientdoitreformuler sarequteenincluantles autorisationsncessaires. Leressourcedemandenestpas autorisepourceclient. Laressourcenepeutpastre trouvesurceserveur. Leserveurarencontruneerreur pendantletraitementdecette requte. Leserveurnepeutpasrpondre, cestlecasparexemplequandil esttropsollicit.

200

OK

301

Moved

304

NotModified

304

BadRequest

401

Unauthorized

403

Forbidden

404

NotFound

500

ServerError

503

ServiceUnavailable

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 Typedecontenuacceptparlenavigateur(par exempletext/html). Codagededonnesacceptparlenavigateur. LangageattenduparlenavigateurWeb. Typedecodagedesdonnesdanslecorpsdela requte. Typedecontenuducorpsdelarequte(parexemple text/html). Tailledesdonnestransmises. Utilisparlenavigateurpourenvoyer,dansla requte,uncookieversleserveur. Datededbutdetransfertdesdonnes,auformat GMT. URLdulienpartirduquellarequteateffectue. Chanedonnantdesinformationssurleclient,comme lenometlaversiondunavigateur,dusystme dexploitation.

Accept

AcceptEncoding AcceptLanguage

ContentEncoding

ContentType

ContentLength

Cookie

Date

Referrer

UserAgent

Enttesderponse : EntteHTTP ContentEncoding Description Typedecodageducorpsdelarponse. Typedecontenuducorpsdelarponse(parexemple text/html). Tailledesdonnestransmises. Datededbutdetransfertdesdonnesauformat GMT. Datelimitedevaliditdesdonnes. RedirectionversunenouvelleURL. Caractristiquesduserveurayantenvoylarponse. Utilisparleserveur,danslarponse,pourenvoyer uncookiesurlenavigateur.

ContentType

ContentLength

Date

Expires Location Server

SetCookie

- 4-

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 :
q

ApacheHTTPServerdelafondationApache, InternetInformationServerdeMicrosoft, SunONEdeSunMicrosystems,anciennementiPlanetdeNetscapeCorp.

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

3.Lestechnologiesctclient
LestechnologiesctclientsontlestechnologiesdedveloppementdapplicationoubiendesitesWebutilisespour concevoirlinterfaceutilisateuretprendreenchargelesdiffrentsvnementsdclenchsparlesutilisateurs. Troistypesdapplicationsclientessontmajoritairementutiliss :
q

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 :
q

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 :
q

HTML :lelangagedeprsentationdesdonnes. JavaScript :pourajouterdelinteractivitetdudynamismelinterface. CSS :pourcrerdesstylesdeprsentationrutilisables.

Deplus,cestechnologiesnativementcomprhensiblesparunnavigateurWebpeuventtreenrichiespardautres,qui ncessitentsouventdesextensionssurlenavigateurWeb :
q

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 :
q

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 :
q

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 :
q

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 :
q

Lesserveursdapplications. Lesbibliothques,outilsetAPIdedveloppement. Lesframeworks.

Tomcatappartientlapremiredecescatgories. ParmilesautressousprojetsdeJakarta,onpeutgalementciter :
q

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. E n tant quimplmentation de rfrence de ces technologies, un des objectifs majeurs du serveur Tomcat est 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 :
q

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:
q

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 :
q

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 :
q

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 :
q

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 :
q

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. L ouvragesecontenteuniquementdedtaillerlastructuredesmoduleswebdanslamesureounadministrateur 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 :
q

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 :
q

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 J2EE1.2 J2EE1.3 J2EE1.4 JEE5 APIServlet 2.2 2.3 2.4 2.5 APIJSP 1.1 1.2 2.0 2.1 ApacheTomcat 3.x 4.x 5.x 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 :
q

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.
s

OuvrirlePanneaudeconfigurationetchoisirSystme. SlectionnerlongletAvanc.

ENI Editions - All rigths reserved

- 1-

CliquersurleboutonVariablesdenvironnement.

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

- 2-

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

Danslasuitedelouvrage,lenomJAVA_HOMEestutilispourfairerfrenceaurpertoiredinstallationdeJava. Testerlinstallationetlaconfiguration :
s

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 :
s

Ouvrirunterminal. Saisirlacommandejava -version,cettecommandedoitrenvoyerunmessageaffichantlaversiondeJava. Saisirlacommandejavac -help,cettecommandedoitafficherlaidedelacommande.

- 4-

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 :
q

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 :
s

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 :
q

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 :
s

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.
s

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 :
s

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 :
s

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

C ertaines distributions Linux proposent la commande service pour utiliser les scripts de dmarrage 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 :
q

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. U ne librairie dynamique est un fichier portant lextension DLL sur les platesformes Windows, et lextensionSO 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:
q

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 :
q

Protocole :AJP11etAJP12 ModuleApache HTTPServer:mod_jserv

ConnecteurWebapp:
q

Protocole :WARP ModuleApache HTTPServer:mod_webapp

ConnecteurJK :
q

Protocole :AJP13 ModuleApache HTTPServer:mod_jk

- 2-

ENI Editions - All rigths reserved

ModuleMicrosoftIIS :isapi_redirect ModuleNetscape Server:nsapi_redirect ModuleLotusDominoWebServer :tomcat_redirect

ConnecteurJK2 :
q

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 :


q

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

P our plus dinformations sur linstallation et la configuration du serveur Web Apache , consulter louvrage 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:
q

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 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-

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

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 : Lenomabrgdujourdelasemaine,enfonctionde lalocalisationencours. Lenomcompletdujourdelasemaine,enfonctionde lalocalisationencours. Lenomabrgdumois,enfonctiondelalocalisation encours. Lenomcompletdumois,enfonctiondelalocalisation encours. Lejourdumoissousformedenombredcimal(entre 01et31). Lejourdumoissousformedenombredcimal(entre 1et31). quivalentde%Y%m%d. Lheure,sur24heures,sousformedenombre dcimal(entre00et23). Lheure,sur12heures,sousformedenombre dcimal(entre01et12). Lenumrodujourdanslanne(entre001et366). Lheure(sur24heures)sousformedenombre dcimal(intervalle023). Lheure(sur12heures)sousformedenombre dcimal(intervalle112). Lenumrodumois(entre01et12). Laminute,sousformedenombredcimal(0059). Uncaractresautdeligne.

%a

%A

%b

%B

%d

%e

%F

%H

%I

%j

%k

%l

%m %M %n

- 8-

ENI Editions - All rigths reserved

%p

LunedesdeuxchanesAMouPMenfonctionde lheure.MidiesttraitcommePMetMinuitcomme AM. Comme%pmaisenminuscule:amoupm. Lheureenformat24heures(%H:%M). Lenombredesecondescoulesdepuisle1er Janvier197000:00:00UTC. Laseconde,sousformedenombredcimal.(0061). Uncaractredetabulation. Lheureennotation24heures(%H:%M:%S). Lejourdelasemainesousformedcimal,de1 (Lundi)7. Lenumrodelasemainedanslanne,sousforme denombredcimal(0053). Lenumrodujourdelasemaine,sousforme dcimale(06),Dimanche=0. Lanne,sousformedenombredcimal,surdeux chiffres. Lanne,sousformedenombredcimal,surquatre chiffres. LefuseauhorairesousformededcalageGMT. Lenomoulabrviationdufuseauhoraire. Uncaractre%.

%P %R

%s

%S %t %T

%u

%W

%w

%y

%Y

%z %Z %%

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 : Lenombredoctetstransmis(sanslesenttes HTTP).

%b

ENI Editions - All rigths reserved

- 9-

%H

Leprotocoleutilis(HTTPouHTTPS). LamthodeHTTPutilisepourlarequte(GET,POST, ). Lenumrodeportduserveurquiareularequte. Lalistedesparamtrestransmisaveclarequte (prfixavec ?),oubienunechanevidesiaucun paramtrenattransmis. Lapremirelignedelarequte. LecodedtatHTTPenrponselarequte. Letempsdetraitementdelarequte,en microsecondes. LURLdemande(sanslesventuelsparamtres). Lenomcanoniqueduserveurquiareularequte. Lenomduserveurquiareularequte.Sila directivedeconfigurationApacheUseCanonicalName eston,lenomcanonique duserveurestaffich, sinoncestlenomdhtefourniparleclientquiest affich. LenomdutravailleurTomcatquiatraitlarequte.

%m

%p

%q

%r %s

%T

%U %v

%V

%w 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 :
q

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.
s

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 extension_uri

Valeur /jakarta/isapi_redirect.dll

ENI Editions - All rigths reserved

- 13 -

log_file log_level worker_file worker_mount_file

C:\iis_redirector\logs\jk_redirector.log info C:\iis_redirector\conf\workers.properties C:\iis_redirector\conf\uriworkermap.properties

P ourajouterunevaleurdetypechane,faireunclicdroitdanslapartiegauchedelditeuretchoisirNouveau 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:
s

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 :


q

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 :
q

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 :
q

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 :
q

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 200 25 60000

minSpareThreads
maxIdleTime

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 acceptCount connectionTimeout 40 10 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 :
q

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

- 6-

ENI Editions - All rigths reserved

LDAP. Laconfigurationdechacundecestypesde<Realm>estdtailledanslechapitreLascuritduserveuretdesapplicationsdecet ouvrageconcernantlascurit.

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

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 : %a %A AdresseIPdistante. AdresseIPlocale. NombredoctetsenvoyssanslesenttesHTTP,ousilny enapas. NombredoctetsenvoyssanslesenttesHTTP.

%b

%B

- 8-

ENI Editions - All rigths reserved

%h

Lenomdemachinedistante(ouladresseIPsiresolveHosts vautfalse). Leprotocoleutilisdanslarequte. LamthodeHTTPdelarequte. Leportlocalsurlequellarequteatreue. Lachanedelistedesparamtresderequteprfixeavec ? sidesparamtresontttransmis. Lapremirelignedelarequte(lamthodeetlURI). LecodedtatHTTPdelarponse. Lidentifiantdesessionutilisateur. LadateetlheureauformatCLF(CommonLogFormat). Lenomdelutilisateursilyaeuauthentification,sinon. LURLdelarequteformule. Lenomduserveur. Letempsdetraitementdelarequteenmillisecondes. Letempsdetraitementdelarequteensecondes.

%H %m %p

%q

%r %s %S %t %u %U %v %D %T

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 :
q

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>

C et exemple utilise la base de donnes MySQL 5. Se reporter lannexe A pour plus dinformations sur linstallation et la 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:


q

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 :
q

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 :
q

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 :
q

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 :
q

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 :
q

ledploiementduneapplication lobtentiondelalistedesapplicationsactives,ainsiqueleursinformationsdesessions lerechargementduneapplicationWeb,aprsdesmodifications lobtentiondinformationssurlesressourcesJNDIetlesrlesdescurit ledmarrageetlarrtduneapplicationWeb lasuppressionduneapplication

Lemanagerestutilisablepartirdetroisinterfacesdiffrentes :
q

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.

A NTestunoutilOpenSourcedelafondationApachequipermetdautomatiserdestcheslorsdudveloppement 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 :
q

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 :
q

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 A vec la version HTML du manager, il nest pas possible dutiliser les options update et pause permettant les 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 :
q

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 :
q

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 :


q

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.
q

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 :
q

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 :
q

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 :
q

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 :
q

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 :
q

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 nom_util mdp_util Nomdelatable :roles Nomdecolonne nom_util nom_role Typededonnes VARCHAR VARCHAR Typededonnes VARCHAR 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 :
q

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 :
q

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 :
q

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. L ancerTomcatavecuncompteutilisateurnonadministrateurnepeutsefairequesileserveurnutilisepasdeport 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 :
s

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

Q uel que soit le systme, il faut sassurer que lutilisateur qui lance le serveur a la visibilit des variables 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 :
q

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 :
q

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. D ans la suite de louvrage, JMETER_HOME fait rfrence au rpertoire dans lequel larchive de loutil a t 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 :
q

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 :
s

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 :
s

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.
s

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.


s

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 :
q

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 :
q

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 :
s

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 :
q

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 tomcat1 tomcat2 ConnecteurHTTP 8180 8280 ConnecteurJK 8109 8209 Portdarrt 8105 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.
s

DmarrerlesdeuxinstancesdeserveurTomcat6.

- 4-

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 :
q

<Manager> :permetdedfinirlapolitiquederplication. <Channel> :permetdedfinirledomainederplication,ungroupedeserveursTomcat6quichangentleurs donnesdesessions. <Valve> :llment<Valve>permetdefiltrerlesressourcesdesapplicationspourneconserverquecellesqui utilisentlessessions,cestdirelesressourcesdynamiquesJava. <Deployer> :pouractiverledploiementdesapplicationssurchacundesmembresducluster.
ENI Editions - All rigths reserved

- 2-

Llment<Channel>tantluimmecomposdeslmentssuivants :
q

<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 sessionTable sessionAppCol sessionDataCol sessionIdCol sessionLastAccessedCol sessionMaxInactiveCol sessionValidCol Valeurpardfaut tomcat$sessions app data Id lastaccess Maxinactive 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 :


q

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 :
q

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 :
q

ApacheTomcatdelaversion3.2laversion6 BEAWebLogicServer8.1et9 IBMWebSphere6


ENI Editions - All rigths reserved

- 2-

JBoss3.2,4.0,4.2et5 ObjectWebJOnAS4 OracleOC4J10.1.3

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


s

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 :
s

DanslemenuFile,choisirNewProject. Danslassistantdecrationdeprojet,choisirDynamicWebProjectdansledossierWeb. Danslcransuivantdelassistant,donnerunnomauprojet,etchoisirleserveursurlequelexcuterceprojet,dans cetexemple,choisirleserveurTomcat6configurprcdemment.

- 4-

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 :


q

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 :
s

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.
s

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 Web en utilisant ladresse

ENI Editions - All rigths reserved

- 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 :
s

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 :
q

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 :
s

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 :
q

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 :


q

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 :
s

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 :
s

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 :
q

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 :
q

name:lenomduprojet. default:laciblepardfautduprojet. basedir:lerpertoiredebaseduprojet,ilsertderfrencepourlescheminsrelatifs.

Exemple :

ENI Editions - All rigths reserved

- 1-

<project name="Test" default="compile" basedir="."> Ensuite,llment<property>possdelesattributs :


q

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 :
q

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=".">

I lfautqueleserveurTomcat6soitencoursdexcutionpourpouvoirutilisercettedernirecible. 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 :
q

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 :
q

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
s

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.

ChoisirTransactionnalDatabaseOnly,cliquersurNext.

- 2-

ENI Editions - All rigths reserved

Slectionnerlerpertoiredinstallation,puiscliquersurNext,jusqulafentresuivante :

Saisirunmotdepassepourlecompteadministrateur,puiscliquersurNext. Enfin,cliquersur Executepourappliquerlaconfiguration,unserviceWindowsnommMySQLestcretlabasede donnesestdmarre.

Unefoisleserveurdebasededonnesinstall,ilfautinstallerMySQLGUITools,voicilaprocdure :
s

Doublecliquersurlefichiertlcharg,accepterlalicenceetcliquersurNext. Choisirlerpertoiredinstallation,ouconserverlavaleurpardfaut,puiscliquersurNext.

ENI Editions - All rigths reserved

- 3-

Choisirlinstallationcomplte,cliquersurNext. LancerlinstallationencliquantsurInstall.

Unefoislesoutilsinstalls,ilfautcreruneconnexiondestinationduserveurMySQL5,cetteconnexionconfiguresur lundesdeuxoutilsseragalementutilisableparlautre.
s

Lancerlundesdeuxoutilspourcrerlaconnexion.Lafentresuivanteapparat :

Cliquersurlebouton quiapparat.

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

puissurleboutonAddnewConnectiondanslafentre

Donnerunnomlaconnexion,ilfautgalementdonnerlenomdemachinesurlequelleserveurMySQL5setrouve, ainsiquelidentifiantducompteadministrateuretlemotdepasseassoci,voiciunexemple :

- 4-

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 :
q

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.
s

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.
s

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-

TerminerlassistantdinstallationencliquantsurFinish.

- 2-

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 :
s

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 :
s

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 :
s

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