
Exemple de base d'un client/serveur en RMI
------------------------------------------

Fichiers
--------
Le programmeur ecrit :
o Serveur.java : classe qui 
      a) definit la securite
      b) cree une instance d'un objet serveur (le service)
      c) l'enregistre dans le rmiregistry pour que le client trouve ce service

o {Operation,OperationImpl}.java : c'est notre exemple de service.
  Propose ici une methode d'addition de deux entiers.
  Operation.java     : interface utilisee par le client
  OperationImpl.java : classe implementant Operation, lancee par le serveur

o Client.java : le code utilisant l'interface Operation 
  

Compilation
-----------

o Si vous avez un JDK >= 1.5, vous pouvez plus simplement compiler les sources
  avec javac sans rmic.


    client                           serveur
    ------                           -------
    Client.class                     Serveur.class
    Operation.class                  OperationImpl.class

    <------------ avant jdk1.5 ----------------------------->                                     
                                     OperationImpl_Skel.class
   [OperationImpl_Stub.class         OperationImpl_Stub.class 


Execution
---------

1. Si vous commencez par une excution locale pour tester,
   crez des rpertoires diffrents pour le client et le serveur
   pour vrifier qui utilise quoi.

   mkdir dir_server
   mkdir dir_client
   
   Copiez les .class appropris dans ces rpertoires.


2. Lancer le serveur

cd dir_server
rmiregistry &     # "start rmiregistry" avec Windows
java -Djava.security.policy=java.policy Serveur localhost


N.B.: Lancer le rmiregistry dans le mme rpertoire que le serveur (o se trouve OperationImpl_Stub.class ou OperationImpl.class) est bien commode car le CLASSPATH contient le rpertoire courant par dfaut. Si vous lancez rmiregistry ailleurs, il faut que le CLASSPATH pointe vers o se trouve OperationImpl_Stub.class ou OperationImpl.class.

3. Lancer le client

cd dir_client 
java Client localhost


N.B.: Il est necessaire d'assouplir la politique de securite (sur le serveur) par defaut, en utilisant par exemple le java.policy ci-dessous (-Djava.security.policy). 

grant {
    permission java.net.SocketPermission "*:80-65535","connect,accept,listen,resolve";
    permission java.security.AllPermission;
};


