Java et RMI – Annuaire

publicité
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).
Téléchargement