Université de Reims Champagne-Ardenne TIP2P : Techniques Internet et systèmes pair à pair Année 2007/2008 JXTA TP 1 - 2 1 Informations Préliminaires 1.1 Comment compiler et exécuter un programme JXTA 1.1.1 Si vous utilisez Eclipse comme environnement de travail 1) Créer sous éclipse un nouveau projet TP1-TIP2P à partir de l’archive tp2-tip2p.zip dézippée. Ce projet se décompose en deux répertoires : ● lib contient l’ensemble des fichiers .jar nécessaires à la compilation et l’exécution de vos programmes sous JXTA. ● test contient les fichiers de prise en main de JXTA ● propagate contient les fichiers pour la dernière partie des expériences 1.1.2 Si vous préférez la compilation par ligne de commande Dézippez l'archive tp1-tip2p.zip. Pour compiler, vous utilisez javac avec la bibliothèque jxta.jar dans le classpath javac -classpath ./lib/jxta.jar test/fichier.java Pour exécuter l'application il faut rajouter, aussi les autres bibliothèques dans le répertoire lib. java -classpath ./lib/jxta.jar:./lib/bcprov-jdk14.jar:(...):. test.fichier 1.2 Configuration au premier lancement de JXTA Pour le premier lancement de JXTA vous obtenez une fenêtre de configuration qui est composée de quatre sous menu : Basic, Advanced , Rendezvous/Relays et Security. 1) Dans le menu Basic vous devez saisir le nom du Peer (figure 1). 2) Dans le menu Advanced vous choisissez l'adresse IP de la machine (dans le menu déroulant) et dans la partie HTTP Settings vous décochez le point Enabled (figure 2). 3) Dans le menu Rendezvous/Relays vous pouvez laisser les options par default (figure 3). 4) Dans le menu Security il faut donner un nom d'utilisateur et le mot de passe qui vous sera demandé à chaque fois que relancer votre application (figure 4). Figure 1: Configuration de base Figure 2: Configuration Avancée Figure 4: Configuration du Rendezvous/Relay Figure 3: Configuration mot de passe 1.3 Documents utiles La documentation javadoc JXTA est disponible à l’adresse suivante : https://jxta-docs.dev.java.net/nonav/jxse-javadoc/2.5/jxse/api/index.html Un guide du programmer est disponible à l’adresse suivante : https://jxta-guide.dev.java.net/source/browse/jxta-guide/trunk/src/guide_v2.5/ http://stromboli3.int-edu.eu/~defude/P2P/JXTA/ 2 Activités 2.1 Helloworld Analysez, testez et commentez la classe HelloWorld.java. Idéntifiez les structures de base pour déclarer un peer jxta, pour se connecter à un groupe et afficher un advertisement. ATTENTION : pour le premier lancement de JXTA, il est nécessaire de configurer votre machine. Remarque : Si tout s’est bien passé, un répertoire .jxta a été créé dans votre répertoire courant. 2.2 Créer un groupe Analyser et modifier le code de la classe GroupCreate.java, afin de créer votre propre groupe. Testez et commentez la classe ! 2.3 Découverte de groupes de paires 1. Exécutez deux instances de PeerDiscovery (dans des répertoires ou des projets différents). Quel est le résultat ? 2. Exécutez deux instances de GroupDiscovery (dans des répertoires différents). Quel est le résultat ? Expliquez. 3. Exécutez une instance de GroupDiscovery et une instance de GroupCreate (dans des répertoires différents). Quel est le résultat maintenant ? 4. Pourquoi le groupe crée dans la méthode GroupDiscovery.startJxta() n'est pas affiché ? 2.4 Caches Modifiez le code de GroupCreate pour changer le nom de votre groupe. 1. Exécutez une instance de GroupDiscovery et une instance de GroupCreate (dans des répertoires différents). Quels sont les groupes affichés (la découverte peut prendre un certain temps) ? 2. Effacez le répertoire .jxta/cm (le répertoire où est stocké le cache des ressources) 3. Refaire l'étape 1 4. Modifiez le code de GroupDiscovery afin d'utiliser la méthode getLocalAdvertisements(int type, String attribute, String value). Quelle est la différence entre cet appel et celui de getRemoteAdvertisements() ? 2.5 Pipe de communication entre deux pairs Cet exemple montre comment utiliser des pipes pour envoyer des messages entre deux pairs JXTA et comment implémenter l'interface Rendezvous Listener. Deux applications séparées sont utilisées pour cet exemple : ● ● : lit le fichier de publication examplepipe.adv, crée un input pipe et écoute les messages dans ce pipe. PipeExample : lit le fichier de publication examplepipe.adv, crée un output pipe et envoie les messages dans ce pipe. PipeListener 1. Analyser, tester et commenter le code des classes PipeExample.java et PipeListener.java. Idéntifiez les procédures liées à l'envoi et à la réception des messages, ainsi qu'à la déclaration des ressources (pipe). 2.6 Diffusion Les pipes utilisés jusqu'à présent ont servi uniquement pour la communication entre deux peers. Afin d'envoyer un message à plusieurs peers, nous pouvons utiliser un « PropagatePipe ». 1. Cherchez dans la documentation une description des caractéristiques des PropagatePipe. 2. Allez dans le répertoire propagatePipes. Étudiez attentivement le code de sender et receiver, et indiquez dans le rapport s'il existent des différences entre la déclaration d'un PropagatePipe et d'un « Pipe standard ». 3. Faites tourner sender et deux instances de receiver (répertoires receiver1 et receiver2) et décrivez ce que vous observez. 4. À cause d'un oubli, les messages envoyés ne portent aucune information. Corrigez le code de sender. Vous pouvez vous inspirer du code de PipeExample (et faites attention à envoyer des informations dans le format attendu par receiver). 3 Rapport Envoyez un fichier ZIP avec vos rapports en format PDF et le code que vous avez écrit (exercice 2.6) à l'adresse [email protected]. N'oubliez pas de mettre le nom des membre du binôme.