RMI
===
Exemple de d'application distribuee ou l'implementation d'un objet (class file) 
est telechargee dynamiquement (i.e. pendant l'execution du programme). 

Pour telecharger le class file RMI utilise la classe java.net.URLConnection.
La methode la plus empolyee est le tgransfert sur http. 
Dans l'exemple, nous mettons a disposition les implementations sur un serveur web.
Pour informer le serveur de l'emplacement de telechargement, on utilise 
-Djava.rmi.server.codebase=<URL>. Alternativement, on peut specifier cet emplacement 
par programme.

Dans l'exemple, on suppose que l'objet serveur tourne sur la machine machineserveur.foo.org 
et que le class file a telecharger est sur depot.foo.org .

Les fichiers
============

Pour le client et le serveur
----------------------------
    Compute.java      (le modele generique d'execution (interface))
    Task.java         (le modele generique de tache (interface))

Pour le serveur
---------------
    ComputeImpl.java  (l'implementation du declenchement execution)
    Server.java       (le serveur enregistre l'objet Remote)

Pour le client
--------------
    Pi.java           (le code d'une tache specifique)
    Client.java       (appelle le calcul d'une tache specifique)


Compilation
===========


1. Serveur
----------
   mkdir compute
   cd compute/
   javac -d . ../{Compute,ComputeImpl,Server,Task}.java

2. Client
---------
   mkdir client
   cd client/
   javac -d . ../{Compute,Task,Pi,Client}.java
   <copie du Pi.class vers le repertoire ou il sera accessible grace au serveur web>
  

Execution
=========

1. Demarrer le serveur
----------------------
Avant de demarrer le serveur, il faut lancer le registre RMI (commande rmiregistry). 
Attention : si le CLASSPATH est positionne, et qu'il permet au registre de trouver les class 
et les stubs generes pour les objets remote, il n'indiquera pas aux clients qui se connectent, 
l'URL specifiee par java.rmi.server.codebase (la valeur de cette variable sera alors ignoree).
N.B. Ne pas oublier le "/" final si l'URL se termine par un repertoire.

   export CLASSPATH=""
   rmiregistry &

   java -Djava.security.policy=../accesssocket -Djava.rmi.server.codebase="http://depot.foo.org/classes/" Server
   

2. Demarrer  le client
----------------------
java -Djava.security.policy=../accesssocket  Client machineserveur.foo.org  3


