8 Clique droit sur le projet web-‐jsf-‐servlet > Run As > Maven build 8 Saisir d'utiliser différents mécanismes de log (standard Java, Log4j, etc ) Ceci sera corrigé dans la prochaine version d'esup-‐commons et notemment d'esup-‐
Previous PDF | Next PDF |
[PDF] Exercices sur Servlets/JSP - Cnam
Indiquer où se trouve la servlet générée associée à cette JSP (traduction de cette JSP) Page 8 XVII-8 JMF Exercices servlets/JSP Le langage Java
[PDF] Applications Web - miageprojet2
Pour le développement Servlet/JSP ⇨ Conteneur de Servlet Classe java : chargée dynamiquement, elle étend les fonctionnalités Servlet : Exercices 1
[PDF] Java - Servlets - TECFA
17 jan 2001 · Module technique précédent: java-jsp Module d'exercices: act-servlets Objectifs http://java sun com/docs/books/tutorial/servlets/index html
[PDF] Travaux Pratiques Une belle servlet - Hippopotamus
29 oct 2006 · Le corrigé des exercices 1 à 6 est disponible Exercice 1 votre servlet Le fichier à lier est C:\Program files\Java\Sun\lib\j2ee jar 2 Une fois
[PDF] IN328 : Servlets - Corrigé
IN328 : Servlets - Corrigé SI Ce TP va vous permettre de manipuler des servlets en utilisant le web container fonctionne bien en exécutant java -jar TP4 jar
[PDF] Développer des sites Web avec Java EE - Orsys
exercices à réaliser (50 à 70 du temps) corrigés des exercices pour Créer une Servlet, les inclusions, les Java - leçon 70' + quiz de 10 questions
[PDF] Examen 2017 corrigé - LIPN
Java Servlet POJO Java Server Lesquels de ces beans sont bien des technos java: Exercice 3 On veut écrire une appli qui distribue des pubs Il doit y avoir
[PDF] Java, développement de servlets et JSP - ORSYS formation
corrigés des exercices pour Java, développement de servlets et JSP solutions sur les différents serveurs d'applications Java EE du marché comme JBoss
[PDF] Formation Esup-Commons V2 - Exercices et - ESUP-Portail
8 Clique droit sur le projet web-‐jsf-‐servlet > Run As > Maven build 8 Saisir d'utiliser différents mécanismes de log (standard Java, Log4j, etc ) Ceci sera corrigé dans la prochaine version d'esup-‐commons et notemment d'esup-‐
[PDF] exercices corrigés spectroscopie d'absorption atomique
[PDF] exercices corrigés spectroscopie infrarouge
[PDF] exercices corrigés spectroscopie rmn
[PDF] exercices corrigés spectroscopie uv visible pdf
[PDF] exercices corrigés spss
[PDF] exercices corrigés stabilité des systèmes asservis
[PDF] exercices corrigés statique du solide
[PDF] exercices corrigés statistiques covariance
[PDF] exercices corrigés step 7 pdf
[PDF] exercices corrigés structure des molécules 1ere s
[PDF] exercices corrigés structures de données langage c
[PDF] exercices corrigés suites 1ere es
[PDF] exercices corrigés suites 1ere s
[PDF] exercices corrigés suites arithmético géométriques terminale es
Formation
Esup -Commons V2FormationEsup-CommonsV2-ManipulationsPage2sur101 Introduction Lebutdecetteformationestdeparvenirréaliseruneapplicationdeboutenboutàl'aideduframeworkesup-commons.Ceciinclutlamaîtrisede l'environnementdedéveloppementetdesméthodologiespréconiséesparesup-commons.Pourcela,nousallonsréaliseruneapplicationsimplifiéedegestiondetâchesdetypetodo-list.Avant
comm nc r...Toutaulongdecedocumentvousrencontrerezcesicônes:& Vousindiquelesréférencesàladocumentationesup-commonsenligne8 Vousindiqueoùcliquer! Vousindiquelesastucesquivouspermettrontdegagnerdutempsdurantlaformation.Parexemple,lesélémentsdecorrectionsàcopier/collerplutôtquederetaper(enrisquantdesfautesdefrappe).Enfin,seulsleschapitresetexercicesindiquésparuneétoileserontabordésetobligatoiresdurantlasession.Cecidanslebutdepasserenrevuelespartieslesplusimportantesetcomplexesdelaformation.Lesexercicesrestantpourrontêtrefaitdemanièreautonome.Fonctionn m ntfinalatt n
ul'applicationUneapplicationwebautonomequiproposera;• Unepaged'accueil publique,unepagede gestiond estâches etune pagedegestiondesutilisateurs.• Lapaged'accueillisteralestâchespubliquesetoffriraunboutondeconnexion• Lapagedegestiondestâchesafficheralestâchesquiappartiennentouquisontassignéesàl'utilisateur.• Unefoisl'utilisateurauthentifiéilpourraprocéderàlagestiondestâches(ajout,édition,modificationetsuppressiondetâches).• Onpourraafficherledétaild'unetâcheetl'applicationfourniraunliendirectverscettetâcheetoffriralapossibilitéd'envoyerledescriptifdelatâchepare-mail.• Lapagedegestiondesutilisateursproposeradesoptionsd'administrationetnotemmentl'ajoutd'utilisateursenbaseaprèsrecherchedansunannuaireLDAP.• Unwebserviceexposeraentreautreuneméthodepermettantderécupérerlalistedes10dernièrestâchesd'unutilisateur.Uneportletd'accrochequiinterrogeralewebserviceetn'afficheraquelalistedesndernièrestâchesdel'utilisateurconnectéauportail.
labas onné sBoncourageJ!FormationEsup-CommonsV2-ManipulationsPage4sur101 Sommaire INTRODUCTION2SOMMAIRE4INDEXDESEXERCICES7PRISEENMAINDEL'ENVIRONNEMENT91LAMACHINEVIRTUELLE91.1PRESENTATION91.2INSTALLATIONDELAMACHINEVIRTUELLE91.3DEMARRAGE92L'ENVIRONNEMENTDEDEVELOPPEMENTECLIPSE103DECOUVERTEAVECESUP-EXAMPLE103.1CHECKOUTDEPUISSVN103.2ORGANISATIONDESFICHIERS113.3FONCTIONNEMENTENMODULESMAVEN113.4DEMARRAGE14CREATIOND'UNPROJET171CREATIOND'UNPROJETMAVENAPARTIRDEESUP-BLANK171.1VIAECLIPSE171.2ENLIGNEDECOMMANDE182UNCOUPDEMENAGE...202.1PREMIERLANCEMENT202.2MENAGEDANSLESLIBRAIRIESJSF222.3MENAGEDESMODULESINUTILES23BEANSSPRING241LEFICHIERDECONFIGURATIONPRINCIPAL242L'INJECTION243ACCESAUXPARAMETRESDECONFIGURATION27GESTIONDESLOGSETTESTSUNITAIRES291GESTIONDESLOGS291.1UTILISATIONDANSLECODEJAVA291.2ACTIVATIONDUMECANISMEDELOG292LESTESTUNITAIRES292.1EXECUTIONDESTESTSUNITAIRESVIAMAVEN302.2EXECUTIONDESTESTSUNITAIRESDANSECLIPSE34ACCESAUXDONNEES351L'OBJETMETIER352LACOUCHEDAO353LACOUCHESERVICES374PREMIERSTESTSD'ECRITUREETLECTUREENBASE39LESVUES431JSFETSESLIBRAIRIES432FACELET433PAGESETNAVIGATION44
FormationEsup-CommonsV2-ManipulationsPage7sur101 Index des exercices EXERCICEN°1:RECUPERATIOND'UNPROJETDEPUISSVN10EXERCICEN°2:LANCEMENTD'UNEAPPLICATIONMAVEN14EXERCICEN°3:CREATIOND'UNPROJETAPARTIRD'UNARCHETYPEMAVEN17EXERCICEN°4:INSTANCIATIOND'UNBEANSIMPLE25EXERCICEN°5:PERSONNALISATIONDESCONFIGURATIONSGRACEAL'INJECTION27EXERCICEN°6:TESTUNITAIRESIMPLE30EXERCICEN°7:TESTUNITAIREAVANCE32EXERCICEN°8:CREATIOND'UNOBJETMETIERSIMPLE.35EXERCICEN°9:CREATIOND'UNERELATIONENTREOBJETSMETIERS41EXERCICEN°10:TESTDELACOUCHE-OMAINDANSUNTESTUNITAIRE41EXERCICEN°11:AJOUTD'UNMENUVIAUNTEMPLATEFACELET44EXERCICEN°12:AJOUTD'UNENOUVELLEPAGEAVECREGLEDENAVIGATION44EXERCICEN°13:PARCOURSD'UNTABLEAU45EXERCICEN°14:DECLARATIONETUTILISATIONDESENTREES49EXERCICEN°15:SURCHARGED'UNBUNDLE50EXERCICEN°16:AJOUTD'UNLANGAGE51EXERCICEN°17:CREATIOND'UNFORMULAIREDESAISIESIMPLE52EXERCICEN°18:UTILISATIOND'UNCONVERTISSEURPREDEFINI53EXERCICEN°19:CREATIOND'UNCONVERTISSEUR54EXERCICEN°20:VALIDATIONDESCHAMPSGRACEAUNVALIDATEUR55EXERCICEN°21:VALIDATIONDESCHAMPSGRACEAJSR30356EXERCICEN°22:AMELIORATIONDUFORMULAIRE:EDITIONETSUPPRESSION56EXERCICEN°23:AJOUTDEFONCTIONSAJAXPOURL'ERGONOMIE57EXERCICEN°24:L'AFFICHAGEDESEXCEPTIONS58EXERCICEN°25:AJOUTDESFONCTIONNALITESD'E-MAIL61EXERCICEN°26:METTREENPLACEUNEAUTHENTIFICATIONAS63EXERCICEN°27:CREATIONDEBOUTONSDECONNEXIONETDECONNEXION65
FormationEsup-CommonsV2-ManipulationsPage9sur101 Prise en main de l'environnement 1 Lamac inevirtuelle1.1 PrésentationPourl'ensembledecetteformationnousutiliseronsunemachinevirtuelleautonomesurlaquellesontinstallés:• Java6(JDK)• Maven• UnserveurdebasededonnéesMySQL• UnannuaireLDAP• UnserveurCAS• UnPortailEsupv3.21.2 Installationdelamac inevirtuelleCréerunemachinevirtuelledansVirtualBox• Système:Linux/Version:Ubuntu• Affecterauminimum1024Modemémoire• Utiliserundisquedurexistanto Nouveauxsupportsvirtuelso Pointerverslefichieresup-commons-formation.vdi• TerminerActiverlesVirtualisationsdeprocesseur(sivotrematériellepermet)1.3 DémarrageLancerlamachinevirtuelle.• Login/motdepasse:esup/esup
FormationEsup-CommonsV2-ManipulationsPage10sur1012 L'environnementdedéveloppementEclipseEclipseestdéjàinstallésurlamachinevirtuelle.& Guidedudéveloppeur>Priseenmain>Installationdel'environnementdedéveloppementhttp://www.esup-portail.org/x/iwAABgPluginsinstallés:• SpringIDE• Checkstyle• Maven• Subclipse• ResourceBundleEditor8 DémarrerEclips (raccourcisurlebureau)3 Découverteavecesup-exampleNousallonscommencerparnousfamiliariseravecmavenetlastructured'unprojetesup-commonsgrâceàl'applicationesup-example.& Guidedudéveloppe ur>Pri seenmain>Découverteavecesup-examplehttp://www.esup-portail.org/x/hwIABg3.1 C eckoutdepuisSVNExerciceN°1: Récupérationd'unprojetdepuisSVNRécupérerleprojetesup-exampledepuislerépertoiretrunkdudépôtSVNdeesup-commons.PasserenperspectiveSVNRepositoryExploringdansEclipse8 Windows>OpenPerspective>Other...
FormationEsup-CommonsV2-ManipulationsPage11sur101Ajouterledépôthttps://subversion.cru.fr/esup-commons.Faireuncheckoutsur/trunk/esup-example3.2 Organisationdesfic iersPasserenperspectiveJavaEE.3.3 FonctionnementenmodulesMaven& Guidedudéveloppeur>Priseenmain>Méthodologiededéveloppementhttp://www.esup-portail.org/x/jQAABg
FormationEsup-CommonsV2-ManipulationsPage12sur101Activerlagestiondesdépendancesmavensurleprojet8 Cliquedroit>Maven>EnableDependencyManagment
FormationEsup-CommonsV2-ManipulationsPage13sur101Puisconstruireleprojet:8 Cliquedroit>Runas...>MaveninstallOnobserveradanslaconsoleJava:13/10/11 16:01:57 CEST: /home/esup/workspace/esup-example 13/10/11 16:01:57 CEST: mvn -B install Ceciprenduncertaintempssileslibrairiesnefigurentpasdansvotrerépertoire.m2 [INFO] ------------------------------------------------------------- [INFO] Reactor Summary: [INFO] ------------------------------------------------------------- [INFO] esup-example .......................................... SUCCESS [43.472s] [INFO] example-domain-beans .................................. SUCCESS [1:12.760s] [INFO] example-dao ........................................... SUCCESS [20.388s] [INFO] example-domain-services ............................... SUCCESS [1:40.356s] [INFO] example-utils ......................................... SUCCESS [0.115s] [INFO] example-web-jsf-shared ................................ SUCCESS [44.605s] [INFO] example-web-jsf-servlet ............................... SUCCESS [19.458s] [INFO] Unnamed - org.esupportail:example-web-jsf-mixed:war:1.0-SNAPSHOT SUCCESS [1:12.226s] [INFO] example-web-jsf-mobile ................................ SUCCESS [4.589s] [INFO] example-web-jsf-portlet ............................... SUCCESS [37.499s] [INFO] ------------------------------------------------------------- [INFO] ------------------------------------------------------------- [INFO] BUILD SUCCESSFUL
FormationEsup-CommonsV2-ManipulationsPage14sur101[INFO] ------------------------------------------------------------- [INFO] Total time: 7 minutes 1 second [INFO] Finished at: Thu Oct 13 16:08:59 CEST 2011 [INFO] Final Memory: 56M/169M [INFO] ------------------------------------------------------------- 3.4 DémarrageExerciceN°2: Lancementd'uneapplicationMavenNousallons commencernospremierst estssurun eapplicationdetypeservlettraditionnelle.Surlemoduleweb-jsf-servlet.mvn jetty:run 8 Cliquedroitsurleprojetweb-jsf-servlet>RunAs>Mavenbuild...8 Saisirunnomdetâcheetgoals:jetty:run
FormationEsup-CommonsV2-ManipulationsPage15sur101OnobserveradanslaconsoleJava:13/10/11 16:28:41 CEST: /home/esup/workspace/esup-example/example-web-jsf-servlet 13/10/11 16:28:41 CEST: mvn -B jetty:run L'executiondoitseterminerparlesmessagessuivantsdanslaconsole:[...] 2011-10-13 16:29:53.395:INFO::Started SelectChannelConnector@0.0.0.0:8080 [INFO] Started Jetty Server Démarrerunnavigateuretserendresurhttp://localhost:8080Testerlesdifférentesoptionsdumenu
FormationEsup-CommonsV2-ManipulationsPage17sur101 Création d'un projet & Guidedudéveloppeur>Priseenmain>Créationd'unprojetàpartird'unarchetypeblankhttp://www.esup-portail.org/x/lAAABgExerciceN°3: Créationd'unprojetàpartird'unarc etypemavenEsup-commonsproposeunarchéty pequip ermetdecréerautomatiquementt outel'arborescenced'unprojetvidequirespecteralespréconisationsduconsortiumpourledéveloppementd'uneapplication.1 Créationd'unprojetmavenàpartirdeesup-blankLadocumentation:F http://www.esup-portail.org/pages/viewpage.action?pageId=100663444Lastructureduprojetvaêtreconstruiteàpartird'unarchétypemavendontvoicilesparamètres:• archetypeRepository=https://mvn.esup-portail.org/content/repositories/releases• archetypeGroupId=org.esupportail.blank• archetypeArtifactId=esup-blank-archetype• archetypeVersion=0.2.8• groupId=org.esupportail.formation• artifactId=esup-formation• package=org.esupportail.formation• version=0.0.1-SNAPSHOT1.1 ViaEclipse8 File>new>project>Project...>Maven>Mavenproject
FormationEsup-CommonsV2-ManipulationsPage18sur1018 AddArchetype8 Créationduprojet1.2 EnlignedecommandeNousallonslancerl'équivalentenlignedecommande.Pourcela,ouvrirunterminal(raccourcisurlebureau).! Pourvoussimpli fierlatâch e,récupéreretplacerlescript create-project.shdans/esup/workspaceetlelancer.Dansesup/workspace lescriptvafaireunmvn archetype:generate -B -DarchetypeRepository=https://mvn.esup-portail.org/content/repositories/releases -DarchetypeGroupId=org.esupportail.blank -DarchetypeArtifactId=esup-blank-archetype -DarchetypeVersion=0.2.8 -DgroupId=org.esupportail.formation -DartifactId=esup-formation -Dpackage=org.esupportail.formation -Dversion=0.0.1-SNAPSHOT
FormationEsup-CommonsV2-ManipulationsPage19sur101Puisdanslerépertoireduprojet/esup-formationlescriptvafaireunmvn eclipse:eclipse 8 File>import...>Maven>ExistingMavenProjects...8 Browse>choisiresup-formation>Valider8 Cochertouslespom.xml>Finish
FormationEsup-CommonsV2-ManipulationsPage20sur101Onconstatealorsqu'éclipsefaitunBuildmavendependenciesetunBuildmavenprojectEclipseaalorsconstruitplusieursprojets.Ils'agitenfaitd'unprojetracine,iciesup-formationetdel'ensembledesesmodules,iciesup-formation-xxx.& Guidedudévelopp eur>Pri seenmain>Organisationdesfichiers http://www.esup-portail.org/x/pgAABgLeprojetestalorscomplètementautonomeetdéconnectéducoreesup-commonsetdeSVN.Mavennesertqu'àgérerlesdépendances.CeprojetpourraensuiteêtrepartagéviaSVNouêtrelui-mêmedéposésurunrepositorymaven(pourd'autresprojetsquienendépendraient)etmêmepotentiellementdevenirarchetypemaven(modèledeprojet).2 Uncoupdeménage...2.1 PremierlancementSurleprojetracine:mvn install 8 Cliquedroitsurleprojetracineesup-formation>RunAs>MavenInstall[INFO] Reactor Summary: [INFO] [INFO] esup-formation .................................... SUCCESS [0.933s] [INFO] esup-formation-domain-beans ....................... SUCCESS [4.283s] [INFO] esup-formation-dao ................................ SUCCESS [1.562s] [INFO] esup-formation-utils .............................. SUCCESS [0.580s] [INFO] esup-formation-domain-services .................... SUCCESS [0.961s] [INFO] esup-formation-web-jsf-mixed ...................... SUCCESS [14.104s] [INFO] esup-formation-web-jsf-servlet .................... SUCCESS [7.868s] [INFO] esup-formation-web-jsf-mobile ..................... SUCCESS [8.539s] [INFO] esup-formation-web-jsf-portlet .................... SUCCESS [8.928s] [INFO] esup-formation-web-springmvc-servlet .............. SUCCESS [4.476s] [INFO] esup-formation-web-springmvc-portlet .............. SUCCESS [10.112s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS
FormationEsup-CommonsV2-ManipulationsPage21sur101Silatraceestunpeudifférenteetfaitréférenceàdesmodulesunnamed,c'estparcequesurlamachinevirtuelleonutiliseMaven2quirecommandedepréciserunebalise
FormationEsup-CommonsV2-ManipulationsPage22sur1012.2 MénagedansleslibrairiesJSFStopperleserveur.Danslemodule web-jsf-servlet lefich ier /src/main/webapp/stylesheets/welcome.xhtmlôtertouteslesdéclarationsetlesutilisationsdeslibrairiesprimefaces,tomahawk(corps+déclaration)etutiliserplutôtlesbalisesJSFstandard.Onôtedonclesdéclarationsdeslibrairiestomahawk,primefaces,esupportail:• http://primefaces.prime.com.tr/ui• http://commons.esup-portail.org• http://myfaces.apache.org/tomahawkOnlaisselesdéclarationsdeslibrairiesJSFstandard:• http://java.sun.com/jsf/core• http://java.sun.com/jsf/facelets• http://java.sun.com/jsf/htmlOnpour rafairedemêmedan stemplate.xhtml,_include/_header.xhtmletexception/exception.xhtmlOterlabaliseprimefacesdansexception.xhtmlenremplaçant...
FormationEsup-CommonsV2-ManipulationsPage23sur1012.3 MénagedesmodulesinutilesEnfin,supprimerles modulesdontnousnenousservironspasaucours decette formationàsavoir:• esup-formation-web-jsf-mixed• esup-formation-web-springmvc-servlet• esup-formation-web-springmvc-portletPuisdanspom.xmlduprojetracineesup-formation,ôteroucommenterlesmodulesfilscorrespondants:
FormationEsup-CommonsV2-ManipulationsPage24sur101 Beans Spring & Guidedudéveloppeur>Priseenmain>LesbeansSpringhttp://www.esup-portail.org/x/qAAABg1 Lefic ierdeconfigurationprincipalSpringpermetdecréerdesobjets(appelésalorsbeans)enlesdéclarantdansunfichierdeconfigurationXML.Lefichierdeconfigurationprincipalestdéclarédanslefichierweb.xml sousformed'unparamètredel'application.Ilsetrouveradoncdanslemoduledevuequiseralancé.Ouvrirparexempledanslemoduleweb-jsf-servletlefichier src/main/resources/properties/applicationContext.xml Dansesup-commonscefichie rdeconfigurationprin cipalco ntientseulementdesinclusionsdefichiersdeconfigurationsspécialiséspardomaineL'importdesdifférentsfichiers
FormationEsup-CommonsV2-ManipulationsPage25sur101Exemple:
ansunfichi rOuvrirlefichiersrc/main/resources/properties/smtp/smtp.xml onremarqu edesparamètresexternalisésparl'intermédiaired'unevariable.Exemple:
ronfigur rdespringproposeunmécanismedesurchargedesfichiersdepropriét és.Onvoi tainsidansl'exemple l'utilisationd'unfichier/properties/defaults.propertiesquicontiendralaconfiguration pardéfautdel'application.Ilsuf firaalorsdesurcharger dansleficher/properties/config.propertieslesparamètresquineconviennentpasdufichier/properties/defaults.properties.Onconstatequeconfig.propertiesestvide.Eneffet,pardéfautuneapplicationviergeutiliselesparamètrespardéfaut.ExerciceN°4: Instanciationd'unbeansimpleL'objectifdecetexerciceestdecréerunbeansimpleetd'yinjecterlesvaleursdesattributsgrâceàspring.Dansdomain-beansajouterlebeanTaskpackage org.esupportail.formation.domain.beans; public class Task{ private boolean publicTask; private String title; private String description; public String getTitle() { return title;
FormationEsup-CommonsV2-ManipulationsPage26sur101 } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public boolean isPublicTask() { return publicTask; } public void setPublicTask(boolean publicTask) { this.publicTask = publicTask; } } ! RécupérerlefichierTask.java-exo4Déclareruneinsta ncedecebeandanssrc/main/resources/properties/web/beans.xml
FormationEsup-CommonsV2-ManipulationsPage27sur101[...] public class SessionController extends AbstractDomainAwareBean { [...] @Override public void afterPropertiesSetInternal() { [...] System.out.println("Test injection => "+task.getTitle()+" "+task.getDescription()); } [...] Surleprojetracine:mvn clean install Surlemoduleweb-jsf-servlet.mvn jetty:run Seconnectersurl'applicationpourinstancierleS ssionontroll r.Pourcela,lancerdansunnavigateurF http://localhost:8080/Ontrouveraalorsdansleslogs:Test injection => titre 1 description blabla 3 AccèsauxparamètresdeconfigurationExerciceN°5: Personnalisationdesconfigurationsgrâceàl'injectionDanscetexercicenousallonsobserverlefonctionnementglobalduparamétraged'uneapplicationetmodifierpourl'exemplelaconfigurationdusystèmed'authentification(quiseravuplustard)grâceauxmécanismesd'injectionspring.Danslemoduledomain-services vérifierdans lefichiersrc/main/resources/META-INF/esup-formation-domain-services-auth.xmlquelaméthod ed'auth entificationestbie n"offline»(utilisationdelaclasseorg. supportail.commons.s rvic s.auth ntication.Offlin Fix
Us rAuth nticationS rvic auniveaudeauthenticator).Oncons tatequel'identifiantdubeanréférencéest indiquédans unevariable${auth.bean}quiseradéclaréedanssrc/main/resources/defaults.propertiesdumoduleweb-jsf-servletquiserasurchargéparconfig.properties.Changerleloginquiserapositionnéendurpardéfautetletyped'authentificationquiserasimulé.Exemple:
FormationEsup-CommonsV2-ManipulationsPage28sur101Oncons tatequedanssrc/main/resources/properties/misc/application.xml onpeutparamétrerlaversiondel'application.Changerlenumérodelaversion.
FormationEsup-CommonsV2-ManipulationsPage29sur101 Gestion des Logs et tests unitaires 1 GestiondeslogsEsup-commonsutiliselalibrairie standar dcommons-loggingd'Apachequipermetd'utiliserdifférentsmécanismesdelog(standardJava,Log4j,etc.).1.1 UtilisationdanslecodeJavaPourpouvoirut iliserun loggerdansuneclassedevot reapplicat ionvousdevezledéfinir.Suivantlecas,vousaurezdeuxdéfinitions.Exemple:private static final Logger LOGGER = new LoggerImpl(NonClasse.class); ouprivate final Logger logger = new LoggerImpl(getClass()); Lepremier exempleestadaptéà l'utilisationd'un loggeràl'i ntérieurd'uneclass eutilitaireconstituéedeméthodes définiesstatic.Lesecond exempleestadaptéaux classesdynamiques.Dans cecasl'utilisationdegetClas s()permetd'avo iruneinformationsurlaclasseconcrèteutilisée.C'estparticulièrementutileencasd'héritagedeclasses.EnsuitevouspouvezutiliserceloggerdansvosméthodespourloguerenmodeTRACE,DEBUG,INFO,WARNouERROR.Exemple:logger.error("Nous avons un problème"); AfindenepaspénaliserlesperformancesaveclagestiondeslogsenmodeDEBUGetTRACEilestconseillédetesterleuractivation.Exemple:if (logger.isDebugEnabled()) { logger.debug("set language " + locale + " for user '" + currentUser.getId() + "'"); } 1.2 ActivationdumécanismedelogLemécanis medegestiondeslogse stconfi gurédanslefichiersrc/main/resources/log4j.propertiesdumodule web-jsf-servletDansconfig.propertiesparamétrerlagestiondeslogsàvotreconvenance.Ajouterparexemple:log.level=DEBUG log.output=stdout 2 LestestunitairesLestestsunitairessont(oudevraientêtre!)unepartieimportantedetouteapplicationJava.
FormationEsup-CommonsV2-ManipulationsPage30sur1012.1 ExecutiondestestsunitairesviaMavenMavenintègrecomplètementlestestsunitairesdanslecyclededéveloppement.Pourexécuterl'ensembledestestsunitaires,onappellelaphasetestducycledevie:mvn test ExerciceN°6: TestunitairesimpleAfindevoircommentmavenintègrelagestiondestestsunitairesnousallonsmettreenplaceuntestunitairesimplesurlebeanTask.Danslefichierpom.xmldumoduledomain-beansajouterladépendanceversJUnit.
FormationEsup-CommonsV2-ManipulationsPage31sur101Onconstatealorsdanslaconsole:Running org.esupportail.formation.domain.beans.TaskTest [...] Failed tests: testSetTitle(org.esupportail.formation.domain.beans.TaskTest): Not yet implemented [...] Tests run: 2, Failures: 2, Errors: 0, Skipped: 0 [...] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.7.2:test (default-test) on project esup-formation-domain-beans: There are test failures. Etsiontentedecompileroulancerl'applicationonobtientlamêmeerreur:• Surlemoduleousurleprojetracinemvn clean install • Surlemoduleweb-jsf-servletmvn jetty:run Eneffet,mavenexigequel'ensembledestestsunitairessoitvalidéavantdepoursuivre.Ajoutermaintenantuntestquipasse(ouquipeutpasserpourêtreexact!)@Test public void testSetTitle() { Task t=new Task(); t.setTitle("test titre"); assertEquals("test titre",t.getTitle()); } EtlàçapasseRunning org.esupportail.formation.domain.beans.TaskTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.051 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 Ilesttoujourspossibled'indiquerexplicitementàmavend'ignorerlestests• Enlignedecommande-Dmaven.test.skip=true ou-DskipTests=true • Auniveaudufichierpom.xml
FormationEsup-CommonsV2-ManipulationsPage32sur1018 FenêtreRun>Runconfigurations>cocherSkipT stExerciceN°7: TestunitaireavancéOnsouhai teparexempletesterquel 'authentica torinjectéestbien dela classeAuthenticatorImpl.Cetestestcomplètementabsurdedansuncasréelmaisilvanouspermettredevoircommentlanc erdestestsenmo debatch(horsconte neurJ2EE)dépendantd'unearborescencedefichiersdeconfigurationstraditionnellementgérésparleconteneurJ2EEdansuncontexteweb.Démarrercommel'exerciceprécédentdanslemoduledomain-servicesCréeruneclassedetestsurAuth nticatorpackage org.esupportail.formation.domain; import org.esupportail.formation.services.auth.Authenticator; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; [...] public class AuthenticatorTest { @Autowired private Authenticator authenticator; @Test public void testSetAuthenticationService() { Assert.assertEquals("org.esupportail.formation.services.auth.AuthenticatorImpl",authenticator.getClass().getName()); } } Danssrc/test/resources/META-INF(àcréer)créerunfichier deconfiguration springsimilaireàapplicationContex.xml(testApplicationContext.xmlparexemple)quicontiendra:
FormationEsup-CommonsV2-ManipulationsPage33sur101
Us rAuth nticationS rvic Pourcela,ondéclareragetAuthenticationService()deAuth nticatorcommeméthodepublicetnonplusprotected:public AuthenticationService getAuthenticationService() { return authenticationService; } ...etontestera:Assert.assertEquals("org.esupportail.commons.services.authentication.OfflineFixedUserAuthenticationService",authenticator.getAuthenticationService().getClass().getName());
FormationEsup-CommonsV2-ManipulationsPage34sur1012.2 ExecutiondestestsunitairesdansEclipseEclipsepermetdelancerdirectementuntestunitairegrâceàun:8 Cliquedroitsurlaclassedetest>Runas>JUnitTestLerésultatestalorsvisuel...
FormationEsup-CommonsV2-ManipulationsPage35sur101 Accès aux données & Guidedudéveloppe ur>Dév eloppementd'applications>Accèsaux donnéeshttp://www.esup-portail.org/x/zwAABgExerciceN°8: Créationd'unobjetmétiersimple.L'objectifdecepremierexerciceestdecréerl'objetmétierreprésentantunetâcheetdemettreenplacelesmécanismesd'écrituresetlectureenbasededonnée.PourcelaonutiliseraunebasededonnéeembarquéeHSQL.1 L'objetmétierCréerunobjetmétierquiseramappéenbase.Danslepom.xmldumoduledomain-beansajouterladépendanceverslemoduleJPAdeesup-commons.
ao.AbstractG n ricJPA-aoS rvic ainsiquesoninterface-aoS rvic quidevraseprésentercommesuit: package org.esupportail.formation.dao; import java.io.Serializable; import java.util.List; import org.esupportail.formation.domain.beans.Task;
FormationEsup-CommonsV2-ManipulationsPage36sur101 /** * The DAO service interface. */ public interface DaoService extends Serializable { /** * Get all public task. */ public List
FormationEsup-CommonsV2-ManipulationsPage37sur101
aoS rvic dansMETA-INF/esup-formation-domain-services-domain.xml vic >permetdepréciserlanaturedelatransaction.Icionprécise,viapropagation="REQUIRED"quel'onveutcréerunetransaction,siellen'estpasencoreprésente,surtouteslesméthodesdontlenomcommenceparadd,deleteouupdate.Danslefichiergénéraldepropriétésdumoduledevuequiserautilisé(iciweb-jsf-servlet)src/main/resources/properties/config.propertiesconfigurerla connexionàlabasededonnées(cf.variablesutiliséesdansdao-dao.xml)#################################################################### # Database jdbc.connection.driver_class=org.hsqldb.jdbcDriver jdbc.connection.url=jdbc:hsqldb:file:formationData jdbc.connection.username=sa jdbc.connection.password= jndi.datasource=jdbc/formationDB # JNDI/JDBC # for JDBC datasource.bean=JDBCDataSource # for JNDI datasource.bean=JNDIDataSource datasource.bean=JDBCDataSource jpa.database.type=HSQL FormationEsup-CommonsV2-ManipulationsPage39sur101Enfin,sicelan'apasétéfaitajouterl'importdufichierdepropriétésDAO FormationEsup-CommonsV2-ManipulationsPage40sur101"OK"s'affichelaméthodeaétéappeléeDanslaconsoleona...Hibernate: select task0_.id as id0_0_, task0_.date as date0_0_, task0_.description as descript3_0_0_, task0_.publicTask as publicTask0_0_, task0_.title as title0_0_ from Task task0_ where task0_.id=? Hibernate: insert into Task (id, date, description, publicTask, title) values (null, ?, ?, ?, ?) Hibernate: call identity() ...cequisembledirequelatâcheaétéajoutée.DansEclipsefaireunrefreshsurweb-jsf-servlet.Onconstateque3fichiersontétécréésàlaracinedumodule:DansformationData.logouformationData.scriptontrouvelescriptdecréationdelabasegénéréàpartirdecequ'onadéclaréparannotationsJPA.CREATE SCHEMA PUBLIC AUTHORIZATION DBA CREATE MEMORY TABLE TASK(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,DATE TIMESTAMP,DESCRIPTION VARCHAR(255),PUBLICTASK BOOLEAN NOT NULL,TITLE VARCHAR(255) NOT NULL) ALTER TABLE TASK ALTER COLUMN ID RESTART WITH 2 CREATE USER SA PASSWORD "" GRANT DBA TO SA SET WRITE_DELAY 10 SET SCHEMA PUBLIC Enrevanche,ilnecontientpaslesdonnées.Sionstoppejetty,onn'atoujourspasdedonnéesdanscefichier.OnredémarreetlàonaINSERT INTO TASK VALUES(1,'2011-07-27 13:17:27.957000000',NULL,TRUE,'titre de test') Enfait,touteslesactionsfaitesenbasesontd'abordconservéestemporairementdansunfichierdelogformationData.log.Achaquedémarrageleslogssontrejouésetl'étatdelabaseestalorsenregistrédansformationData.script.Ajouterlarécupérationdel'ensembledestâchesenbasedanslaméthodegetTestDao()etlelisterdanslaconsoleList FormationEsup-CommonsV2-ManipulationsPage41sur101 logger.debug(t.getId()+" : "+t.getTitle()); } Ondéclareraleloggerprivate final Logger logger = new LoggerImpl(getClass()); OndoitalorsretrouverleslignessuivantesHibernate: select task0_.id as id0_, task0_.date as date0_, task0_.description as descript3_0_, task0_.publicTask as publicTask0_, task0_.title as title0_ from Task task0_ 2011-11-09 16:56:02,678 DEBUG [org.esupportail.formation.web.controllers.TaskController] - 1 : titre de test ExerciceN°9: Créationd'unerelationentreobjetsmétiersPardéfaut, ontrouve danslemodule domain-beanslaclas seUser.Nousallons maintenantgérercetyped'objetenbaseetajouterunerelationavecl'objetTask.Ils'agiradoncd'ajouterlapropriétéownerquiseraleUserquiacréélatâche.Pourallerplusloin:• Ajouterettesterlamodificationd'uneTâche• Ajouterettesterlasuppressiond'uneTâche• Ajouterlarecherchedestâchesd'unuser• Faireensortequelorsqu'onsupprimeunUserenbase,l'ensembledesestâchessoientsuppriméeségalementDansUs r :• Ajouteridcommeidentifiantgénéréautomatiquementgrâceàl'annotation@GeneratedValue • Nestockerqueid,etloginlesautrespropriétésserontignoréesgrâceà@Transient • AjouterlebeanUs rdansdao-persistence.xmlDansTask• AjouterlarelationsurunepropriétéUserownerenutilisantl'annotationManyToOne(optional = true) Dansdomain-servicesetdao:• AjouterlesaccèsàlapersistancedesobjetsUs r(add,remove,etc.)TesterenlogantcommeprécédemmentExerciceN°10: Testdelacouc edomaindansuntestunitairePourvaliderl'intégritédecettecouched'accèsauxdonnéesquiestamenéeàchangersouventaucoursdu développementd'uneap plication,onajo uteraquelquestestsunitaires.(Exercicefacultatif)CréeruntestCasesur omainS rvic quipourraressembleràça:package org.esupportail.formation.domain; import java.util.Date; import java.util.List; import junit.framework.Assert; FormationEsup-CommonsV2-ManipulationsPage42sur101 import org.esupportail.formation.domain.beans.Task; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath*:META-INF/testApplicationContext.xml") public class DomainServiceTest { @Autowired DomainService domainService; @Test public void testAddTask() { Task t=new Task(true, "Test de tache", "Tache de test", new Date()); domainService.addTask(t); List FormationEsup-CommonsV2-ManipulationsPage43sur101 Les vues Esup-commonslaisselalibertéaudéveloppeurdechoisirlatechnologiedevuequ'ilsouhaite:• SpringMVC• JavaFaces:JSFCesdernièresétantsensiblementdifférentes,nousnelesdétailleronspasdanscetteséancelesdifférentestechnologies.Ellespourrontfairel'objetdesessionsdeformationdesecondniveauspécialiséessurl'uneoul'autredecestechnologies.& Guidedudévelopp eur>Pri seenmain>Lesvueshttp://www.esup-portail.org/x/KYA6Bw1 JSFetseslibrairies& Guidedudéveloppe ur>Pri seenmain>JSFhttp://www.esup-portail.org/x/qgAABgPourcommenceretresterrelativementprochedecequel'onpouvaitfaireenesup-commonsV1nousallonsutiliserJSF.Cependant,nousnouslimiteronsauxlibrairiesJSFstandardetnousn'utiliserons pasleslibrairiesplus évoluéestellesquetomahawk,primefacesetc.Danslesprochainschapitresnousallonsessentiellementtravaillersurlemoduledevue.DansEclipse,pouractiverl'autocomplétiondanslespagesJSFoncocheradansProject>Properties>ProjectFacets>JavaserverFaces2 Facelet& Guidedudévelopp eur>Pri seenmain>JSF>Facelethttp://www.esup-portail.org/x/sAAABg FormationEsup-CommonsV2-ManipulationsPage44sur101ExerciceN°11: Ajoutd'unmenuviauntemplatefaceletOnsouhaiteajouterunmenuetquiserafixepourtouteslespagesdenotreapplication.Pourcelanousallonscréeruntemplatefaceletquel'onchaînerasurletemplateproposépardéfaut.Seplacerdansl'arborescencesrc/main/webapps/stylesheetsDanscréerunfichierpageTemplate.xhtmlquilui-mêmeappeleratemplate.xhtmletdanslequelonnedéfiniraquelemenuquel'onsouhaitefixe FormationEsup-CommonsV2-ManipulationsPage45sur101 xmlns:h="http://java.sun.com/jsf/html" template="/stylesheets/pageTemplate.xhtml"> FormationEsup-CommonsV2-ManipulationsPage46sur101 } Danssrc/main/webapps/stylesheets/taskManager.xhtmlonauraceci: FormationEsup-CommonsV2-ManipulationsPage47sur101 getDomainService().addUser(user1); } //On ajoute la tâche getDomainService().addTask(new Task(true, "titre de tache bidon", "", new Date(), user1)); } public void supprimeTout() { List FormationEsup-CommonsV2-ManipulationsPage48sur101Danssrc/main/javadeweb-jsp-servletajouterlesméthodessortTasksByDate()etsortTasksByTitle()àorg. supportail.formation.w b.controll rs.Taskontroll r public void sortTasksByDate() { if (this.sortedTasks==null) sortedTasks = getDomainService().getTasks(); Collections.sort(sortedTasks, new TaskDateComparator()); } public void sortTasksByTitle() { if (this.sortedTasks==null) sortedTasks = getDomainService().getTasks(); Collections.sort(sortedTasks, new TaskTitleComparator()); } Enfinajouterlesboutonsdetriàlavue FormationEsup-CommonsV2-ManipulationsPage49sur101 Internationalisation & Guidedudéveloppe ur>Dév eloppementd'applications>Internationalisationhttp://www.esup-portail.org/x/xwAABg1 ConfigurationL'internationalisationestdéfiniedanslefichierdeconfigurationsrc/main/resources/properties/i18n/i18n.xml.Onytrouveraparexemple: FormationEsup-CommonsV2-ManipulationsPage50sur1012.2 Utilisation2.2.1 DucôtédelavueDanssrc/main/webapps/stylesheets/taskManager.xhtmlondéclareralesclésdetraductiondelamanièresuivante: FormationEsup-CommonsV2-ManipulationsPage51sur1014 DéfinitiondeslangagesExerciceN°16: Ajoutd'unlangageAjouterlelangagejaponaisettraduiretoutel'applicationJ.L'ajoutd'unlangagesefaitdanslefichierdeconfigurationsrc/main/webapps/WEB-INF/jsf/faces-config.xml.Ilsuffitensuited'écrirelebundlecorrespondant.5 Lesmessagesd'erreurpardéfautdeJSFDanssrc/main/webapps/WEB-INF/jsf/faces-config.xmlonremarque FormationEsup-CommonsV2-ManipulationsPage52sur101 Formulaires et Validation & Guidedud éveloppe ur>Priseenmain>JSF>Ecriture desfor mulaireshttp://www.esup-portail.org/x/tQAABg1 FormulairesetbindingExerciceN°17: Créationd'unformulairedesaisiesimpleNousallonsajouterunformulairedesaisied'unenouvelletâche.Lesdonnéessaisiesàtraversleformulairevontêtrebindéessurunobjet.Dansorg. supportail.formation.w b.controll rs.Taskontroll rajouterunepropriétécurrentTaskdetypeTaskainsiquelesaccesseurscorrespondants. private Task currentTask=null; [...] public Task getCurrentTask() { return currentTask; } public void setCurrentTask(Task currentTask) { this.currentTask = currentTask; } Nousallons d'abordcréerunformula iresimplequiper metlasai siedutitre(obligatoire),deladescriptionetducaractèrepublicounondelatâche.CréerdeformulairedanstaskManager.xhtml.Onferaafficherlesmessagesd'erreurcorrespondantàchaquechamp. FormationEsup-CommonsV2-ManipulationsPage53sur101 FormationEsup-CommonsV2-ManipulationsPage54sur101Danscertainscas,ilestaussinécessairededéfinirdesconvertisseursmanuellement.C'estnotammentlecaspourleslistesdéroulantes.ExerciceN°19: Créationd'unconvertisseurAjouterunelistedéroulantepourlechoixdel'utilisateurpropriétairedelatâche.Lalisteproposeral'ensembledesUsersenbasededonnées.Onsouhaitemapperdirectementl 'utilisateurquiserasél ectionnéavec lapropriétéownerdubeantaskmappéauformulaire.D'oùlanécessitéd'unconvertisseurquipourunloginfournileUsercorrespondantenbaseetpourunUserlelogincorrespondantPourcela,ajouterunélément FormationEsup-CommonsV2-ManipulationsPage55sur101Onsouhaiteallerrechercherl'objetUs renbasededonnées.Onn'utiliseralaméthodegetUser()de omainS rvic quel'oninjecteravialadéclarationdesbeansSpring.Déclarerceconvertisseurdansconverters.xml.