[PDF] Formation Esup-Commons V2 - Exercices et Manipulations - 0.0.3





Previous PDF Next PDF



Applications Web Applications Web

Sans implémenter une méthode doHead proposez une implémentation pour supporter cette méthode. Page 31. 31. Servlet : Exercices Utiliser java.rmi.server.UID() ...



Exercices sur Servlets/JSP

Exercices servlets/JSP. Le langage Java. Exercice 1 (1/3). • Ecrire la page html suivante : • Le menu est composé de Java SkyLine Java World



Exercice dapplication en Java RMI

Sachant que la servlet devra transmettre les informations saisies à un composant EJB écrire la classe correspondant à un EJB Session qui consiste à récupérer 



Travaux Pratiques Une belle servlet

29 oct. 2006 Le corrigé des exercices 1 à 6 est disponible ! Exercice 1 ... http://java.sun.com/products/servlet/. JSP http://java.sun.com/products/jsp ...



Servlets et JSP : la JSTL

servlets ou les autres pages JSP (exemple ci-dessous). Vérifiez le code généré par cette balise. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>.



TP 4A - Java Entreprise Edition. Création de servlets (get et session)

Le but de ce TP est que vous vous familiarisez avec la notion de servlet et leur déploiement dans un serveur d'application Tomcat. Exercice 1 (Première 



Créez votre application web avec Java EE

31 janv. 2013 représentés en Java EE par des servlets mais cela ne signifie pas ... correction. Ce n'est pas la seule manière de faire. Ne vous inquiétez ...



Conception dapplications en Java/JEE

CORRIGÉS DES EXERCICES. 365. BIBLIOGRAPHIE. 401. INDEX. 403. Page 7. Avant-propos (servlet JSP



Conception dapplications en Java/JEE

non autorisée est un délit. Table des matières. VII. 17.3 Programmation. 343. CONCLUSION. 383. CORRIGÉS DES EXERCICES servlet JSP



Exercices sur Servlets/JSP

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.



Java-Design-Patterns.pdf

7.4 Java'sbuilt-inObserverPattern . 22.5 DecoratorDesignPatterninJava . ... java.util.logging.Logger#log(). • javax.servlet.Filter#doFilter() ...



Le livre de JAVA premier langage Avec 109 exercices corrigés

JAVA premier langage. Avec 109 exercices corrigés. 12e édition mise à jour avec Java 9. Un best-seller qui a déjà conquis plus de 50 000 étudiants !



XML for DB2 Information Integration nformation Integration

16-10 Creating DADX Web services: XML to Java mapping . . . . . . . . . . . . . 492 10-4 Servlet configuration information that goes into web.xml.



Spring Boot Reference Guide

Registering Servlets Filters



Java développement de servlets et JSP

plateforme Java EE. Découvrez les API JSP/Servlet le framework MVC JSF 2



Applications Web

(voir l'API Servlets). Page 29. 29. Servlet : HttpServletRequest. Page 30. 30. Servlet : Exercices. 1. Quelles possibilités s'offrent à nous si on ne veut pas 



DATABASE MANAGEMENT SYSTEMS SOLUTIONS MANUAL

10000 records Exercise 1.1 Why would you choose a database system instead of simply storing data ... Servlets are pieces of Java code that run on the middle.



Wampserver Manual

s'initier à MySQL Aux développeurs Java et PHP Sur www.editions-eyrolles.com/dl/0067379. Téléchargez le code source des exemples et le corrigé des exercices 



Wampserver Manual

Web Coding Bible (HTML CSS



Exercices sur Servlets/JSP

Exercices servlets/JSP Le langage Java Utiliser HttpSession (1/2) • Dans un premier temps on récupère la session (objet de la classe HttpSession ) par HttpSession getSession() lancé sur request • Cet appel retourne la session courante associée à la requête Si la session n’existe pas elle sera créée



Exercices JAVA - Cours/Formations informatique à

175 exercices corrigés pour maîtriser Java Conçu pour les étudiants en informatique ce recueil d’exercices corrigés est le complément idéal de Programmer en Java du même auteur ou de tout autre ouvrage d’initiation au langage Java Cette nouvelle édition tient compte des nouveautés de Java 8 publié en mars 2014



Servlets et JSP : la JSTL

Servlets et JSP : la JSTL 1 Utiliser le langage d’expression (EL) Depuis la version 2 0 des JSP il est possible de placer `a n’importe quel endroit d’une page JSP des expressions qui sont ´evalu´ees et remplac´ees par le r´esultat de leur ´evaluation La syntaxe est la suivante : $ { expression } Voila quelques exemples d



Java - Servlets java-servl Java - Servlets

Java - Servlets - 2 Introduction aux Servlets java-servl-5 Internet et Education © TECFA 17/1/01 •Copie de l’archive servlet jar: http://tecfa unige ch/guides/java/classes/servlet jar •Script qui inialise l’environnement sous Unix (+ MySQL + xerces) source /local/env/java12-sql-xml-ser csh



Solutions aux exercices du chapitre 10 : Programmation Java

at java util concurrent ThreadPoolExecutor addWorker(ThreadPoolExecutor java:950) at java util concurrent ThreadPoolExecutor execute(ThreadPoolExecutor java:1368) at java util concurrent AbstractExecutorService submit(AbstractExecutorService java:134) at Sommation sommation_pr(Sommation java:25) at Sommation sommation_pr(Sommation java:26)



Conception d’applications en Java/JEE - Dunod

IV Conception d’applications en Java/JEE 2 19 Enterprise JavaBeans (EJB) 40 2 20 Java Persistency API (JPA) 46 2 21 Services Web 49 2 22 JavaServer Faces (JSF) et interfaces riches 53 2 23 Packaging des applications Web JEE 55 CHAPITRE3•UML 3 1 Introduction 61 3 2 Diagramme de classes 62 3 3 Diagramme d’objets 66 3 4 Diagramme de



La programmation objet en Java - Cours et exercices corrigés

nombreux exercices corrigés font de ce livre un outil de travail indispensable Pour une plus grande interactivité le code des programmes Java de ce livre est disponible sur le web Les principaux concepts expliqués sont les suivants : – la syntaxe de base de Java ; – les notions de la programmation objet : classes encapsulation



Mlle Imene Sghaier - Technologue Pro

On se propose de faire fonctionner un programme Java dont le rôle est d’afficher le premier mot qu’on lui passe comme paramètre d’exécution Exercice 3: Créer un fichier HelloWorldWithMethod java contenant la classe HelloWorldWithMethod 2- Ajouter une méthode void Hello() qui fait l’affichage d’une chaîne de caractères exemple :



Exercices En Java 175 Exercices Corrigés Couvre Java 8 Noire

175 exercices corrigés pour maîtriser JavaConçu pour les étudiants en informatique ce recueil d'exercices corrigés est le complément idéal de Programmer en Java du même auteur ou de tout autre ouvrage d'initiation au langage Java Cette quatrième édition prend en compte les nouveautés de Java 8 avec en particulier un chapitre



Exercices En Java 175 Exercices Corrigés Couvre Java 8 By

Exercices En Java 175 Exercices Corrigés Couvre Java 8 By Claude Delannoy Java Corrig Recevez vos 1600 de bonus de casino online book library thatswhatsup me online book library Telecharger prediction of detonation characteristics of Td corrig Tax gold forward sales while you can cromosomacinco Examens corrigs PDF Tlcharger doc



JAVA TP Banque - University of Paris-Est Marne-la-Vallée

Exercice 2 : Un tableau en java import java util *; public class TableauMontants { public static void main(String args[]){ double[] tab; tab = new double[] {10 687 35 -54 00 0 54 85}; for (int i = 0 ; i < tab length ; i++){ System out println(tab[i]); } Arrays sort(tab); System out println(Arrays toString(tab)); } }



Searches related to exercices corrigés servlets java filetype:pdf

the Java Servlet specification Servlets can be created using the javax servlet and javax servlet http packages which are a standard part of the Java's enterprise edition an expanded version of the Java class library that supports large-scale development projects These classes implement the Java Servlet and JSP specifications

Quels sont les exercices corrigés en langage Java ?

  • Voici une liste des exercices corrigés en langage Java, des exercices progressifs et corrigés, abordant toutes les notions de programmation en Java la moitié abordent des notions isolées, afin de vérifier la compréhension de la syntaxe. L'autre moitié correspond à des exercices de synthèse, mettant en jeu des techniques un peu plus complètes.

Quels sont les différents types de méthodes de servlet?

  • Ces méthodes sont en fait appelées par la méthode service () de la classe Servlet, que l’on a pas à surcharger. Notons que sur notre exemple, la méthode doPost () appelle la méthode doGet (), ce qui est parfaitement légal. Exemple 17. Une première servlet 2.2.

Qu'est-ce que le principe de fonctionnement d'une servlet?

  • Ce principe de fonctionnement évite d'instancier un objet de type servlet à chaque requête et permet de maintenir un ensemble de ressources actives telles qu'une connexion à une base de données. Le serveur crée un objet qui représente la requête http ainsi que l'objet qui contiendra la réponse et les envoie à la servlet

Quelle est la meilleure solution pour l'utilisation d'une servlet?

  • La première solution permet un usage plus facile dans toute la servlet. Sans l'appel à la méthode héritée lors d'une redéfinition, la méthode getInitParameter () de la servlet lèvera une exception de type NullPointerException. 72.4.2. L'analyse de la requête

Formation

Esup -Commons V2

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

u

l'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éciserunebalisedanslepom.xml.EnMaven3,cen'estplusnécéssaireNousallonscomme ncernospremierstes tssur uneappl icationdet ypeservlettraditionnelle.Surlemoduleweb-jsf-servlet.mvn jetty:run 8 Cliquedroitsurleprojetweb-jsf-servlet>RunAs>Mavenbuild...8 Saisirunnomdetâcheetgoals:jetty:runLancerlatâchejetty:rundepuisEclipseplutôtqu'enlignedecommandeoffrel'avantagedepouvoirlancerdudebuggagepasàpasetdurechargementàchaudgràceàl'utilisationdesoutilsintégrésàl'IDE.Vérifierquecelafonctionne[INFO] Started Jetty Server EtlancerdansunnavigateurF http://localhost:8080/

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... ...par... Oterlabalisetomahawkdanstemplate.xhtmlenremplaçant... ...par... OterlesobjetsRunAs>Mavenbuild...8 Saisirunnomdetâcheetgoals:installjetty:runVérifierquecelafonctionne.

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: esup-formation-dao esup-formation-utils esup-formation-domain-beans esup-formation-domain-services esup-formation-web-jsf-servlet Surleprojetracine:mvn clean install Eventuellement,faireunenouvelletâche:8 Cliquedroitsurleprojetracine>RunAs>Mavenbuild...8 Saisirunnomdetâcheetgoals:cleaninstall

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 Casdesfichiersembarquésdanslesmodulessous-jacentsAfindelimiterladuplicationdesfichiersdeconfigurationdanschaquemoduledevue.Onpeutdéciderdepositionnerdesfichiersdeconfigurationdirectementauniveaudumodulequilesutilise. Onretrou veraparexemplecesfichiersdan slemodule domain-services etplus précisémentdanssrc/main/resources/META-INFafinqu'ilsseretrouventàlaracinedufichierjargénéréàlacompilationdumodule.2 L'injectionParcourirlesdifférentsfichiersdeconfiguration.Inj ction

'un chaîn caractèr sExemple: Inj ction 'unautr b anExemple: Inj ction 'un list

FormationEsup-CommonsV2-ManipulationsPage25sur101Exemple: Ext rnalisation

ansunfichi rOuvrirlefichiersrc/main/resources/properties/smtp/smtp.xml onremarqu edesparamètresexternalisésparl'intermédiaired'unevariable.Exemple: Lavariablesmtp.interceptAllserarenseignéedansunfichierdepropriétédistinct.Cemécanismepermetdesimplifierlatâchedesexploitants,quipourrontconfigureruneapplicationdirectementenéditantdesfichiersdepropriét és,plus simplesquedesfichiersXMLdeconfigurationspring.Danslemodule web-jsf-servlet lefich iersrc/main/resources/properties/applicationContext.xml ontrouve: classpath:/properties/defaults.properties classpath:/properties/config.properties L'utilisationduProp rtyPlac hol

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 Importerbeans.xmldanssrc/main/resources/properties/applicationContext.xml Pourl'exemple,injectercebeandanss ssionontroll rdumoduleweb-jsf-servlet.Pourcela,ajouterunepropriétédetypeTaskàl'objets ssionontroll rainsiquesesaccesseurs.private Task task; [...] public Task getTask() { return task; } public void setTask(Task task) { this.task = task; } Injecterparréférencetask1dansles ssionontroll rparconfigurationSpringDanssrc/main/resources/properties/web/controllers.xml [...] The task FaireaffichercebeandanslaméthodeafterPropertiesSetInternal()des ssionontroll rimport org.esupportail.formation.domain.beans.Task; import org.esupportail.commons.utils.BeanUtils;

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: Faireafficherlaversiondel'applicationdanslaméthodeafterPropertiesSetInternal()des ssionontroll rdumoduleweb-jsf-servlet.

FormationEsup-CommonsV2-ManipulationsPage28sur101Oncons tatequedanssrc/main/resources/properties/misc/application.xml onpeutparamétrerlaversiondel'application.Changerlenumérodelaversion. The major number of the application (1 for version 1.2.3). The minor number of the application (2 for version 1.2.3). The update of the application (3 for version 1.2.3). Ensuitedanss ssionontroll rdumoduleweb-jsf-servletonconstatequeesup-commonsfournitparhéritagela méthodegetApplicationService()quinousper metd'appelerGetVersion().public void afterPropertiesSetInternal() { [...] System.out.println("Test Version => "+getApplicationService().getVersion().toString()); } Onconstatedansesup-commonsqueGetVersion()fournirabienuneconcaténationdes3numérospassésenconfiguration:public Version getVersion() { return new Version(versionMajorNumber + "." + versionMinorNumber + "." + versionUpdate); } Surlemoduleweb-jsf-servlet.mvn jetty:run Seconnectersurl'applicationpourinstancierleS ssionontroll r.Pourcela,lancerdansunnavigateur! http://localhost:8080/Ontrouveraalorsdansleslogs:Test Version => 0.0.2 Nousavonsfait ceciàtitred'e xemple.Supprimer ladéclaratio ndub eandansbeans.xmletsarécupérat iondansS ssionontroll r.Eventuellement,remettrelenumérodeversion 0.0.1.Nousnegarderonsqu ela classeTasketl'authent ificationofflinepourlasuite.

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. junit junit 4.8.2 jar test 8 cliquedroitsurleprojet>Maven>UpdatedépendenciesOnnote ral'utilisationdus copetestquiindiqueàmavenquecett elibrairieneserautiliséequepourlestestsunitairesdumodule.Decefait,ilestimpossibledegénéraliserl'utilisationdelalibrairie jUnitendéclar antladépendanceauniveaud ulemodu leracinedel'applicationpuisquelaportéerestedansleslimitesdumodule.Puiscréerlerépertoiresrc/test/java(conventionmaven)8 cliquedroitsurjava>Buildpath>BuildassourcefolderCréeruneclassedetest(testCase)surTask8 cliquedroitsurtask.java>new>other...>JUnit>JUnitTestCase8 Attention!changerlerépertoiresourceproposépardéfaut8 Next>ChoisiruneoudeuxméthodesLaisserlaclasseproposéepardéfaut(quiprovoqueunéchecàchaquefois)package org.esupportail.formation.domain.beans; import static org.junit.Assert.*; import org.junit.Test; public class TaskTest { @Test public void testSetTitle() { fail("Not yet implemented"); } @Test public void testGetDescription() { fail("Not yet implemented"); } } Lancermvn test 8 Cliquedroitsurlemodule>Runas>MavenTest

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 org.apache.maven.plugins maven-surefire-plugin true • Danseclipse

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 Sicesfi chiersimport ésutilisentdesparamètres externalisésdansunf ichierdepropriétés,copier/collercesfichiersconfig.propertiesetdefault.propertiesoucréerunfichierminimalcontenantuniquementlespropriétésnécéssaires.IlfaudraalorsajouterunpropertyConfigurer classpath:META-INF/defaults.properties classpath:META-INF/config.properties Simulerenfinletrava ilducontexted' applicationeny ajoutantles fichier sd econfigurationsnécessaires.Celasetraduiradelafaçonsuivantedanslaclassedetest [...] 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 AuthenticatorTest { [...] Pourall rplusloin...Onpourra,pourletestvérifierlaclassed'implémentationdel'auth nticationS rvic estbienOfflin Fix

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. org.esupportail esup-commons2-jpa ${esupcommons.version} provided Dansdomain-beansadapterlebeanTaskcrééprécédementenladéclarantcommeentité(@Entity)avec:• id(longgénéréenbase):Identifiant(@Idet@GeneratedValue)• title(chaineobligatoire):Titre(@Column(nullable=false))• date(typedate):Datedelimited'éxécutiondelatâche• description(typechaine):Descriptiondelatâche• publicTask(typebooleen):BooléenprécisantsilatâcheestpubliqueoupasAjouter2requêtesderécupérationdestâchesgrâceàdesannotations(@NamedQuerieset@NamedQuery)surlebeanTask:• allTasks:pourrécupérertouteslestâches.• publicTasks:pourrécupérerlestâchespubliques.! RécupérerlefichierTask.java-exo82 Lacouc eDAODanslemoduledao,créeruneclassed 'accèsDAOJPA-aoS rvic Implquiétendra org. supportail.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 getPublicTasks() ; /** * Get all task. */ public List getTasks(); /** * Add a task. * @param task */ void addTask(Task task); /** * Delete a task. * @param task */ void deleteTask(Task task); /** * Update a task. * @param task */ Task updateTask(Task task); /** * @param id * @return the Task instance that corresponds to an id. */ Task getTask(long id); } Onvaensuitedevoirajouterlesfichiersdeconfigurationnécessaires. Pourcela2façondepositionner:• Soitdanslemoduledevuequiseralancé(ex:web-jsf-servlet)àfaireàchaquemoduledevues'ilyenaplusieurs(ex:unevueportletetunevueservlet)• Soitdanslemoduledaodirectementdemanièreàavoirlaconfigurationdanslejargénéréparmavenets'assurerd'avoirlamêmechosesquelquesoitlemoduledevuelancé.Esup-commonspréconisedelocaliserlesfichiersdeconfigurationspringauplusprèsdeleurutilisationc'estàdireauniveaudumodule.Pourcela:! Récupérerlesfichiersesup-formation-dao-dao.xml-exo8etesup-formation-dao-persistence.xml-exo8.Copier/collerlesfichiersesup-formation-dao-dao.xmletesup-formation-dao-persitence.xmlverssrc/main/resources/META-INF(àcréer)enDansesup-formation-dao-dao.xmlvérifierlecheminversesup-formation-dao-persitence.xml:

FormationEsup-CommonsV2-ManipulationsPage37sur101 Onconstatedansesup-formation-dao-dao.xmlquelesparamètressontpassésparl'intermédiairedevariablesquiserontpositionnéesdanslefichierdeproperties.Onpeutd'oresetdéjàprévoirquelacouchedaoseraappeléeparlacouchedomain-services.On devradon cajouterl'import deladaodanslefich iersrc/main/resources/META-INF/esup-formation-domain-services-domain.xmldumoduledomain-servicesdelafaçonsuivante Enfinsurlemoduledaofairemvn install 3 Lacouc eServicesLacoucheservicevafaireappelàlacouchedaopourrécupérerlestâchesenbase.Danslefichierpom.xmldumoduledomain-servicesajouterladépendanceverslemoduledao org.esupportail.formation esup-formation-dao 0.0.1-SNAPSHOT jar Ajouterdans-omainS rvic Impll'attributdaoServiceetlesaccesseurscorrespondantsprivate DaoService daoService; Encasd'erreursdereconnaissancedesclassesdaogénérerànouveaulejardumoduledao.AjouterdansafterPropertiesSet()lavé rificationdel'injectioncorrectedel' objet-aoS rvic .Assert.notNull(this.daoService, "property daoService of class " + this.getClass().getName() + " can not be null"); Ajouterdans-omainS rvic etsonimplémentation-omainS rvic Impllesméthodespermettantdelisterlestâchesetd'ajouterunetâche. public List getTasks() { return daoService.getTasks(); } public void addTask(Task task) { Task tmp = daoService.getTask(task.getId()); if (tmp == null) { // task does not already exists in database logger.debug("addTask -> not found "+task.getId()); daoService.addTask(task); } else { daoService.updateTask(task); logger.debug("addTask -> found "+task.getId()); } }

aoS rvic dansMETA-INF/esup-formation-domain-services-domain.xml AinsiqueAOP(aspect-orientedprogrammingviaSpring)pourgérerlesconnexionsauxbasesdedonnéesetlestransactions. Labalisepermetdepréciserdeuxchoses:-Lepoint decoupe(pointc ut).C 'est-à-direl'empla cementoùvaêtreinsérédynamiquementlecodeAOP.L'attributexpressionpermetdepréciserquel'onvaciblertoutesles méthodes,quellequ' ensoitla signature,delaclasseDomainServiceImpldansunpackagedonclepathcommenceparorg.esupportailetfinipardomain.-Laréférenceaugestionnairedetransactionsàbranchersurcepointdecoupe.Labalise

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 4 Premierstestsd'écritureetlectureenbaseDanssrc/main/javadumoduleweb-jsp-servletcréerTaskontroll rdupackageorg. supportail.formation.w b.controll rs.Lerôleducontrôleurseraabordédanslechapitresuivantsurlesvuespackage org.esupportail.formation.web.controllers; import java.util.Date; import org.esupportail.formation.domain.beans.Task; public class TaskController extends AbstractContextAwareController { /** * VersionId */ private static final long serialVersionUID = -872218604638760392L; public String getTestDao(){ Task task=new Task(); task.setDate(new Date()); task.setTitle("titre de test"); task.setPublicTask(true); getDomainService().addTask(task); return "OK"; } } Déclarerlecontrôleurdanssrc/main/resources/properties/web/controllers.xml Etl'appelerdanssrc/main/webapps/stylesheets/welcome.xhtmlenajoutantun Surleprojetracine:mvn clean install Surlemoduleweb-jsf-servletmvn jetty:run Vérifierquecelafonctionne[INFO] Started Jetty Server etF http://localhost:8080/

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 liste=getDomainService().getTasks(); for (Task t : liste) { if (logger.isDebugEnabled())

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 listedestaches = domainService.getTasks(); //on cherche la tâche en base Task task=null; for (int i = 0; i < listedestaches.size(); i++) { if(listedestaches.get(i).getTitle().equals("Test de tache")) task=listedestaches.get(i); } Assert.assertNotNull("La tache de test créée en base n'a pas été retrouvée" , task); } } DocumentationJPA:& http://tahe.developpez.com/java/jpa/& http://www.dil.univ-mrs.fr/~massat/ens/jee/tp-JPA.html& http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html

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 Menu fixe ici Danswelcome.xhtml • supprimerladéfinitiondenavigationpuisqu'elleestdéfiniedansletemplate• remplacerletemplateutiliséparpageTemplate.xhtmlTester3 Pagesetnavigation& Guidedudéveloppeur>Priseenmain>JSF>Généralitéshttp://www.esup-portail.org/x/rgAABgExerciceN°12: Ajoutd'unenouvellepageavecrègledenavigationNousallonscréerunlienderedirectionversunenouvellepage:leTaskManagerquipermettradegérerlestâches.Nousallonsd'abordcréerunenouvellepageJSPquin'afficherarien(d'intéressant)pourl'instant.Danssrc/main/webapps/stylesheetscréerunfichier taskManager.xhtmlquiressembleraàceci:

FormationEsup-CommonsV2-ManipulationsPage45sur101 xmlns:h="http://java.sun.com/jsf/html" template="/stylesheets/pageTemplate.xhtml"> Ici le Task Manager ! Danssrc/main/javadumoduleweb-jsp-servletajouterlaméthodedoToTaskManagerPage()àorg. supportail.formation.w b.controll rs.Taskontroll r.Cetteméthoderetournelachaine"go_taskManagerPage» public String goToTaskManagerPage(){ return "go_taskManagerPage"; } Enfinonajoutelar èglede navigationd anssrc/main/webapps/WEB-INF/navigation-rules.xml. Cettedéclarationdoitpréciserquelorsquelachainego_taskManagerPageestretournéeparJSFilfautalorsredirigerverslapagetaskManager.xhtml Gestion des tâches go_taskManagerPage /stylesheets/taskManager.xhtml Testerenajoutantunliensurlapaged'accueilDanssrc/main/webapps/stylesheets/welcome.xhtmlenajoutantunlien Task Manager Labaliseestobligatoirepourun.Nousverronsplusloinlacréationdeformulaires.Necompilerquelemoduleweb-jsf-servletmvn install jetty:run VérifierquecelafonctionnePourallerplusloinfaitesensortentqueceliensoitlepremierongletdumenudenotreapplication.ExerciceN°13: Parcoursd'untableauAfficherlalistedestâchesstockéesenbaseetajouteruntripardategrâceàl'utilisationd'objetscomparateurs(quiimplémentelaclasseComparable).Danssrc/main/javadumoduleweb-jsp-servletajouterlaméthodegetTasks()àorg. supportail.formation.w b.controll rs.Taskontroll rprivate List sortedTasks=null; [...] public List getTasks() { if (this.sortedTasks==null) sortedTasks = getDomainService().getTasks(); return sortedTasks;

FormationEsup-CommonsV2-ManipulationsPage46sur101 } Danssrc/main/webapps/stylesheets/taskManager.xhtmlonauraceci: Améliorerlerendu......enajoutantlesentêtesauxcolonnesdanslesbalises ...entest antsilalistecontien tdesélé mentsdan slecascontraire onafficheraunmessage:rendered="#{taskController.tasks != null and !empty taskController.tasks}" ...enajoutantunboutonquipermetd'ajouterdestâchesfacticesdécritesendurainsiqu'unboutonquisupprimetout. Etdanssrc/main/javadeweb-jsp-servlet,ajouterlesméthodesaddFakeTask()etsupprimerTout()àorg. supportail.formation.w b.controll rs.Taskontroll rpublic void addFakeTask() { User user1=getDomainService().getUser("cbissler"); if(user1 == null){ user1=new User(); user1.setLogin("cbissler");

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 listeTask=getDomainService().getTasks(); for (Task t : listeTask) { getDomainService().deleteTask(t); } List listeUser=getDomainService().getUsers(); for (User u : listeUser) { getDomainService().deleteUser(u); } } ...entriantlestâchesparordrealphabétique,dateàl'aidedecomparateursPourceladanslemoduleutilsajouterladépendancedanspom.xml org.esupportail.formation esup-formation-domain-beans 0.0.1-SNAPSHOT jar Surlemoduleutilsmvn install Danssrc/main/javadumoduleutils, créerlesclassesTask-at omparatoretTaskTitl omparatoràl'imagedecelle-ci:package org.esupportail.formation.utils; import java.util.Comparator; import org.esupportail.formation.domain.beans.Task; public class TaskDateComparator implements Comparator { public int compare(Task t1, Task t2) { int result = t1.getDate().compareTo(t2.getDate()); //si la date est identique on trie ensuite par le titre if(result==0) result = t1.getTitle().compareTo(t2.getTitle()); return result; } } Surlemoduleutils refairemvn install Ensuite,ilvafalloirfairedépendremoduleweb-jsp-servletdeutilsenajoutantdanslepom.xml dumodulemoduleweb-jsp-servlet org.esupportail.formation esup-formation-utils 0.0.1-SNAPSHOT

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: classpath:properties/i18n/bundles/Custom classpath:properties/i18n/bundles/Messages classpath:properties/i18n/bundles/Commons 2 DéclarationetutilisationdesentréesExerciceN°14: DéclarationetutilisationdesentréesAdapterlavuetaskManager.xhtmlprécédementcréedemanièreàceq uetousleslibellésdel'interfacesoientexternalisésetnonplusen"durs»danslespagesJSP.2.1 Déclaration2.1.1 ViaunéditeurdetexteParexemplenousallonsajouterparexemplel'entréeTASK.MANAGER.NOTASKSdanslefichierbundles/Messages_fr.properties.TASK.MANAGER.NOTASKS = La liste de t\u00E2che est vide 2.1.2 ViaResourceBundleEditordanseclipseEditerbundles/Messages_fr.propertiesavecresourceBundleEditor8 Cliquedroitsurlefichier>openwith...>éditeurdereourceBundle

FormationEsup-CommonsV2-ManipulationsPage50sur1012.2 Utilisation2.2.1 DucôtédelavueDanssrc/main/webapps/stylesheets/taskManager.xhtmlondéclareralesclésdetraductiondelamanièresuivante:Contenus>Langues>Choisir...Tester2.2.2 DucôtéducodeJavaEssayermaintenantd'envoyerdirectementunechainetraduitedepuislecontrôleurpublic String getChaineTraduite(){ return getString("TASK.MANAGER.NOTASKS"); } Et

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.xmlonremarqueproperties.i18n.bundles.JsfMessages ...qu iindiqueq uelesmessagesutilisés parJFacessontdéclarésdansproperties/i18n/bundles/JsfMessages. Onnoteradansl'exempleci-après,l'usagedupassagedevariables.

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 ! RécupérerlefichiertaskManager.xhtml-exo17EnfindansTaskontroll rajouterlaméthodeaddTask()appeléeàlavalidationd uformulaireetquiajoutelatâchesaisieenbasededonnées:public void addTask() { getDomainService().addTask(currentTask); currentTask=new Task(); sortedTasks = getDomainService().getTasks(); } Surlemoduleweb-jsf-servletmvn install jetty:run Testerleformulaireetl'affichagedeserreursdesaisie.2 LesconvertisseursJSFproposedesconvertisseu rspardéfaut( DateTimeConverteretNumberConverter).Ceux-cipermettentdetransformerunedateouunnombresuivantdifférentesrègles.ExerciceN°18: Utilisationd'unconvertisseurprédéfiniAjouterlechampdesai siedel adateetconvertircetypecomplexegrâ ceauconvertisseurDateTimefourniparJSFquitransformeraladatesaisieenobjetDate. Testerleformulaireetl'affichagedeserreursdesaisie.Notezquesivoussouhaiterchangerleformatdesaisieilfaudraégalementallerchangerlemessaged'erreurcorrespondantdansbundles/JsfMessages_fr.propertiesjavax.faces.convert.DateTimeConverter.CONVERSION = Veuillez saisir les dates sous la forme jjmmaaaa. javax.faces.convert.DateTimeConverter.CONVERSION_detail = "{1}": Conversion en Date impossible, Veuillez saisir sous la forme jjmmaaaa.

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émentdansleformulaire. AjouterlaméthodegetUserItems()quipermetderécupérerl'ensembledesutilisateursenbasedansTaskontroll rpublic List getUserItems() { List les_users= getDomainService().getUsers(); ArrayList userItems = new ArrayList(); for (User user : les_users) { if (user.getDisplayName() !=null) userItems.add(new SelectItem(user, user.getDisplayName()+"("+user.getLogin()+")")); else userItems.add(new SelectItem(user, "Inconnu ("+user.getLogin()+")")); } return userItems; } Dansorg. supportail.formation.w b.conv rt rsécrireuneclasseUs ronv rt r.Elledevraimplémenterl'interfacejavax.fac s.conv rt.onv rt retnotammen tlesméthodesgetAsObject()etgetAsString(). package org.esupportail.formation.web.converters; [...] public class UserConverter implements Converter,InitializingBean { DomainService domainService; [...] @Override public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) throws ConverterException { User u=domainService.getUser(arg2); return u; } @Override public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) throws ConverterException { if (arg2!=null && (arg2 instanceof User)) return ((User)arg2).getLogin(); else return null; } [...] }

FormationEsup-CommonsV2-ManipulationsPage55sur101Onsouhaiteallerrechercherl'objetUs renbasededonnées.Onn'utiliseralaméthodegetUser()de

omainS rvic quel'oninjecteravialadéclarationdesbeansSpring.Déclarerceconvertisseurdansconverters.xml. A converter for User. Testerleformulaire.3 LesvalidateursExerciceN°20: Validationdesc ampsgrâceàunvalidateurTesterlatailleduchamptitregrâceàunvalidateurprédéfini.AjouterlevalidateurdanstaskManager.xhtml Testerleformulaireetl'affichagedeserreursdesaisie.Fairel'équivalentavecunquotesdbs_dbs9.pdfusesText_15

[PDF] exercices corrigés soncas

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

[PDF] exercices corrigés suites arithmétiques géométriques pdf

[PDF] exercices corrigés suites numériques bac pro pdf