CAHIER DE TRAVAUX PRATIQUES OB300



Documents pareils
TP1. Outils Java Eléments de correction

TP1 : Initiation à Java et Eclipse

Introduction à Eclipse

La base de données XML exist. A. Belaïd

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Java DataBaseConnectivity

Java Licence professionnelle CISII,

Initiation à JAVA et à la programmation objet.

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Environnements de développement (intégrés)

Eclipse atelier Java

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Tutoriel d installation de Hibernate avec Eclipse

Cours 1: Java et les objets

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Création d une application JEE

TP1 : Initiation à Java et Eclipse

Compte Rendu d intégration d application

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Installation et compilation de gnurbs sous Windows

Application web de gestion de comptes en banques

Plan du cours. Historique du langage Nouveautés de Java 7

Premiers Pas en Programmation Objet : les Classes et les Objets

1. Base de données SQLite

Chapitre VI- La validation de la composition.

Création d un service web avec NetBeans 5.5 et SJAS 9

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

TD/TP 1 Introduction au SDK d Android

TUTORIEL D INSTALLATION D ORACLE ET DE SQL DEVELOPPER TUTORIEL D INSTALLATION D ORACLE...1 ET DE SQL DEVELOPPER...1

Construire des plug-ins pour SAS Management Console SAS 9.1

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Groupe Eyrolles, 2003, ISBN : X

Bases Java - Eclipse / Netbeans

Programmer en JAVA. par Tama

Java 7 Les fondamentaux du langage Java

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Modélisation et Gestion des bases de données avec mysql workbench

APIs de table pour SQL Server

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TP Programmation Java / JDBC / Oracle

TP2 : Client d une BDD SqlServer

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

BIRT (Business Intelligence and Reporting Tools)

as Architecture des Systèmes d Information

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Interfaces graphiques avec l API Swing

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

KWISATZ_TUTO_module_magento novembre 2012 KWISATZ MODULE MAGENTO

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Remote Method Invocation (RMI)

Quick Start Installation de MDweb version 2.3

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Sage 100 CRM Guide de l Import Plus avec Talend Version 8. Mise à jour : 2015 version 8

Le langage C. Séance n 4

Formation. Module WEB 4.1. Support de cours

Compte-rendu de projet de Système de gestion de base de données

Programmation par les Objets en Java

K?ellaWeb Saisie des absences, retards et sanctions APLON en mode Web

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Tutoriel BlueJ. Michael Kölling Mærsk Institute University of Southern Denmark. Version 1.4 fr-2 par le groupe Sigma 1 pour BlueJ Version 1.2.

Installation et prise en main

Utiliser Java sans BlueJ

Introduction à JDBC. Accès aux bases de données en Java

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

ECLIPSE ET PDT (Php development tools)

TP, première séquence d exercices.

Traitement de données

Approche Contract First

Votre premier projet Android

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Projet De Stijl Plate-forme pour robots mobiles

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Annexe 10 - Procédure pour créer un Jar

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

INITIATION AU LANGAGE JAVA

< Atelier 1 /> Démarrer une application web

Créer et partager des fichiers

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Installer et configurer Oracle Forms 11gR2 Windows 7 64 bits

Apprendre Java et C++ avec NetBeans

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

Les frameworks au coeur des applications web

EJBCA PKI Open Source

Générer du code à partir d une description de haut niveau

EP60.92 Projet d application pluridisciplinaire La chasse aux trésors

Transcription:

CAHIER DE TRAVAUX PRATIQUES OB300 1/43

Sommaire TP 01 - Installation de la JDK. 3 TP 02 - Ecriture d une première classe java. 6 TP 03 Installation d Eclipse et création d un premier projet. 8 TP 04 La Javadoc. 13 TP 05 Le packaging avec Jar 16 TP 06 Implémentation d un modèle UML 19 TP 07 Mise en œuvre de l héritage 20 TP 08 Mise en œuvre de la surcharge, redéfinition et polymorphisme 21 TP 09 Interface 24 TP 10 JDBC 26 TP 11 Collection 33 TP 12 JUnit 35 TP 13 Internationalisation 38 TP 14 Entrée / Sortie 39 TP 15 Swing 41 TP 16 Log4J 43 2/43

TP 01 - Installation de la JDK Installation de la JDK. 1. Lancer l installateur de la JDK depuis le CD (D:\logiciels\runtime\j2sdk-1_4_2_10-windowsi586-p.exe) et suivre les étapes proposée 3/43

2. A l issue de l installation deux répertoires ont été créés : C:\j2sdk1.4.2_10 : constitue le répertoire de la JDK C:\Program Files\Java\j2re1.4.2_10 : constitue le répertoire de la JRE Installation de la documentation de la JDK. 1. Dézipper l archive de la documentation de la JDK du CD (D:\logiciels\runtime\ j2sdk-1_4_2- doc.zip) vers le repertoire C:\j2sdk1.4 2_10\docs.. 2. Deux entrées principales sont à connaitre : C:\j2sdk1.4.2_10\docs\index.html. Ce lien donne accès à l ensemble de la documentation SUN. 4/43

C:\j2sdk1.4.2_10\docs\api\index.html Ce lien donne accès à la description de l ensemble des classes java. 3. Positionner la variable d environnement JAVA_HOME à C:\j2sdk1.4.2_10 4. Enrichir la variable d environnement PATH avec %JAVA_HOME%\bin afin de rendre accessible les outils de la JDK à n importe quel endroit de l arborescence. 5. Vérifier l installation en lançant la commande java version Cette commande doit retourner la version du JDK installée sur votre machine. Résultat attendu : java version "1.4.2_10" 5/43

TP 02 - Ecriture d une première classe java Création de la classe LanceurHelloWorld. 1. A l aide d un éditeur de texte écrire la classe Java LanceurHelloWorld suivante et l enregistrer dans le fichier LanceurHelloWorld.java sous le répertoire C:\Proje sob300 t : public class LanceurHelloWorld { public static void main(string[] args) { System.out.println("Bonjour! "); 2. Se positionner dans le répertoire C:\ProjetsOB300 et compiler le fichier LanceurHelloWorld.java via la commande javac LanceurHelloWorld.java 3. Vérifier la présence du byte code associé : LanceurHelloWorld.class 4. Lancer le programme principal via la commande java LanceurHelloWorld 5. Vérifier l affichage du résultat suivant : Bonjour! Prise en compte des arguments de la ligne de commande. 1. Modifier le corps du main de la classe LanceurHelloWorld comme suit afin de gérer les arguments de la ligne de commande et manipuler les commentaires. public class LanceurHelloWorld { /* La méthode main est statique. Ce qui signifie qu'elle est chargée en mémoire au démarrage de l'application et peut donc être utilisée avant la création de tout objet. */ public static void main(string[] args) { //Affichage de l argument saisi sur la ligne de commande System.out.println("Bonjour Monsieur " + args[0]); 2. Répéter les étapes 2. et 3. précédentes. 3. Lancer le programme principal via la commande java LanceurHelloWorld arg1 (avec arg1=smith par exemple) 4. Vérifier l affichage du résultat suivant : Bonjour Monsieur Smith. 6/43

Création d une archive java (fichier jar). (optionnel) 1. Se positionner dans le répertoire C:\ProjetsOB300 2. Constituer un jar contenant le bytecode de la classe LanceurHelloWorld via la commande jar cvf hello.jar LanceurHelloWorld.class 3. Relire le contenu de ce jar via la commande jar tvf hello.jar Remarques : L utilitaire jar de constitution d un jar à rajouté le fichier META-INF/MANIFEST.MF Ce jar constitue une unité de livraison, pouvant être incorporé dans le CLASSPATH de la compilation et d exécution d un autre projet. Création d une archive java exécutable. (optionnel) 1. Dans le répertoire de C:\ProjetsOB300, créer un fichier texte nommé manifestehelloworld.txt 2. Le modifier pour qu il indique quelle est porteuse de la méthode main Manifest-Version: 1.0 Main-Class: LanceurHelloWorld Remarque : Ce fichier doit se terminer par un retour à la ligne après LanceurHelloWorld, sinon cette ligne ne sera pas analysée. 3. Renommer manifestehelloworld.txt en manifestehelloworld.mf. 4. Créer un jar comprenant LanceurHelloWorld.class et le fichier manifeste manifestehelloworld.mf via la commande jar cmf manifestehelloworld.mf hello.jar LanceurHelloWorld.class 5. Exécuter le jar hello.jar via la commande java jar hello.jar Smi h t 6. Vérifier l affichage du résultat suivant : Bonjour Monsieur Smith. 7/43

TP 03 Installation d Eclipse et création d un premier projet Installation d éclipse 1. Dézipper l archive Eclipse 3.1-sdk-1.0-win32.zip du CD vers le répertoire C:\Program Files. 2. Eclipse est installé à l issue de la décompression. 3. Pour le démarrer lancer C:\Program Files\eclipse311\eclipse\eclipse.exe (Se créer un raccourci sur le bureau). Création d un projet sous Eclipse 1. Sélectionner dans eclipse les menus suivants : File > New > Project 2. Choisir Java Project, puis Next 8/43

3. Donner le nom GestionConges à votre projet. 4. Cocher Create separate source and output folders pour séparer les sources du byte code, puis Next. 5. Finish 9/43

Création d un package 1. ClicK droit sur le dossier src su projet 2. New > Package 3. Nommer le package lanceur 10/43

Création d une classe 4. Click droit sur le package lanceur dans lequel ajouter la classe 5. New > Class 6. Nommer la classe LanceurHelloWorld 7. Cocher la case public static void main pour générer automatiquement le squelette de la méthode main 11/43

8. Coder l exemple suivant : Configuration d exécution public static void main(string[] args) { System.ou t.println("hello World!"); 1. Click droit sur la classe LanceurHelloWorld 2. Obtention du message suivant dans la console. 12/43

TP 04 La Javadoc Rédaction des commentaires javadoc Les commentaires de la javadoc s écrivent entre les balises /** */ La javadoc prend en compte les balises html et différents tags (@author, @param, @return ) que l on peut visualiser avec ctrl + espace quand le curseur est entre les balises javadoc. La javadoc est importante car elle permet de générer la documentation des classes, méthodes et packages de l application. Il faut la rédiger au moment de la création des classes 1. Positionner des commentaires javadoc Génération de la javadoc 1. Sélectionner le projet en cours et aller dans le menu Project > Generate Javadoc 2. Sélectionner la visibilité Private, afin de créer la documentation de toutes les classes de l application. 13/43

1. Sélectionner la librairie rt.jar qui représente l API principale de java. Cela permet de créer un lien vers les classes de cette API qui sont utilisées dans le projet (toutes les classes héritent implicitement de la classe de base java.lang.object) 14/43

1. Cocher Save the settings o f this Javadoc export as an Ant script Cela permet d enregistrer la configuration de génération de la javadoc dans un script Ant. Pour regénérer ultérieurement la javadoc, il suffira d exécuter ce script (Clic droit sur le script javadoc.xml > Run > Ant Build 2. Cocher la case Open generated index file in browser pour visualiser la doc générée. 15/43

TP 05 Le packaging avec Jar Création d un composant : Packager l application en JAR 1. Créer un dossier META-INF à la racine du projet. Ce dossier contient les fichiers de description des composants 2. Click droit sur le projet 3. Expor er t 4. Sélectionner le projet pour lequel vous souhaiter générer la documentation javadoc 16/43

Remarque : Le fichier jardesc permet de sauvegarder la configuration de création du JAR. Pour recompiler l archive JAR, il suffit ensuite de faire un clic droit sur le fichier et sélectionner Create JAR. Pour modifier la configuration, un clic droit sur le fichier et sélectionner Open JAR Packager 5. Générer le fichier MANIFEST.MF qui contiendra le chemin vers la classe de démarrage 6. Sélectionner la classe de démarrage LanceurHelloWorld 17/43

Exécution du composant 7. Ouvrir un invite de commande DOS 8. Se placer dans le dossier du composant JAR 9. Exécuter le composant : java jar gestionconges.jar 10. Obtention du résultat : Hello World! 18/43

TP 06 Implémentation d un modèle UML Objectif : Implémenter un diagramme de classes UML Construire une classe avec ses attributs, son constructeur et ses méthodes Utiliser les getters er setters Manipuler les instances d objets créées 1. Implémenter le diagramme de classes UML suivant : Remarques : Créer le package domaine afin d y décliner les classes métiers La génération des getters et des setters se fera automatiquement via l assistant eclipse : Click droit dans le code source > source > Generate Getters and Setters En ce qui concerne le corps des différentes méthodes, se contenter pour le moment d une trace à l écran : Exemple pour la classe Employe : public void poserconge(string datedebut, String datefin) { System.out.println("Monsieur " + prenom + " " + nom + " pose un conge du " + datedebut + " au " + datefin); 2. Créer le package lanceur. 3. Ecrire dans ce package la classe LanceurGestionConges (Classe comportant un Main) afin d instancier un Manager et deux Employes. 4. Tester l invocation des différentes méthodes sur les différentes instances d Employe et de Manager. Remarque : Nous substituerons ce lanceur par la suite par l implémentation d une classe de test unitaire via JUnit. 19/43

TP 07 Mise en œuvre de l héritage Objectif : Modifier l implémentation du diagramme de classes UML Mise en œuvre de l héritage Manipuler les instances d objets créées 1. Modifier l implémentation du diagramme de classes UML suivant : Remarques : L héritage à permis de factoriser des attributs communs (id, nom et prénom) et une méthode commune (poserconge). 2. Les attributs id, nom et prénom de la classe Manager sont hérités de la classe Employe. Ces attributs étant privés au niveau de la classe Employe, vous devez constater que leur utilisation en direct pose un problème de compilation. Utiliser les accesseurs publics associés pour y accéder. 3. Tester le lanceur LanceurGestionConges. Vous devez obtenir le même résultat que lors du TP précédent. 4. Que faudrait-il faire pour pouvoir accéder en direct à ces attributs? 5. Tester à nouveau en ayant modifié la visibilité (private, public, protected) des attributs de la classe Employe. 6. Le constructeur de Manager doit à ce stade du développement contenir des appels aux setters des différents attributs privés. Modifier le constructeur de Manager afin qu il invoque son constructeur ancêtre (celui d Employe) via le mot clef java super. Ceci constitue une bonne façon de faire en matière de construction d objets. public Manager (String pnom, String pprenom, int pid){ super(pnom, pprenom, pid); 20/43

TP 08 Mise en œuvre de la surcharge, redéfinition et polymorphisme Objectif : Modifier l implémentation du diagramme de classes UML Mise en œuvre de la surcharge, Mise en œuvre de la redéfinition et du polymorphisme 1. implémentation du diagramme de classes UML suivant : Remarque : Les attributs soulignés de la classe DemandeConges, correspondent à des attributs sta ic. t Pour mémoire, ces attributs sont accessibles en dehors de toute instanciation. public final static String REFUS = "refus"; public final static String ACCORDE = "valide"; public final static String ATTENTE = "en attente"; 2. La surcharge d'une méthode ou d un constructeur permet de définir plusieurs fois une même méthode/constructeur avec des arguments différents. Le compilateur choisi la méthode qui doit être appelée en fonction du nombre et du type des arguments. Ceci permet de simplifier l'interface des classes vis à vis des autres classes. 21/43

Surcharger les constructeurs de Employe, Manager et DemandeConges via le mot clef java this Exemple 1 : public Manager (String pnom, String pprenom, int pid){ super(pnom, pprenom, pid); public Manager (String pnom, String pprenom){ this(pnom, pprenom, 0); public Manager (String pnom){ this(pnom, «Richard», 0); public Manager (){ this(«durant», «Richard», 0); Exemple 2 : public DemandeConges(String pdatedebut, String pdatefin, String petatvalidation) { datedebut = pdatedebut; datefin = pdatefin; etatvalidation = peetatvalidation; public DemandeConges(String pdatedebut, String pdatefin){ this(pdatedebut, pdatefin, DemandeConges.ATTENTE); 3. La redéfinition d'une méthode héritée doit impérativement conserver la déclaration de la méthode parent (type et nombre de paramètres, la valeur de retour et les exceptions propagées doivent être identique). Si la signature de la méthode change, ce n'est plus une redéfinition mais une surcharge. Cette nouvelle méthode n'est pas héritée : la classe mère ne possède pas de méthode possédant cette signature. la redéfinition de la méthode poserconges dans la classe Manager exprime le fait que le savoir faire métier est différent dans les deux classes : La méthode poserconge() pour l employé déclenche une demande avec une attente de validation. La méthode poserconge() pour le manager déclenche une demande qui est automatiquement validée. 4. Redéfinir la méthode poserconge r( ) de la classe Manager. Exemple : public void poserconge(string datedebut, String datefin) { System.ou.println("Monsieur t " + getprenom() + " " + getnom() + " pose un conge du " + datedebut + " au " + datefin); System.ou t.println("etant manager, il valide ses propres conges") ; 22/43

Remarque : On constate qu une partie du code de poserconge() est identique dans les deux classes Employe et Manager. Pour éviter la duplication de code, une bonne façon de faire est la suivante : public void poserconge(string datedebut, String datefin) { super.poserconge(datedebut, datefin) ; System.ou t.println("etant manager, il valide ses propres conges") ; 5. Redéfinir la méthode tostring() héritée de la super classe Object, afin de tracer les caractéristiques d un objet : Exemple : public String tostring(){ return "Employe : " + id + ", " + prenom + ", " + nom ; Remarque : La méthode tostring() est automatiquement invoquée lorsque l on souhaite tracer un objet. Exemple : Employe emp = new Employe("Smith", " John", 2) ; System.ou t.println(emp) ; Renverra la chaîne : Employe : 2, John, Smith ; Par défaut la méthode tostring() retourne le nom de la classe d instanciation de l objet suivi de sa référence. 6. Modifier le lanceur LanceurGestionConges afin de : procéder à différentes instanciations (différents constructeurs) tracer l état des objets. 7. Tester le lanceur LanceurGestionConges et vérifier la redéfinition de la méthode poserconge 23/43

TP 09 Interface Objectif : Modifier l implémentation du diagramme de classes UML Création d une interface IPersonnel Manipulation des objets Employe et Manager par le biais de leur interface IPersonnel On considère un acteur tiers, la classe ServicePaie, qui doit récupérer la liste de tout le personnel à la fin de chaque mois afin d établir les feuilles de paie de chacun. Cet acteur considère tout type de Personnel (Employe et Manager). Il ne manipule que la méthode consulterconges() de chacun des membres du personnel. En conséquence, pour des raisons de sécurité, cet acteur n a pas accès aux accesseurs des classes Employe et Manager, ni à la méthode validerconge() de la classe Manager 1. implémentation du diagramme de classes UML suivant : Remarque : Le type Collection sera vu prochainement dans le chapitre ad hoc. 2. Créer l interface IPersonnel dans le package domaine ayant à son contrat de service la méthode consulterconges(). public Collection consulterconges(); Cette méthode permet de consulter les congés posés par un Employé ou par un Manager. L idée est que cette interface puisse être utilisée par une classe tiers ServicePaie que vous allez implémenter. 24/43

3. Faire en sorte que la classe Employe implémente l interface IPersonnel Remarque : La classe Manager, héritant de la classe Employe, est vue également de façon implicite comme une implémentation de l interface IPersonnel. L idée est donc qu un objet Employe ou Manager puisse être manipulé par le biais de son interface IPersonnel. 4. Redéfinir la méthode consulterconges() Exemple : public Collection consulterconges() { System.ou t.println("consultation des conges de " + prenom + " " + nom); return null; 5. Créer la classe ServicePaie dans le package domaine. Cette classe possède le savoir faire métier listercongepersonnel public void listercongepersonnel(ipersonnel personnel){ personnel.consulterconges(); Cette méthode demande l affichage des congés d un membre du personnel. 6. Modifier le lanceur LanceurGestionConges afin de : Créer une instance de ServicePaie. Invoquer sur cette instance la méthode listercongepersonnel en lui passant successivement une instance d Employe et de Manager 7. Tester le lanceur LanceurGestionConges et vérifier le comportement. Remarque : Dans une application réelle, on pourra concevoir que l instance de ServicePaie obtient la liste de tout le personnel à partir d une base de données et invoque de façon itérative la méthode listercongepersonnel. 25/43

TP 10 JDBC Installation de mysql Installer mysql par le biais de WAMP (Window Apache MySQL PHP). 1. Lancer l installation de WAMP depuis l exécutable «wamp5_1.4. 4. exe» fourni sur le CD (D:\logiciels\outils) 26/43

Démarrer les services Démarrer PhpMyAdmin pour l administration de la base MySQL Création de la base de données formation 1. Saisir formation comme nom de base de données 2. Appuyer sur le bouton créer 27/43

3. Dans l onglet SQL, zone «Emplacement du fichier texte» partir à la recherche du script de création des tables formation.sql fourni sur le CD (D:\ distribution\mysql) Ajouter les pilotes de connectivité au SGBDR Pour se connecter à une base de données, il faut utiliser des pilotes de connectivité fournis par l éditeur. Nous allons utiliser les pilotes Mysql. 1. Retourner sous Eclipse 2. Ajouter les pilotes dans le projet a. Créer un dossier lib dans le projet b. Importer le composant mysql-connector-java-3.1.7-bin.jar i. Clic droit sur le dossier lib ii. Importer iii. File System 28/43

3. Ajouter la librairie mysql au classpath du projet a. Click droit sur le projet b. Propriétés c. Sélectionner la catégorie Java Build Path d. Onglet Librairies e. Add JARs 29/43

Implémentation métier 1. implémentation du diagramme de classes UML suivant : Remarque : Rajout d une méthode poserconge dans les classes Employe et Manager acceptant en argument une demande de congés. 2. Implémenter la méthode consulterconges() afin d aller rechercher en base tous les congés posés par un membre du personnel identifié par son ID_employe. "SELECT datedebut, datefin, etat FROM conges WHERE ID_employe='"+ id +"'" Référez-vous au cours pour reprendre le squelette JDBC à mettre en œuvre. Dans le parcours du recordset se contenter pour le moment de mettre à jour et d afficher une instance de DemandeConges avec les datedebut, datefin et etat récupérés de la base de données. Exemple : DemandeConges demande = new DemandeConges(); while(rs.next()){ demande.setdatedebut(rs.getstring("datedebut")); demande.setdatefin(rs.getstring("datefin")); demande.setetatvalidation(rs.getstring("etat")); System.out.println(demande); 30/43

3. Tester la méthode consulterconges() via le LanceurGestionConges sur les instances suivantes : Employe emp1 = new Employe("Watson", "John", 1); Manager manager = new Manager("Homes", "Sherlock", 2); Vous devriez obtenir un résultat similaire à celui-ci : Consultation des conges de John Watson DemandeConges : 2005-03-04, 2005-03-08, refus DemandeConges : 2005-06-06, 2005-06-17, valide DemandeConges : 2005-08-08, 2005-08-19, en attente Consultation des conges de Sherlock Homes DemandeConges : 2005-09-10, 2005-09-25, en attente DemandeConges : 2005-07-01, 2005-07-15, valide 4. (Optionnel) Implémenter la méthode poserconge() afin qu un Manager ou un Employe puisse insérer une demande de congés en base. Pour les opérations d insertion, suppression et mise à jour d un enregistrement en base, utiliser la méthode executeupdate de l objet Statement Statement st = null; st = cn.createstatement(); int nb = st.executeupdate(<requete SQL>) ; avec requête SQL : insert into conges (ID_employe, datedebut, datefin, etat) values (" + id + ", '" + demande.getdatedebut() + "', '" + demande.getdatefin() + "', '" + demande.getetatvalidation() + ');" Remarques : L implémentation de la méthode validerconge() du Manager se fera dans le TP sur les Collections Cette façon de coder n est pas une bonne pratique, car nous melons à des objets métiers des appels techniques vers une solution de persistance (Base de données mysql dans notre cas). Si nous souhaitons évoluer vers une base Oracle, il faudrait adapter le code partout ou cela est nécessaire. Une bonne façon de faire serait de créer une couche d abstraction intermédiaire permettant de dissocier la couche métier de la couche technique. Cela pourrait être fait par le biais d une Factory et de DAO (Data Access Object). 31/43

Enfin, nous constatons que chaque méthode procède à l ouverture d une connexion à la base de données et à sa fermeture, opérations coûteuses. Une bonne pratique dans ce cas serait de gérer des pools de connexions. 5. Tester la méthode poserconges() via le LanceurGestionConges sur les instances suivantes : Employe emp1 = new Employe("Watson", "John", 1); Manager manager = new Manager("Homes", "Sherlock", 2); DemandeConges cg1 = new DemandeConges("2006-01-02", "2006-01-04"); DemandeConges cg2 = new DemandeConges("2006-09-09", "2006-09-14"); emp1.poserconge(cg1); manager.poserconge(cg2); 6. Obtention des résultats suivants : 32/43

Objectif : TP 11 Collection Manipuler les collections (insertion, parcours). 1. implémentation du diagramme de classes UML suivant : Remarques : Rajout d un attribut listeemployes de type Collection dans la classe Manager et de ses accesseurs associés. Ajout de la méthode fonctionnelle ajouteremploye() dans la classe Manager. 2. Modifier la méthode consulterconges de la classe Employe afin de retourner une collection de DemandeConges Rappel : à ce stade du TP, la méthode se contente d afficher les congés et de retourner null. Collection col = new ArrayList();. //Ajou t de la demande dans la collection à retourner col.add(demande); 3. Tester la récupération de la Collection retournée par méthode consulterconges() via le LanceurGestionConges. 4. (Optionnel) Implémenter la méthode ajouteremploye (Employe e) de la classe Manager. Cette méthode ajoute l employé e passé en argument à la Collection listeemploye. public void ajouteremploye (Employe e) { listeemployes.add(e); 33/43

5. (Optionnel) Implémenter la méthode validerconge() de la classe Manager. Pour toutes les instances d employés présentes dans la Collection listeemployes, procéder à la mise à jour de l état des demandes de congés à «valide». "UPDATE conges SET etat='" + DemandeConges.ACCORDE + "' WHERE etat='" + DemandeConges.ATTENTE + "' and ID_employe=" + emp.getid()+ ";" 6. (Optionnel) Tester la méthode validerconge () via le LanceurGestionConges sur les instances suivantes : Employe emp1 = new Employe("Watson", "John", 1); Manager manager = new Manager("Homes", "Sherlock", 2); Penser à rattacher emp1 à manager : manager.ajouteremploye(emp1); 7. (Optionnel) Obtention des résultats suivants : Tous les congés de l ID_employe = 1 sont à valides. 34/43

TP 12 JUnit Le framework Junit permet d automatiser des séquences de tests afin de vérifier la non régression d une application. 1. Créer un package services.test 2. Ajouter le test JUnit a. Click droit sur le pakage test b. New > Junit Test Case c. Sélectionner les options comme indiqué ci-dessous. d. Sélectionner la méthode listercongepersonnel. 35/43

e. Génération de la classe de test suivante : package services.test; import junit.framework.testcase; public class TestServicePaie extends TestCase { public static void main(string[] args) { junit.textui.testrunner.run(testservicepaie.class); /* * Test method for 'domaine.servicepaie.listercongepersonnel(ipersonnel)' */ public void testlistercongepersonnel() { 3. Ecriture du test testlistercongepersonnel Reprendre en partie le contenu du main du LanceurGestionConges Exemple : ServicePaie paie = new ServicePaie(); Employe emp1 = new Empl oye("watson", "John", 1); paie.listercongepersonnel(emp1); Manager manager = new Manager("Homes", "Sherlock", 2); paie.listercongepersonnel(manager); Penser à appeler une méthode assertxxx, pour tester le retour escompté de la méthode. 4. Tester la classe JUnit TestServicePaie Click droit sur la classe > Run as > JUnit Test 5. Ecrire une nouvelle classe de test unitaire JUnit Tes Employe. t Sélectionner la méthode consulterconges. 36/43

6. Génération de la classe de test suivante. package com.services; import junit.framework.testcase; public class TestEmploye extends TestCase { public static void main(string[] args) { junit.swingui.testrunner.run(testemploye.class); /* * Tes t method for 'com.domaine.employe.consulterconges()' */ public void testconsulterconges() { 7. Ecriture du test testconsulterconges Exemple : Collection listeconges; Employe emp1 = new Employe("Watson", "John", 1); listeconges = emp1.consulterconges(); asserttrue(listeconges.size() > 0); Employe emp2 = new Employe("Duval", "Robert", 6); listeconges = emp2.consulterconges(); assertfalse(listeconges. size() > 0); Manager manager = new Manager("Homes", "Sherlock", 2); listeconges = manager. consulterconges(); asserttrue(listeconges.size() > 0); 8. Tester la classe JUnit TestEmploye 37/43

Objectif : TP 13 Internationalisation Externaliser au sein d un fichier de propriétés les paramètres de connexion à la base de données MySQL. 1. Créer le package domaine.properties 2. Créer le fichier de propriétés config.properties avec les données suivantes ########## Configuration accès SGBD ########## sgbd.driver=com.mysql.jdbc.driver sgbd.login=root sgbd.password= 3. Modifier la méthode consulterconges de la classe Employe afin de rechercher les éléments de connexion à la base de données dans le fichier config.properties Exemple : ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.config"); String driver = bundle.getstring("sgbd.driver"); String mysqluser = bundle.getstring("sgbd.login"); String mysqlpassword=bundle.getstring("sgbd.password"); 38/43

Objectif : TP 14 Entrée / Sortie Exporter la liste des congés vers un fichier texte. 1. implémentation du diagramme de classes UML suivant : Remarque : Rajout de la méthode exporterconges dans la classe ServicePaie. 2. Ecrire la méthode exporterconges dans la classe ServicePaie afin d exporter la liste des congés d un membre du personnel vers le fichier texte exportconges.txt Indications : Récupérer la liste des congés sous forme de Collection en invoquant la méthode consulterconges sur le paramètre de type IPersonnel (Cf. diagramme UML) Utiliser la classe File pour obtenir une représentation java d un fichier texte. Utiliser la classe FileWriter pour écrire dans ce fichier texte. 7. Tester la méthode exporterconges () via le LanceurGestionConges sur les instances suivantes : ServicePaie paie = new ServicePaie(); Employe emp1 = new Empl oye("watson", "John", 1); paie.exporterconges(emp1); 39/43

TP 15 Swing Objectif : Création d une IHM swing avec implémentation du modèle événementiel. Implémentation du diagramme de classes UML suivant : Création de la fenêtre principale 1. Créer un conteneur de type JFrame nommé ClickJFrame dans le package presentation.swing Ce conteneur supportera l affichage d un bouton (JBouton), d une case à cocher (JCheckbox) et d un label (JLabel) (Cf. copie d écran ci-dessus) 2. Ecrire un constructeur ClickJFrame se chargeant de la construction graphique comme indiqué précédemment. 3. Attacher aux objets graphiques générateur d événements (bouton et checkbox) un gestionnaire d événement nommé ClickListener de type ActionListener (Cf. point suivant) 40/43

Création du gestionnaire d événements 1. Ecrire la classe ClickListener implémentant l interface ActionListener. 2. Ce gestionnaire d événement va récupérer l origine de l événement (bouton/checbox) dans la méthode actionperformed et déclencher le traitement ad hoc : Si le bouton à été clické, modifier le label pour afficher le message : «click bouton» Si la checkbox à été clickée, modifier le label pour afficher le message : «click checkbox» 3. Prévoir également un constructeur de ClickListener conservant une référence vers les objets graphiques (bouton, checkbox et label). Création du lanceur de la fenêtre principale 1. Créer une classe LanceurSwing le package lanceur public static void main(string[] args) { //Création de la fenêtre de login ClickJFrame fenetrelogin = new ClickJFr ame(); fenetrelogin.setdefaultcloseoperation(jframe.exit_on_close); //Affichage de l'objet sur l'écran fenetrelogin.setvisible(true); Remarques : Le fait d instancier un ClickJFrame provoque automatiquement l affichage du conteneur swing associé. La méthode setdefaultcloseoperation(jframe.exit_on_close) permet de terminer l application lorsque l on clique sur l icone l IHM disparait mais le processus continue de tourner. de l IHM. Autrement 2. Tester le LanceurSwing. 41/43

TP 16 Log4J Objectif : Utilisation de l API Log4J. Installation de log4j 1. Ajouter les pilotes dans le projet a. Importer le composant log4j-1.2. 11.jar i. Click droit sur le dossier lib ii. Importer iii. File System 2. Ajouter la librairie log4j au classpath du projet b. Click droit sur le projet c. Propriétés d. Sélectionner la catégorie Java Build Path e. Onglet Librairies f. Add JARs 42/43

Implémentation de log4j 1. Récupérer le fichier log4j.xml fourni sur le CD (D:\distribution\Log4j) et le recopier à la racine du projet Ges ionconges. t Ce fichier est configuré pour tracer les messages sur la console. 2. Modifier la classe Employe et rajouter des log4j dans l ensemble des méthodes. Indications : Créer un logger statique au niveau de la classe Employe static Logger mylogger = Logger.getLogger(Employe.class); Charger, dans le constructeur de la classe Employe, la configuration Log4J paramétrée dans le fichier log4j.xml via un DOMConfigurator. 3. Tester la génération des log sur la ConsoleAppender via le LanceurGestionConges. 4. Modifier le fichier log4j.xml pour pouvoir tracer dans un HTMLAppender 5. Tester la génération des log sur le ConsoleAppender et la HTMLAppender via le LanceurGestionConges 43/43