Académique Documents
Professionnel Documents
Culture Documents
EL JADIDA
Volume 1
2019 - 2020
2
Contents
3
4 CONTENTS
Chapter 1
1.1 Introduction
RMI (Remote Method Invocation) est une technologie développée et fournie par Sun à
partir du JDK 1.1 pour permettre de mettre en œuvre facilement des objets distribués.
RMI permet la communication entre machines virtuelles Java (JVM) qui peuvent se
trouver physiquement sur la même machine ou sur deux machines distinctes.
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.
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 commu-
nication, d’exécution, de renvoi et de réception du résultat.
5
6 CHAPTER 1. RMI : REMOTE METHOD INVOCATION
Les Stubs
• Représentants locaux de l’objet distribué ;
Les squelettes
• Désassemblent les paramètres pour la méthode distante ;
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.
L’interface doit contenir toutes les méthodes qui seront susceptibles d’être appelées à
distance.
Ainsi chaque méthode appelée à distance doit déclarer qu’elle est en mesure de lever
l’exception java.rmi.RemoteException.
Exemple :
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface FactImpl extends Remote {
public double Fact(double n) throws RemoteException;
}
Elle doit donc implémenter l’interface définie et contenir le code nécessaire. Cette classe
doit obligatoirement hériter de la classe UnicastRemoteObject qui contient les différents
1.4. LES ÉTAPES POUR CRÉER UN OD ET L’APPELER AVEC RMI 9
traitements élémentaires pour un objet distant dont l’appel par le stub du client est
unique. Le stub ne peut obtenir qu’une seule référence sur un objet distant héritant de
la classe UnicastRemoteObject. On peut supposer qu’une future version de RMI sera ca-
pable de faire du MultiCast, permettant à RMI de choisir parmi plusieurs objets distants
identiques la référence à fournir au client.
toutes les méthodes distantes, mais aussi le constructeur de la classe, doivent indiquer
qu’elles peuvent lever l’exception RemoteException. Ainsi, même si le constructeur ne
contient pas de code il doit être redéfini pour inhiber la génération du constructeur par
défaut qui ne lève pas cette exception.
Exemple :
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
Résultat :
12 CHAPTER 1. RMI : REMOTE METHOD INVOCATION
}
}
1.5. TP 1 : RMI 13
1.5 TP 1 : RMI
Exercice 1 :
On souhaite réaliser un serveur RMI qui offre les quatre services suivants :
• Calcule de factoriel,
2. Créer une classe qui implémente les interfaces développées dans la question 1.
3. Créer une classe Server qui publie les quatre objets distribués.
Exercice 2 :
Nous disposons de deux services implantés sous forme d’objets ObjetString et ObjetCal-
cul : un qui réalise des opérations sur les chaînes de caractère, l’autre qui réalise du calcul
numérique. Pour simplifier, l’objet ObjetString offre une seule méthode nbOccurrences
qui calcule le nombre d’occurrences d’un caractère dans une chaîne de caractères (un
mot) et l’objet ObjetCalcul offre une seule méthode add qui calcule la somme de deux
nombres. Voici le code de chacune de ces méthodes.
public int add (int a, int b) {
return a+b;
}
2. Compléter le code de ces méthodes afin qu’elles puissent gérer les erreurs dues à
leur appel à distance.
3. Sachant que toute méthode Java appelée par un programme Java distant doit ap-
partenir à un objet accessible à distance. Donnez la structure des classes Java qui
vont représenter respectivement l’objet ObjetString et l’objet ObjetCalcul.
4. Si les objets ObjetString et ObjetCalcul doivent être installés sur la machine 198.168.21.11,
quelles sont les autres classes Java à implanter sur la machine 198.168.21.11. Don-
nez leur structure générale.
5. Donnez les commandes à lancer sur la machine 198.168.21.11 afin que les méthodes
add et nbOccurrences puissent être appelées par des clients distants si le service de
noms est activé sur le port 2012.
6. Ecrire le programme du client qui doit être lancé sur une autre machine.