Devoir maison : Étape 2
- compléter la configuration de Maven ;
- écrire des méthodes pour une connexion TCP.
Cette étape est réalisable à la suite de la séance 2 et doit être réalisée avant la séance 3.
Prérequis pour la réalisation de cette étape :
- avoir terminé l'étape 1 du devoir ;
- avoir compris les pages de tutoriel JAVA NIO sur les SocketChannel et ServerSocketChannel ;
- avoir compris la partie TCP du cours sur les communications avec JAVA NIO ;
- avoir compris l'usage de la bibliothèque Log4j.
Ajout de deux bibliothèques à votre projet
Ajout de la bibliothèque Log4j à votre projet
Pour pouvoir suivre l'exécution d'une application réseau, il faut pouvoir trier les affichages en fonction de leur provenance et de leur niveau d'importance. Dans ce module, nous confions cette tâche à la bibliothèque Log4j. Nous ajoutons à la configuration de Maven les dépendances pour cette bibliothèque. Les artefacts Maven des bibliothèques les plus utilisées sont disponibles en ligne par exemple sur le Central Maven Repository. Utilisez le moteur de recherche pour trouver la dernière version 2.19.x des artefacts « Apache Log4j Core », et « Apache Log4j Api », et ensuite les lignes qu'il faut ajouter à la section <dependencies> du fichier de configuration de Maven (une section <dependency> pour chaque artefact). De plus, ces bibliothèques nécessitent un fichier de configuration log4j2.xml que nous plaçons dans le dossier src/main/resources.
Pensez à mettre à jour votre projet avec la commande « mvn clean install ».
Sous Eclipse, créez un paquetage « tsp.csc4509.common » et placez-y la classe Log.
Tout est prêt, et à partir de maintenant, pensez à utiliser cette bibliothèque pour tous vos affichages et toutes vos traces.
Ajout d'une bibliothèque pour les tests unitaires des méthodes utilisant TCP
Faire des tests unitaires de méthodes utilisant TCP, demande un vis-à-vis fiable. Pour vous aider à tester vos méthodes nous avons écrit une bibliothèque qui permet de placer un serveur en face du client que vous voulez tester, ou bien un client en face du serveur que vous voulez tester.
Pour écrire vos tests vous pouvez vous reposer sur deux aides:
- vous inspirer des exemples dans le code des tests fournis un peu plus loin (expliqués dans le document TestTCP.pdf).
- lire la documentation en ligne ;
Cette bibliothèque a été écrite spécialement pour ce devoir, et elle ne se trouve pas sur les dépôts habituels de Maven. Il faut enrichir la configuration Maven de votre projet pour lui indiquer où chercher. Pour cela nous ajoutons dans la section <project> une sous-section <repositories> avec les lignes suivantes:
Maven connaît un dépôt de plus. Il faut encore enrichir sa configuration pour lui demander d'aller y chercher la bibliothèque. Dans la section <dependencies> nous ajoutons la dépendance suivante:
Maintenant cette bibliothèque est prête pour vos tests.
Écriture des classes de communication TCP
Écriture des classes « tsp.csc4509.dm.tcp.TcpSocket » et « tsp.csc4509.dm.tcp.TcpServer »
Créez le paquetage « tsp.csc4509.dm.tcp » dans les répertoires « src/main/java » et « src/test/java ».
Placez les squelettes des classes TcpServer et TcpSocket dans le paquetage « tsp.csc4509.dm.tcp » des sources JAVA.
Placez les classes TestTcpServer et TestTcpSocket dans le paquetage « tsp.csc4509.dm.tcp » des tests JAVA.
Complétez tous les « TODO Etape 2 » des deux squelettes et des classes de tests. Laissez pour l'étape suivante les « TODO Etape 3 ». Attention, certains tests sont déjà activés dans les classes de test. Votre installation ne fonctionnera plus tant que vous n'aurez pas écrit correctement les méthodes testées ou mis ces tests en @Disabled.
Écriture des classes d'application
Copiez les classes AppliClientTcp et AppliServerTcp dans le paquetage « tsp.csc4509.dm.appli ». Complétez ces deux classes en suivant les instructions contenues dedans (et en utilisant les méthodes des classes TcpSocket et TpcServer).
Ajoutez deux nouveaux scripts dans le répertoire « scripts » : un pour lancer l'application cliente et l'autre pour lancer la partie serveur. Depuis que l'on a ajouté les bibliothèques de Log4j à notre projet, il faut indiquer à java où les trouver. Il faut ajouter les archives qui contiennent ces bibliothèques à la variable « CLASSPATH ». Pour éviter de chercher où se trouve chaque bibliothèque utilisée par notre projet nous utilisons un plugin Maven qui va toutes les réunir dans un seul et même dossier. Ce plugin est utilisé par Maven dans la phase de construction du projet, et pour cela nous complétons la section « <build> » « </build> », avec l'activation du plugin « dependency ».
Ce plugin va réunir toutes les bibliothèques utilisées par votre projet dans le dossier « target/dependency ». Il suffit donc d'ajouter à votre « CLASSPATH » toutes bibliothèques qui y sont présentes pour être sûr que toute les dépendances de votre projet sont satisfaites. Depuis JAVA 6, il est possible d'utiliser des « wildcards » (le caractère « * » ) dans la variable « CLASSPATH » pour désigner avec un seul chemin toutes bibliothèques présentes dans un dossier. C'est ce que nous faisons ici, et nous obtenons un script où il suffit de changer une seule ligne pour l'adapter à toute vos classes d'application.
Malheureusement ce script n'est pas portable sur Windows. Sur ce système le caractère « * » n'est pas autorisé dans les noms de fichier. Ainsi, il n'est pas possible d'utiliser les « wildcards » dans la variable « CLASSPATH ». De plus le séparateur ne peut être présent qu'entre deux chemins, il n'est pas possible de le placer en début ou fin de liste. Or si la variable « CLASSPATH » est vide avant l'appel du script, la nouvelle variable « CLASSPATH » commencera par ce séparateur. Pour obtenir un script portable sur tous les systèmes il faut remplacer l'utilisation des « wildcards » par une boucle, et tester si la variable « CLASSPATH » démarre à vide ou non. Voici une version portable (mais plus compliquée) du script:
$Date: 2021-04-26 01:40:50 +0200 (lun. 26 avril 2021) $