Vous êtes sur la page 1sur 8

TP JAVA RMI

La présentation et l'architecture de RMI


Le but de RMI est de permettre l'appel, l'exécution et le renvoi du résultat d'une méthode
exécutée dans une machine virtuelle différente de celle de l'objet l'appelant. Cette machine
virtuelle peut être sur une machine différente pourvu qu'elle soit accessible par le réseau.
La machine sur laquelle s'exécute la méthode distante est appelée serveur.
L'appel coté client d'une telle méthode est un peu plus compliqué que l'appel d'une méthode
d'un objet local mais il reste simple. Il consiste à obtenir une référence sur l'objet distant puis à
simplement appeler la méthode à partir de cette référence.
La technologie RMI se charge de rendre transparente la localisation de l'objet distant, son appel
et le renvoi du résultat.
En fait, elle utilise deux classes particulières, le stub et le skeleton, qui doivent être générées
avec l'outil rmic fourni avec le JDK.
Le stub est une classe qui se situe côté client et le skeleton est son homologue coté serveur. Ces
deux classes se chargent d'assurer tous les mécanismes d'appel, de communication, d'exécution,
de renvoi et de réception du résultat.
Les différentes étapes pour créer un objet distant et l'appeler avec RMI
Le développement coté serveur se compose de :
● La définition d'une interface qui contient les méthodes qui peuvent être appelées à
distance
● L'écriture d'une classe qui implémente cette interface
● L'écriture d'une classe qui instanciera l'objet et l'enregistrera en lui affectant un nom
dans le registre de noms RMI (RMI Registry)
Le développement côté client se compose de :
● L'obtention d'une référence sur l'objet distant à partir de son nom
● L'appel à la méthode à partir de cette référence
Enfin, il faut générer les classes stub et skeleton en exécutant le programme rmic avec le
fichier source de l'objet distant.

Example du RMI « additionneur »


La structure du projet créé à l'aide d'Eclipse tout au long de ce tutoriel est illustrée ci-dessous:

1. Côté Serveur
▪ Créons un nouveau projet Java en utilisant Eclipse (ou NetBeans ou un autre éditeur
que vous préférez), et nommé-le : RMIServerSide-> Click Finish une fois terminé.
▪ Créer une interface sous le projet RMIServerSide, Select New -> Interface

▪ Donner à l’interface comme nom: AdditionInterface –>Click Finish.


▪ Copier le bout de code suivant dans l’interface AdditionInterface.
1. import java.rmi.*;
2.
3. public interface AdditionInterface extends Remote {
4. public int add(int a,int b) throws RemoteException;
5. }

▪ Selectionner le projet RMIServerSide, Click New -> Class, nommé-le Addition


▪ Copier le bout de code suivant dans le classe Addition .
1. import java.rmi.*;
2. import java.rmi.server.*;
3.
4. public class Addition extends UnicastRemoteObject
5. implements AdditionInterface {
6.
7. public Addition () throws RemoteException { }
8.
9. public int add(int a, int b) throws RemoteException {
10. int result=a+b;
11. return result;
12. }
13. }

▪ Selectionner le projet RMIServerSide, Click New -> Class, nommé-le AdditionServer


▪ Copier le bout de code suivant dans le classe AdditionServer

1. import java.rmi.*;
2. import java.rmi.server.*;
3.
4. public class AdditionServer {
5. public static void main (String[] argv) {
6. try {
7. System.setSecurityManager(new RMISecurityManager());
8.
9. Addition Hello = new Addition();

10. Naming.rebind("rmi://localhost/ABC", Hello);


11.
12. System.out.println("Addition Server is ready.");
13. }catch (Exception e) {
14. System.out.println("Addition Server failed: " + e);
15. }
16. }
17. }
2. Côté Client
▪ Créons un nouveau Projet Java en utilisant Eclipse (ou NetBeans ou un autre éditeur que
vous préférez), et nommé-le : RMIClientSide-> Click Finish une fois terminé.
▪ Selectionner le projet RMIClientSide, Click New -> Interface, nommé
le: AdditionInterface, Click Finish.
▪ Copier le code suivant dans l’interface AdditionInterface :
1. import java.rmi.*;
2.
3. public interface AdditionInterface extends Remote {
4. public int Add(int a,int b) throws RemoteException;
5. }
▪ Selectionner le projet RMIClientSide, Click New -> Class, nommer le
classe: AdditionClient, Click Finish.
▪ Copier le code suivant dans le classe AdditionClient .
1. import java.rmi.*;
2.
3. public class AdditionClient {
4. public static void main (String[] args) {
5. AdditionInterface hello;
6. try {
7. System.setSecurityManager(new RMISecurityManager());
8. hello = (AdditionInterface)Naming.lookup("rmi://localhost/ABC");
9. int result=hello.add(9,10);
10. System.out.println("Result is :"+result);
11.
12. }catch (Exception e) {
13. System.out.println("HelloClient exception: " + e);
14. }
15. }
16. }

3. Execution
▪ Ouvrir l’invite de commande ( DOS Console ).
▪ L'emplacement de votre projet peut être connu en cliquant: Sélectionner le
projet RMIServerSide, cliquer bouton droit-> Properties
▪ Dans la fenêtre noire CMD, tapez l'emplacement complet du dossier :
cd C:\location\RMIServerSide\src
Appuyez sur Enter
▪ Compilez les fichiers java (pour le côté Serveur et le côté Client), tapez la fenêtre cmd:
javac *.java  Appuyer Enter
▪ Pour générer la classe stub pour l’objet distant Addition. Exécuter les commandes
suivantes:
rmic Addition  Appuyez Enter
rmiregistry  Appuyez Enter
▪ Configurer l'Éclipse comme suivant: Sélectionner le projet RMIServerSide,
cliquer: Run -> Run Configurations

▪ Tout d’abord, sélectionner la classe principale AdditionServer, ensuite, cliquer sur


l’onglet Arguments et taper les deux lignes suivants dans le VM arguments:
-Djava.security.policy=file:${workspace_loc}/RMIServerSide/security.policy -
Djava.rmi.server.codebase=file:${workspace_loc}/RMIServerSide/bin/

▪ Click APPLY –> RUN. C'est tout pour le côté serveur.

Vous aimerez peut-être aussi