Université Louis Pasteur
LICENCE 3ème année


 

Travaux Pratiques
de

Programmation Distribuée

(sujet n°3)

Remote Method Invocation (RMI)



Télécharger ces exemples.

    La documentation Java est disponible à cette adresse.

   Pour tous les exercices : pensez bien à tuer tous vos processus à chaque fois que vous vous délogez d'une machine Linux. En ce qui concerne les processus java ou rmiregistry, vous pouvez utiliser les commandes suivantes : pkill java ; pkill rmiregistry


Exercice 1

    Vous trouverez votre premier code RMI dans le répertoire MessageExercice. Il s'agit d'un exemple simple d'appel java RMI. Vous devez le compléter (en vous servant du cours !), puis le compiler et l'exécuter. Dans un premier temps lancez toutes les commandes sur votre propre ordinateur. Dans un second temps, (si vous disposez de plusieurs machines) placez le serveur et le client sur deux machines différentes.

    1. Effectuez la compilation avec les commandes :

      javac *.java

      rmic MessageImpl

  
    2. Lancez le serveur de noms sur une machine (ici à l'écoute du port 2001) :

      rmiregistry 2001 &


   3. Lancez le serveur sur la même machine

       java Serveur 2001 &
   
   4. Lancer un client
  
       java Client <machine serveur>:2001



Exercice 2

    Rendez-vous dans le répertoire TelephoneExercice. Voila un exemple simple d'appel java RMI depuis une applet. Vous devez le compiler puis le faire fonctionner.

    1. Lancez le serveur de noms sur votre propre machine

    rmiregistry 2002 &

   puis lancez le serveur

    java AnnuaireImpl 2002 & 
   
    2. Lancez le client sur la même machine (votre machine). Remarquez les paramètres passés dans le fichier AppletClient.html.
   
    appletviewer AppletClient.html

    3. Ajoutez les fonctionnalités d'ajout et d'effacement d'une entrée dans l'annuaire téléphonique. Vous concevrez ensuite deux petits clients distincts QUI NE SERONT PAS DES APPLETS (ils ressembleront au client de l'exercice 1.).

   Ils pourront être appelés de la maniere suivante :

              java Ajoute <nom d'une personne> <No Telephone>
          java Supprime <nom d'une personne>


   Ils contacteront l'annuaire distant pour réaliser les opérations d'ajout et de suppression demandées.
  
   Remarque : voir la documentation Java, chercher la classe Hashtable puis les méthodes put et remove.

    4. Ecrire un nouveau client Lister qui affiche à l'écran la liste des entrées de l'annuaire.
  
   Remarque : vous pourrez utiliser dans la fonction que vous écrirez dans AnnuaireImpl.java, la ligne de code : Iterator it = numeros.keySet().iterator();. A l'aide de cet itérateur, vous pourrez parcourir la liste et en afficher chacun des elements.

    5. Lancez le serveur de noms et le serveur d'annuaire sur une autre machine que la votre. Lancer l'applet depuis votre machine. Cela ne doit pas marcher ! une exception du type "access denied" est levée. Pour résoudre le problème de droit que cela pose utiliser la commande :

    $ appletviewer -J-Djava.security.policy=../TelephoneTelecharge/java.policy AppletClient.html



Exercice 3

    On désire implanter un serveur de calcul sur des matrices n x n à coefficients réels qui offre comme service : - la multiplication de deux matrices. Vous utiliserez pour ce service distant l'interface fournie dans le fichier OpMatrice.java

    Remarque : la formule à utiliser pour C = A.B est :            
           pour tout i,j, on a c[i][j] = (Somme sur k de) a[i][k]*b[k][j];

    Mettre en place un tel serveur. Il devra pouvoir être appelé par un client depuis une autre machine. Vous appellerez à distance une méthode qui effectuera la multiplication des matrices (envoyées par le client) :
      int[][] a = { {1, 0, 0}, {0, 2, 0}, {0, 0, 3} };
    int[][] b = { {1, 2, 3}, {1, 2, 3}, {1, 2, 3} };

    Vous afficherez le résultat (pour cela vous écrirez une méthode qui se chargera de l'affichage).






[Page réalisée à partir d'un document de Guillaume Latu]