IUT Nancy Charlemagne Travaux Dirigés Programmation Distribuée S4 Java et RMI – Annuaire • Package à utiliser : java.rmi, java.rmi.registry Récupérez le fichier “TDAddressBook.zip” dans l'ENT et décompressez-le sur votre machine. Cette archive contient tout le nécessaire pour exécuter une mini-application client/serveur de gestion d'un carnet d'adresses. Elle contient 3 répertoires correspondant à des packages: • le package addressBookClient contient le code compilé de la partie cliente, • le package addressBookServer contient le code du serveur, • le package addressBook contient le source de l'interface et la classe utilisée dans l'interface. Pour rappel, prenez le temps de relire la partie du cours de Complément Java traitant des package et classpath (disponible sur arche), vous allez vite être confrontés à des difficultés liées à ces notions. Exercice 1 : Démarrez cette application à partir du répertoire dans lequel l'archive a été décompressée : • lancer rmiregistry (attention : le classpath DOIT être vide), • lancez le serveur (addressBookServer.AddressBookServer), • lancez le client. Le client reçoit en paramètre le nom de la machine serveur. Essayez avec votre serveur (localhost) puis avec le même client, accédez au serveur de votre voisin. Vérifiez que vous arrivez à vous connecter au serveur lancé par votre enseignant. Écrivez les scripts permettant d’effectuer les bonnes opérations dans l'ordre (un script pour lancer rmiregistry, un script pour le lancement du client, un pour le lancement du serveur). Exercice 2 : Créez un package monClient et écrivez votre propre client. Utilisez l'interface AddressBook.java qui est fournie. SURTOUT NE LA MODIFIEZ PAS. Dans votre client, faites quelques “get” pour récupérer des entrées, puis quelques “add” pour en ajouter. Vérifiez que ces entrées sont bien insérées. Le serveur est enregistré sous le nom 'AddressBook' dans l'annuaire rmiregistry (faites particulièrement attention à l'orthographe et aux majuscules). Faites valider votre client en vous connectant au serveur lancé par votre enseignant. Exercice 3 : Écrivez votre propre serveur dans un package monServeur. Vous allez séparer le serveur en deux parties • une classe MonAddressBook chargée d'implémenter le service distant et de répondre aux demandes du client • une classe LancerServeur contenant un main chargée MonAddressBook, le proxy et de l'enregistrer correctement. de créer l'objet La classe MonAddressBook doit implanter les méthodes de l'interface distante (rechercher une entrée, ajouter une entrée). Elle fonctionne de la même manière qu'une classe habituelle (si ce n'est qu'elle implémente une interface héritant de Remote) et correspond au code que le serveur exécutera. Cette classe utilise un attribut privé Map<String,AddressBookEntry> entrees, chargé de stocker les adresses des personnes connues dans l'annuaire. La classe LancerServeur contient une méthode main chargée de créer puis d'exporter l'objet de la classe MonAddressBook et d'enregistrer le proxy dans le rmiregistry. Faites valider par votre enseignant qui devrait pouvoir se connecter à votre serveur. Exercice 4 : Tout reste assez simple lorsque le rmiregistry est lancé dans les répertoires contenant les .class du serveur. Mais il arrive fréquemment que ce ne soit pas le cas (lorsqu'il y plusieurs serveurs dans des répertoires différents par exemple, …) Dans ces cas, il est nécessaire de préciser à l'enregistrement du proxy l'endroit où trouver les fichiers nécessaires au proxy. Cela se fait grâce à la propriété java.rmi.server.codebase qui désigne l'URL où trouver ces fichiers. • Il est donc nécessaire de spécifier le codebase lors du lancement du serveur avec l'option -Djava.rmi.server .codebase=url • l'URL doit avoir une forme valide, à savoir par exemple file:///c:/temp/bin/ ◦ il s'agit de slash et non d'antislash ◦ le répertoire ne doit pas contenir d'espace. Créez un fichier jar contenant le package addressBook, supprimez le répertoire addressBook et lancez le serveur en lui passant le bon classpath et le bon codebase (utilisez le .jar).