Codeurs Pas Peur 3 Sockets client/serveur

publicité
Institut Galilée
Année 2016-2017
Environnement et Langages Evolués
Master 2 EID-PLS
TP 1 : JAVA
Familiarisation avec Eclipse / Netbeans
Gestion de location immobilière
Résumé
L’objectif de ce TP est d’être capable de réaliser une application Java de gestion de location immobilière. Il
s’agit de gérer des réservations pour des studio, des appartements, des maisons...
Plusieurs technologies vues en cours sont utilisées dans ce TP :
— sockets client/serveur
— pools
— programmation fonctionnelle en Java
— stockage XML
— journalisation
— tests unitaires
— messagerie
— ordonnancement
1
Préparation
1. Sous Netbeans, créer un premier projet Java
2. Définir une classe Periode contenant 2 champs : un champ Date pour la date d’arrivée, un champ de type Date
pour la date de départ.
3. Créer les méthodes de validité/chevauchement de périodes (arrivée avant le départ...)
4. Créer une classe permettant de tester ces méthodes
5. Définir une classe Location ayant 4 champs :
— String lieu
— int tarif (tarif par semaine)
— List<Periode> reservations
— String genre : une énumération pour studio, appartement, maison
Pour simplifier, on suppose qu’il n’y a qu’une location par lieu.
6. Définir les méthodes de gestion des réservations d’une location, et les tester
7. Créer une classe Locations et les méthodes statiques type “CRUD” (Create, Read, Update et Delete) de gestion
des locations (et des réservations)
8. Gérer les exceptions de ces méthodes
9. Créer une classe permettant de tester ces méthodes
10. Définir une méthode de recherche de location par lieu à l’aide d’une gestion par stream avec lambda-expressions
2
Une première application en ligne de commande −→ Codeurs Pas Peur
1. Récupérer l’archive de travail disponible ici : https://lipn.univ-paris13.fr/~fortier/Enseignement/Lee/
MENU.tar.gz
Il s’agit d’un projet Netbeans d’affichage de menus que vous pouvez ré-utiliser dans votre éditeur.
2. Ecrire une application Java simple disposant d’un menu et permettant de gérer les locations.
3. Définissez une classe ou plusieurs classes d’utilitaires pour valider les entrées clavier.
Ces classes doivent être ré-utilisables dans d’autres projets.
3
Sockets client/serveur
Dans cet exercice, vous pouvez vous appuyer sur les travaux effectés précédemment et réutiliser les parties métiers.
1. Dans un nouveau projet, définissez un serveur permettant une connexion socket sur le port 9999, avec un pool
prédéfini de taille fixe (10) pour répondre aux requêtes de clients.
2. Définissez une classe "Client" qui va servir à tester la connexion au serveur.
1
3. Le serveur gère à présent les locations immobilières.
Grâce à vos travaux précédents, ajoutez les classes nécessaires à cette gestion.
Pour aérer/découper le code, vous pouvez implémenter le code métier du serveur dans un esclave qui lui-même
utilise une classe de gestion des requêtes.
4. Définissez côté serveur une méthode permettant de renvoyer la liste des locations possibles, et modifiez le client
pour qu’il teste cette méthode.
5. Définissez côté serveur la méthode permettant de renvoyer à un client le tarif quand le client envoie un nom de
lieu, un genre.
modifiez le client pour tester cette méthode.
6. Définir une méthode côté serveur pour renvoyer la moyenne des tarifs par semaine des locations quand un client
le demande (fixez le protocole correspondant à cette demande).
7. Définir des classes exception permettant de gérer les cas d’erreurs (i.e. des exceptions sont retournées par la
classe traitant les requêtes, le serveur gérant l’exception)
8. Définir une méthode côté serveur pour renvoyer le nombre de lieux dont les tarifs par semaine sont compris
entre 100 et 200.
9. Définir les méthodes CRUD de gestion des locations, coté serveur, et tester avec le client.
10. Définir les méthodes CRUD de gestion des réservations pour une location donnée (via son lieu par exemple),
coté serveur, et tester avec le client.
11. Définir une méthode qui teste si une réservation a été faite pour une certain lieu (et testez via un client)
12. Modifiez la méthode précédente pour utiliser un Future, et testez toutes les 10 secondes si le résultat vrai/faux
est obtenu. Utilisez un Callable, et testez si le future est terminé (via une méthode isDone).
13. En supposant que le client envoie 10 lieux dont on veut tester lesquels ont des réservations, utilisez un CompletionService pour récupérer (et afficher) les résultats dès qu’ils sont disponibles.
3.1
Codeurs Pas Peur
1. Remplacez le fichier de tests précédent par un menu de gestion, comme dans l’exercice 2.
4
Persistance XML
Dans cette partie, nous allons utiliser un fichier XML comme base de données des locations
1. A partir du premier projet, ajoutez les annotations JAXB.
2. Dans un terminal, générez le(s) schéma(s) XML avec la commande schemagen. Les documents XML générés
seront valides par rapport à ce(s) schéma(s).
3. Avec netbeans, réalisez l’opération inverses et générez les classes Location(s) et Periode à l’aide d’un "JAXB
Binding".
4. Retrouvez les différences avec le code utilisé dans les exercices précédents, et complétez les classes avec les
méthodes CRUD.
5. Ajoutez et testez les méthodes de lecture/écriture dans un fichier XML d’une location (en liaison avec les
instances de la classe Locations)
6. Créer un fichier XML correct contenant des données initiales d’une location.
7. Testez la lecture de ce fichier pour récupérer la location persistante.
8. Générez une liste de locations et stockez-la dans un fichier XML (via un ObjectFactory).
9. Testez la lecture de ce fichier pour récupérer la liste des locations.
Créer un gestionnaire d’événements (ValidationEvent) pour améliorer la lisibilité des messages d’erreurs.
4.1
Codeurs Pas Peur
1. Implémentez la persistance XML sur chaque méthode de gestion des locations.
5
Journalisation
Dans cette partie, nous allons ajoutons une couche de journalisation pour tracer les comportements de l’application
client/serveur (3). Le but est de créer un fichier de journaux pour les actiosn du client, et un autre pour les actions
du serveurs.
1. Intégrez et configurez la librairie log4j à votre projet Netbeans, disponible à l’adresse : https://lipn.
univ-paris13.fr/~fortier/Enseignement/Lee/librairies/
(Ajoutez le jar en tant que librairie)
2
2. Configurez votre Logger dans les classes adéquates
3. Configurez la criticité du logger dans vos méthodes : TRACE, DEBUG, INFO et WARN
4. Configurez et testez différents appenders (fichiers)
5. Ajoutez les librairies activation et javamail, puis configurez un appender SMTP qui poste un mail à chaque
lancement de serveur et de connexion d’un client.
6
Ordonnanceur et messagerie
Dans cette partie, nous ajoutons à l’exercice précédent un système d’ordonnancement pour que l’adminstrateur de
l’application de gestion de location reçoive des messages périodiquement de la part du serveur sur son état de santé.
1. Intégrez et configurez les librairies quartz et javamail, disponibles à l’adresse : https://lipn.univ-paris13.
fr/~fortier/Enseignement/Lee/Librairies/
2. Modifiez l’application pour envoyer une notification par mail au gestionnaire à chaque réservation.
Vous pouvez créer une classe d’utilitaires de gestion des mails
3. Modifiez l’application pour que toutes les 5 minutes, le gestionnaire reçoive une notification concernant l’activité
de son entreprise : nombre de locations en cours, nombre de location prévues et terminées...
3
Téléchargement