:: Enseignements :: ESIPE :: E4INFO :: 2011-2012 :: Java Réseau I - Concurrence et E/S ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Examen de concurrence - Session de Septembre |
Exercice 1 - Log it!
On cherche à écrire une classe Java qui permet de logger sur la console ou dans un fichier
un ensemble de chaînes de caractères.
Cette classe doit être thread-safe être programmé dans les rêgles de l'art.
La classe
Logger possède les constructeurs et méthodes suivantes :
-
Un constructeur qui prend un Writer en paramètre et qui écrira les chaines de caractère
dans celui-ci.
-
Un autre constructeur qui prend un chemin (Path) et un jeu de caractères (Charset)
et qui écrit les chaines de caractères dans le fichier correspondant en utilisant le charset spécifié.
-
Une méthode createLog qui permet de créer un objet Log qui servira à écrire les
chaines de caractère. Un log est attaché à la thread qui la créé et il ne peut y avoir qu'un seul log
par thread.
-
La méthode getLog permet de récupérer le log de la thread qui appel la méthode,
celui-ci devant être créer au préalable par createLog.
-
La méthode close qui ferme l'ensemble des logs créer à partir de ce Logger.
De plus, l'interface
Log possède les méthodes suivantes :
-
La méthode log qui permet de transmettre une chaine de caractère, celle-ci ne sera pas écrite
immédiatement mais stockée et l'ensemble des chaines de caractères stocké sera écrite lors de la fermeture
du log (soit en appelant la méthode close sur un Log ou sur le Logger.
Seul la thread qui a créer l'objet Log a le droit d'utiliser la méthode log,
et de plus le Log ne doit pas être fermé.
-
La méthode isClosed indique si le Log est fermé ou non, cette méthode peut être appelée
par n'importe qu'elle thread.
-
La méthode close qui ferme le Log et donc déclenche l'écriture des chaines de caractères
précédemment stockées (comme la méthode close peut être appelée plusieurs fois, l'écriture ne se fait
qu'au premier appel). Cette méthode est appelable par n'importe quelle thread.
-
Ecrire une classe Main ainsi qu'une méthode main qui créé un Logger, un Log et log sur la sortie standard
la chaine de caractère "hello logger".
-
Dans la méthode main, utiliser la construction try-with-resources pour fermer le Logger et le Log
correctement.
-
Implanter la classe Logger et tout ce qui en dépend.
Attention, à ce que tout soit thread-safe !
Les tests unitaires suivant permettent de valider la semantique du
Logger,
notez qu'il ne valide pas le fait que la classe est bien thread-safe.
© Université de Marne-la-Vallée