TP Interconnexion de Systèmes n°1

Programmation répartie avec RMI


 
Titre Réalisation d'un forum de discussion distribué sur le réseau
Organisation Binôme
Durée de réalisation 3 semaines
Temps conseillé 10h par personne
Outils nécessaires JDK = à la version 1.2 
Editeur de texte
Date de rendu fin de semaine(semaine de distribution + 3)
Contenu du rendu Un rapport explicatif (moins de 3 pages) au format html. 
L'ensemble des classes documentées <files.java
Forme du rendu Présentation au cours d'une démonstration
Boite L'interface utilisateur Talk.jar et l'accès au directory et a la doc
La version 1 de démonstration et l'accès au directory et a la doc
Sommaire 1 Rappels *
2 Objectif *
3 Spécification *
4 Informations disponibles *
4.1 Structure générale de l'application *
4.2 Les classes et interfaces *
  1. Rappels
java -classpath ... :$CLASSPATH <X.java java -classpath ... :$CLASSPATH X javadoc -d Docs *.java jar cvf X.jar <files.class
  1. Objectif

  2. L'objectif de ce TP est l'initiation à la programmation répartie. Il consiste à programmer une application typique comportant de la répartition à l'aide du mécanisme RMI de Java. Vous devez programmer les parties "client" et "serveur" de cette application et la faire exécuter dans un environnement fait de plusieurs machines virtuelles. Ces machines pouvant être sur une seule machine physique ou dispersées sur plusieurs. Vous pouvez utiliser hoff et les Pcs comme machines physiques de support.


    Schéma 1 : Schéma de principe

  3. Spécification

  4. L'objectif est la gestion d'un forum de discussion pouvant faire intervenir un nombre quelconques d'intervenants. Chaque intervenant peut émettre des messages qui sont diffusés à l'ensemble des intervenants. Les messages ne sont pas mémorisés par le forum. Seuls les intervenants présents sur le forum reçoivent les messages émis. Pour émettre un intervenant doit être connecté au forum. Le protocole d'un forum est très simple et se résume par la spécification des opérations autorisées

    Enter : permet à un intervenant de se connecter au forum

    Leave : permet à un intervenant de se déconnecter d'un forum

    Say : permet à un intervenant d'émettre un message

    Who : permet à un intervenant de connaître l'ensemble des intervenants connectés au forum

    Un intervenant ne peut être connecté qu'à un seul forum simultanément.

    Pour lancer une exécution avec le serveur RMI attaché au port <Port>,

    coté serveur, c'est la même chose qu'avant :

    rmiregistry <Port> &

    java -Djava.rmi.server.codebase= http://<X>/<ForumServer>/ -Djava.security.policy=policy Forum //<X>:<Port>/toto

    coté client, on lance avec :

    java -Djava.security.policy=policy Intervenant Claudius Chiffon

  5. Informations disponibles

  6. Ces informations sont directement accessible dans l'armoire électronique du serveur intranet de l'UFR à l'adresse relative suivante : .

    1. Structure générale de l'application

    2. Le schéma décrit la partie interface utilisateur (GUI) de l'application. Vous n'êtes concerné que par les partie non grisées qui correspondent aux interfaces fournies et à fournir. L'interface _TalkEventIntervenantAdaptator décrit les fonctionnalités pouvant être utilisées par la classe Intervenant, l'interface _IntervenantComposant décrit les fonctionnalités devant être fournies par la classe Intervenant.

      Vous trouverez dans la version 1, le code d'initialisation de la partie GUI.

    3. Les classes et interfaces
    Vous y avez accès depuis le sommaire de ce document.
  7.  Chargement distant
Afin de rendre plus souple l'utilisation de l'application, on décide de la rendre exécutable depuis un serveur qui fournit l'ensemble des classes nécessaires regroupées dans un répertoire que l'on nomme <ForumServer> sur une machine <X>. Sur une autre machine <Y>, il y a la partie cliente qui ne contient que la classe Chargeur. Il faut que l'interface Executable.java qui abstrait les classes chargeables par le chargeur soit à la fois coté client et coté serveur. Elle y est indispensable, ne serait-ce que pour compiler les autres classes. Nous souhaitons ici pouvoir exécuter des applications "Intervenant" sans disposer localement du code de cette application. Pour cela cette classe Intervenant doit implanter l'interface Chargeable. Pour des raisons de simplification de la classe ProgramLoader.java, toutes les classes doivent être directement accessibles, il vous faudra donc les extraire des fichiers .jar.

Comme vous pouvez le constater en lisant le code de Chargeur.java, le chargeur crée une instance de la première classe qu'il charge (en l'occurrence Intervenant), puis appelle la méthode main(String[]) spécifiée dans l'interface Chargeable et que la classe chargée doit implantée.

Pour lancer une exécution avec le serveur RMI attaché au port <Port>,

coté serveur, c'est la même chose qu'avant :

rmiregistry <Port> &

java -Djava.rmi.server.codebase= http://<X>/<ForumServer>/ -Djava.security.policy=policy Forum //<X>:<Port>/toto

coté client, on lance avec : java -Djava.security.policy=policy Chargeur http://<X>/<ForumServer>/Intervenant Claudius Chiffon On va chercher les classes au travers du réseau. Observez les traces au passage ...