Travaux dirigés

Java

Remote Method Invocation

Patrick.Itey@sophia.inria.fr

 

1. Un objet distribué simple

A) Objectif :

Ecrire un objet distribué possédant la méthode toUpperCase(String s).
Cette méthode - invoquée à distance par un programme client - réalisera le service de mettre en majuscules la chaine de caratères passée en argument.
 

B) Environnement informatique :

C) Travail à effectuer :

On se placera dans un répertoire de travail nommé <TD> pour toute la suite du TD :
<TD>\src : pour les sources des classes
<TD>\classes : pour les classes compilées


1) Dans un package rmi.uppercase :


2) Compiler les classes :

> set PATH=\\Ravel\Program\JDK116\bin;%PATH%
> set CLASSPATH=\\Ravel\Program\JDK116\lib\classes.zip;<TD>\classes
> javac -d <TD>\classes <TD>\src\UpperCase.java
> javac -d <TD>\classes <TD>\src\UpperCaseImpl.java
> javac -d <TD>\classes <TD>\src\UpperCaseClient.java


3) Générer les amorces (Stub/Skeleton) avec le compilateur d'amorces rmic :

> set JAVA_HOME=\\Ravel\Program\JDK116
> rmic -d <TD>\classes rmi.uppercase.UpperCaseImpl

Remarque: 2 nouveaux fichiers d'amorces ont été créés :


4) Sur une machine nommée HOST1, lancer le processus de service de dénomination sur le serveur qui met a disposition les objets distribués :

HOST1> set CLASSPATH=
HOST1> start rmiregistry

Remarque : i) pour que le programme rmiregistry fonctionne correctement, il faut l'empêcher de trouver localement les fichiers d'amorces (Stub et Skeleton) en examinant la variable CLASSPATH du système. Pour contourner ce problème, il suffit de désactiver temporairement (set CLASSPATH=) cette variable d'environnement. ii) Le programme rmiregistry peut s'exécuter en tâche de fond (start rmiregistry).

 
5) Exécuter le programme serveur enregistrant l'objet serveur :
HOST1> set CLASSPATH=<TD>\classes
HOST1> java -Djava.rmi.server.codebase=file:/<TD>\classes/ rmi.uppercase.UpperCaseImpl

Remarque : la propriété java.rmi.server.codebase indique l'endroit où se trouve tous les fichiers de classe associés à l'application (et surtout les fichiers d'amorces).

 
6) Exécuter le programme client sur une deuxieme machine HOST2 du réseau :
HOST2> set CLASSPATH=<TD>\classes
HOST2> java rmi.uppercase.UpperCaseClient <HOST1> "la chaine a mettre en majuscules"


7) Reprenez le meme exercice et accéder au service de l'objet distribué par l'intermédiaire d'une applet.
Les différentes classes nécessaires devront se situer sur le serveur Http.
 


Pour ceux qui ont déja fini ....

2. Un agent qui fait les courses

On dispose d'un ensemble de boutiques vendant un certains nombre de articles communs ou non. Les boutiques sont reparties sur des machines distantes et chaque boutique est materialisé par un objet distribué. Un agent, auquel on indique la liste des boutiques et celle des articles à acheter, recherche pour chaque article les boutiques les moins chères et passe les commandes. Modelisez ce systeme avec RMI. L'agent sera lancé avec la liste des boutiques (URL RMI) et la liste des articles à acheter.
fréquence variable le serveur de récéption en lui fournissant l'état de la donnée. Prévoyez le désabonnement du client.