You are on page 1of 12

2012/2013

Recherches -J2EESpring Exception handling -- AOP -- AJAX

Enseignante : Mme BEN YAHIA Salwa Par : GL3/2

Spring MVC : Exception handling

I.

Exception handling infrastructure

A. Mainclasses
Tomanageexceptions,SpringMVCoffersbydefaultthefollowingclasses: ExceptionHandlerExceptionResolver:genericexceptionhandler DefaultHandlerExceptionResolver:exceptionhandlersupportingasetofpredefinedexceptions SimpleMappingExceptionResolver:goodoldexceptionhandler(availablesince2003!)tomapa customexceptiontoaspecificerrorpage Itispossibletousethose3handlers,allweneedtodoistodeclareaHandlerExceptionResolverComposite whichisbasicallyacontainerofExceptionhandlersanddelegatestheexceptionhandlingtoeachofthe registeredhandler

Withthisconfiguration,eachexceptionhandlerwilbeinvokedwithrespecttotheirdeclarationorder(alistis orderedbynature)

B. Detaileddescription

1. ExceptionHandlerExceptionResolver
Thisexceptionhandleristhedefaulthandlerandcovers80%oftheusecases.Onstartuptheclassis registeredintheSpringcontextwithasetofdefaultmethodargumentresolversandmethodreturnvalues handlers: Defaultargumentresolvers ServletRequestMethodArgumentResolver:supportsthefollowingtypesasmethodarguments o WebRequest o ServletRequest o MultipartRequest o HttpSession o Principal(forsecurity) o Locale o InputStream o Reader ServletResponseMethodArgumentResolver:supportsthefollowingtypesasmethodarguments o ServletResponse o OutputStream o Writer Inadditiontothesemethodarguments,thishandleralsohandlethefollowingreturntypesandmethod annotations:
1

Returntypes: o ModelAndView o Model o View o String:simpleviewnamereturn o Map o HttpEntity:tocustomizeHttprequestbodyaswellasheader Annotations: o @ModelAttribute o @RequestBody o @ResponseBody

2)DefaultHandlerExceptionResolver
Thisclasssimplyhandlesthefollowingdefaultexceptions:

Youneednotdeclareanymethodwith@ExceptionHandlerfortheaboveexceptions,theywillbehandled automaticallybytheclass.

3)SimpleMappingExceptionResolver
Thisclassletsyoumapanexceptiontoanview.SimplydefineitsexceptionMappingspropertybyproviding alistofexception/viewpairvalues:

Above,wemaptheClassNotFoundExceptiontotheviewpages/classNotFoundExceptionand CloneNotSupportedExceptiontopages/cloneNotSupportedException.Ofcourseyoumustensurethatthe viewdeclarationiscorrectandtheactualpagesexist.


2

II.

Exception handling strategies

Inthischapterwediscussaboutvariousstrategiestohandleexceptions.

A. Returnanerrormessagetobedisplayed
Thisisthesimplestusecaseforexceptionhandling:

Above,onNullPointerExceptiondetection,wereturnthesourcemessage.Sincethehandlermethodis annotatedwith@ResponseBody,thesourcemessagewillbesimplyputintheresponsebody. Ontheclientside,someJavascripttodisplayanerrorpanelwiththemessage:

Pleasenoticethatthereturnedexceptionmessageishandledbyasuccessfunction(line6)inJavascript. IndeedevenifanExceptionoccuredattheserverside,aslongastheHttpresponsestatusis200theclient sidewillconsideritasasuccess.

B. Returnadedicatederrorpage
Thisstrategysimplyreturnsagenericerrorpageandhidesalltheexceptiondetailsfromtheenduser.

Pleasenotethatthereisnoredirect,wesimplyrenderagenericerrorpageinsteadofthenormaltargetpage.

C. Returnanerrorcodewithcustommessage
Inthisstrategy,weletSpringbuildangenericerrorpagebasedontheHttpcodeweprovidewithacustom message.

PleasenotethedefinitionofHttpcodeandcustomerrormessagewiththe@ResponseStatusannotationat line7.Thisstrategyisquiteequivalenttodefiningtheerrorpageatservletlevelintheweb.xml:

Theresult:

D. Redirecttoacustompagewithcustomerrormessage
Inthisstrategy,wedoarealHTTPredirecttoacustomerrorpagewithacustomerrormessage.

Theabovecodehassomehacks.Firstintheexceptionhandlerweputtheerrormessageasstaticattributeof theredirectviewobject(line11).Itwillendupbeingappendedinthequerystring: errorRedirectPage?errorMessage=xxxx Thenintheerrormessagemethodhandler,weextractitfromthequerywith @RequestParam(errorMessage)(line16)andputitbackintothemodelobject. Whysuchahack?WhydontweusetheRedirectAttributemapthatexistsinSpringMVC3.1?Simply becausetheExceptionHandlerExceptionResolverclassdoesnotsupportthismethodargument.

OfcoursewecouldhaveaddedtheRedirectAttributesMethodArgumentResolverascustomargument resolverbutitwouldrequireabinderFactoryandthecurrentinfrastructureof ExceptionHandlerExceptionResolverdoesnotsupport.

E. ReturnanexceptionwrapperobjectinJSONformat,AJAXresponse
Inthisstrategy,wereturnanexceptionwrapperobjectserializedwithJSONformatbacktotheclient

Toachievethis,weneedtoadda@ResponseBodyannotationtotheexceptionhandlermethodbutalsoa @ResponseStatusannotationtosendanHttperrorcode. UnlikethestrategydescribedatA,inthiscasewewanttotriggertheerrorlisteneratclientsidesoweneed tosendbackanHttpstatusotherthan200.

Intheerrorhandlerfunction,weneedtoextracttheexceptionwrapperobjectfromthebodyofthereturned page(jqXHR.responseText,line9)andconvertittoanJSONobject. Nextwecanextractvariousexceptioninformationfromthewrapperobjectanddisplaytheminamodal panel.Thewaytodisplaytheerrordetailsisuptoyou(modalpanel,custommessagebox)

Programmation oriente aspect


1. Definition
Laprogrammationorienteaspect(POA,enanglaisaspectorientedprogrammingouAOP)estun
paradigmedeprogrammationquipermetdetraitersparmentlesproccupationstransverses(enanglais, crosscuttingconcerns),quirelventsouventdelatechnique(aspectenanglais),desproccupationsmtier, quiconstituentlecurd'uneapplication.Unexempleclassiqued'utilisationestlajournalisation,mais certainsprincipesarchitecturauxoumodlesdeconceptionpeuventtreimplmentsl'aidedece paradigmedeprogrammation,commel'inversiondecontrle(enanglais,inversionofcontrolouIOC). Laprogrammationorienteaspectestbienunetechniquetransversale(paradigme)etn'estpaslieun langagedeprogrammationenparticuliermaispeuttremiseenuvreaussibienavecunlangageorient objetcommePythonqu'avecunlangageprocduralcommeleC,leseulprrequistantl'existenced'un tisseurd'aspectpourlelangagecible.

2. Historique
LesconceptsdelaprogrammationorienteaspectonttformulsparGregorKiczalesetsonquipe,qui travaillaitalorspourleXeroxPARC.

3. Limitestechniques
Lestechniquesactuellesdeconceptionlogiciellesetdeprogrammationamnentdcouperunlogicielen moduleslogicielsaprioriindpendantslesunsdesautrescargrantdesaspectsdiffrentsdusystmeconu. Certainsdecesmodulesimplmententsoitdestchesmtier,soitdestchesplusapplicativescomme l'authentificationdesutilisateursouencoreoffrantdesservicestechniquescommelagnrationdetraceou lemultithreading.Cesmodulesreprsententalorsaummeniveaud'abstraction,diffrentesconsidrations (diffrentsaspects)d'uneapplication,leplussouventceluidelacouchemtier. Listenonexhaustived'exemplesdemodules: gestiondesutilisateurs(authentification); archivagedesdonnes(persistance); programmationconcurrentielle(multithreading); informationpendantl'excutiondulogiciel(trace); logiquemtier(parexempleinformatiquedegestion,systmed'informationgographique,commerce lectronique...). Danslapratique,lesconsidrationstechniquesquesontcenssimplmenterlesmodulesnonseulement s'entrecroisent(parexemplelagestiondesutilisateursfaitaussiappellagnrationdetrace)maissontde plusrpartiesdanslacouchemtier:c'estl'intricationouentrecroisementdesaspectstechniques (crosscuttingenanglais).Ainsi,unecouchelogicielle,initialementddiegrerlalogiquemtierapplicative (parexempleunsystmebancaire),vaseretrouverdpendantedemodulesgrantlesaspects transactionnels,journalisation,etc.,conduisantunecomplexificationducode,desondveloppementetde samaintenance. Laprogrammationparaspectvapermettred'extrairelesdpendancesentremodulesconcernantdesaspects techniquesentrecroissetdelesgrerdepuisl'extrieurdecesmodulesenlesspcifiantdansdes composantsdusystmedveloppernommsaspects;ilssontdveloppsunautreniveau d'abstraction.

4. Principe
Ainsi,aulieud'avoirunappeldirectunmoduletechniquedepuisunmodulemtier,ouentredeuxmodules techniquesdiffrents,enprogrammationparaspect,lecodedumoduleencoursdedveloppementest concentrsurlebutpoursuivi(lalogiquebancaire,pourreprendrenotreexemple),tandisqu'unaspectest spcifidefaonautonome,implmentantunaspecttechniqueparticulier,parexemplelapersistanceou encorelagnrationdetrace.Unensembledepointsd'insertionsoujoinpointenanglaissontensuitedfinis pourtablirlaliaisonentrel'aspectetlecodemtierouunautreaspect.Cesdfinitionsdejoinpointsont dfinisdanslecadredelaPOA.Selonlesframeworksouleslangagesd'aspects,lafusionducodetechnique aveclecodemtierestalorssoitraliselacompilation,soitl'excution.

Biensr,sichaqueaspectcrdevaitluimmedfinirexplicitementquelpointd'excutionildoits'insrer danslecodemtieroudansunautreaspect,cestdireparexempleavecunedpendancedirecteversle modulemtierodevras'intercalerlecodetechnique,onn'auraitalorsfaitquedcalerleproblme.Aussi, l'astuceutiliseparplusieurslangagesconsisteutiliserunsystmed'expressionsrationnellespourprciser quelspointsd'excution(enanglais,joinpoint)dusystmel'aspectspcifidevratreactiv.

Exemple/tudedecas
Unlogicielmtierquidcritunenvironnementdistribuestcritdemanireclassiqueenutilisantune dcompositionfonctionnelleouobjet.Aumomentdudploiementdusystme,onsaperoitqueles machinesphysiquessurlesquelleslesystmevatournerontenfaitdescaractristiqueshtrognes (puissance,bandepassante,etc.)quiimpactentoumodifientlesfonctionnalitsdulogicieldorigine. Uneapprochefrquenteconsisteraitencecaspatcherlecodeunpeupartoutpouradapterlelogiciel sonenvironnementdexcutionrel.AveclesoutilsdePOAonpeutfacilementspcifierleschangements requisSANStoucherauxsourcesducodeoriginal,dontlalogiqueresteintacte. Lesoutilsdeprogrammationparaspectsontenfaitsimilairesauxmodificateurs(before,afteretaround)que lontrouvedansdeslangagescommeLISP,auxquelsonaajoutlapossibilitdunedescriptiondinsertions dclaratives. Unaspectpermetdoncdespcifier: lespointsd'action(pointcut),quidfinissentlespointsdejonctionsatisfaisantsauxconditions d'activationdel'aspect,doncleoulesmomentsol'interactionvaavoirlieu, lesgreffons,cestdirelesprogrammes(advice)quiserontactivsavant,autourdeouaprsles pointsd'actiondfinis.

5. Avantages
Lecouplageentrelesmodulesgrantdesaspectstechniquespeuttrerduitdefaontrsimportante,en utilisantceprincipe,cequiprsentedenombreuxavantages: maintenanceaise:lesmodulestechniques,sousformed'aspect,peuventtremaintenusplus facilementdufaitdeleurdtachementdeleurutilisation, meilleurerutilisation:toutmodulepeuttrerutilissansseproccuperdesonenvironnementet indpendammentdumtieroududomained'application.Chaquemoduleimplmentantune fonctionnalittechniqueprcise,onn'apasbesoindeseproccuperdesvolutionsfutures:de nouvellesfonctionnalitspourronttreimplmentesdansdenouveauxmodulesquiinteragiront aveclesystmeautraversdesaspects. gaindeproductivit:leprogrammeurneseproccupequedel'aspectdel'applicationquileconcerne, cequisimplifiesontravail,etpermetd'augmenterlaparalllisationdudveloppement. amliorationdelaqualitducode:lasimplificationducodequ'entranelaprogrammationparaspect permetdelerendrepluslisibleetdoncdemeilleurequalit.

6. Inconvnients
Letissaged'aspectquin'estfinalementquedelagnrationautomatiquedecodeinsrcertainspoints d'excutiondusystmedvelopp,produituncodequipeuttredifficileanalyser(parcequegnr automatiquement)lorsdesphasesdemiseaupointdeslogiciels(dbogage,test).Maisenfaitcettedifficult estdummeordrequecelleapportepartoutedcompositionnonlinaire(fonctionnelleouobjetpar exemple). Celadit,uneimplmentationcommeAJDT(acronymeanglaisdeAspectJDevelopmentTools),basesur AspectJ,offredesoutilssophistiqusquipermettentdepasserdefaontransparente,enmodedbogage,du coded'uneclasseceluid'unaspect.

7. Lexique
Laprogrammationorienteaspect,parcequ'elleproposeunparadigmedeprogrammationetdenouveaux concepts,adveloppunjargonbienspcifiquequinefacilitepaslacomprhensiondesesconceptsquisont, endfinitive,simplesmaispuissants. Aspect Unmoduledfinissantdesgreffonsetleurspointsd'activation; Greffon(advice)
7

Unprogrammequiseraactivuncertainpointd'excutiondusystme,prcisparunpointde jonction; Tissageoutramage(weaving) Insertionstatiqueoudynamiquedanslesystmelogicieldel'appelauxgreffons; Pointdecoupe,d'action,decoupureoudegreffe(pointcut) Endroitdulogicieloestinsrungreffonparletisseurd'aspect; Pointdejonctionoud'excution(joinpoint) Endroitspcifiquedansleflotd'excutiondusystme,oilestvalided'insrerungreffon.Pour clarifierlepropos,iln'estpaspossible,parexemple,d'insrerungreffonaumilieuducoded'une fonction.Parcontreonpourralefaireavant,autourde,laplaceouaprsl'appeldelafonction. Considrationsentrecroisesouproccupationstransversales(crosscuttingconcerns) Mlange,auseind'unmmeprogramme,desousprogrammesdistinctscouvrantdesaspects techniquesspars.

8. Implmentation
Stratgies
Deuxgrandesstratgiesdetissaged'aspectsexistent: letissagestatiqueparinstrumentationducodesourceoudupseudocodemachineintermdiaire (bytecodeJava,IL) letissagedynamiquelorsdel'excutiondulogiciel(implmenteparexempleparJAC)

Tisseursd'aspects

EnJava: o AspectJ:ExtensiondulangageJava ncessitantdoncunetapede prcompilation2.Lersultatest toutefoisdubytecodeJavastandard. o JavaAspectComponents(JAC): Framework100%Javaconupardes centresderecherchefranais3. o Spring:SpringAOP EnC++: o AspectC++(en) En.NET(C#,VB.NET): o LOOM.NET o AspectDNG o PostSharp o Spring.NET o CodeFluentEntities EnPHP: o laGo!AOPbibliothque o AOPPeclextension EnC: o AspectC EnCaml: o AspectualCaml EnPython:

Aspyct Aspects SpringPython EnCommonLisp: o AspectL EnRuby: o AspectR EnLua: o AspectLua o REAspectLua,leremplaant d'AspectLua
o o o

AJAX
WhatisAJAX?
AJAX=AsynchronousJavaScriptandXML. AJAXisatechniqueforcreatingfastanddynamicwebpages. AJAXallowswebpagestobeupdatedasynchronouslybyexchangingsmallamountsofdatawiththeserver behindthescenes.Thismeansthatitispossibletoupdatepartsofawebpage,withoutreloadingthewhole page. Classicwebpages,(whichdonotuseAJAX)mustreloadtheentirepageifthecontentshouldchange. ExamplesofapplicationsusingAJAX:GoogleMaps,Gmail,Youtube,andFacebooktabs.

HowAJAXWorks

AJAXisBasedonInternetStandards
AJAXisbasedoninternetstandards,andusesacombinationof:

XMLHttpRequestobject(toexchangedataasynchronouslywithaserver) JavaScript/DOM(todisplay/interactwiththeinformation) CSS(tostylethedata) XML(oftenusedastheformatfortransferringdata)

AJAXapplicationsarebrowserandplatformindependent!

GoogleSuggest
AJAXwasmadepopularin2005byGoogle,withGoogleSuggest. GoogleSuggestisusingAJAXtocreateaverydynamicwebinterface:WhenyoustarttypinginGoogle's searchbox,aJavaScriptsendsthelettersofftoaserverandtheserverreturnsalistofsuggestions.
9

Exam mple
Trad ditionalme ethod
Theu userenterst thecomme entsandem mailandthenclicksthesubmitbut tton.Thebr rowsersend dstheenter red datat totheserve ersidescrip ptthrought thepostorgetmethod d.Whenthisisdone,th hebrowser rwillcallthe e serve ersidescript(forexamp pleaPHPpa age)byload dingthatpa ageintheb browser.Thi ispagewillsavetheda atato adata abaseandd displaya'Th hankYou'm messageint thebrowser r. Thep problemwit ththisapprochisthatt theuserslo osessometimewaiting gforanothe erpagetolo oad.Thepa age canno otsavetheentereddatawithoutloadingthe ePHPfile.

AjaxMethod
Herewhentheu userclicksth heSubmitb button,ajav vascriptfun nctioniscalledwhichlo oadstheserversidesc cript inthe ebackgroun nd.Theuserdoesnots seeitbeing gloaded.Ins steadtheJa avaScriptwillimmediat tlyremovethe formfromthepa ageandsho owa'Thank kyou'messa agedynami icallywithoutreloadingthepage e.

Algo orithm
if (u user hits the submi button) { it ) nt r ed t) commen = (user submitte comment email = (user's email id s d) pens in Ba ackground //Happ CallPa age("save_ _comment.p php?commen nt=" + com mment + "& &email=" + email); r is... //User sees thi Remove e(form) Displa ay("Thank you for y your comme ent.") }

10

Application
Thegivenexamplewasforasimpleapplication.Inmoreadvaceduses,theresultgeneratedbythecalled serversidescriptwillbetakenandusedinthepage.SomeapplicationsthatwouldbeimpossiblewithoutAjax are...

Autocomplitionforformfields(GoogleSuggest) LiveChat(XHTMLliveChat)

ExamplesofuseofAjax

GMail GoogleSuggest Backpackit AliveversionoftheFeedbackExampleSeeAjaxContactFormforexplanation.

Problems

BreakstheBackbutton Worksonlyonthelatestbrowsers Hardertomakeandmaintain Goesagainstuserexpectations Assesibilityissues

11