Vous êtes sur la page 1sur 34

Université Cadi Ayyad

Ecole Supérieure de Technologie - Safi

Programmation orientée objet (JAVA)


RMI – Remote Method Invocation
Encadré par:
Pr. SAID EL ABDELLAOUI

Réalisé par:
Ayoub NAINIA, Ayoub OUMALEK, Ali BAHHAR
Sommaire
Introduction à la méthode d’invocation distante.

• Applications distribuées.
• Le fonctionnement de RMI.

L’architecture RMI.

• Stub & Skeleton.


• Remote Reference Layer (Annuaire RMIREGISTRY).
• Couche de transport.

Démarche RMI (approche pratique).

• Réalisation de l’application.
• Le serveur RMI.
• Le client RMI.
• Le processus RMI
• Lancement du serveur et exécution à distance de l’application.

Bonus: exercice interactif.

Conclusion et perspective.
Introduction à la méthode d’invocation distante (RMI)
1. Applications distribuées

• RMI est une API qui fournit un mécanisme qui permet de créer des applications
distribuées en JAVA
Application distribuée

Machine 1 Machine 2
Transport
Application 1 Application 2

Technologies d’accès:
• Sockets
• RMI
• CORBA
•…
3
Introduction à la méthode d’invocation distante (RMI)
2. Le fonctionnement de RMI?

• Architecture distribuée: Serveur et Client:

• RMI assure la communication entre le serveur et le client via la couche du transport


selon un protocole de transmission de données, et ce de manière transparente
pour le développeur.
4
Introduction à la méthode d’invocation distante (RMI)
2. Le fonctionnement de RMI?

L’architecture RMI est basée sur un principe important:

• Interface/implémentation.
• La définition du comportement et l’exécution de ce comportement sont des
concepts séparés.
5
L’architecture RMI
1. L’architecture RMI

• RMI est essentiellement construit sur une abstraction en trois couches:

6
L’architecture RMI
2. Le stub (souche)

• Le stub est une classe placée dans le client RMI.


• C’est le représentant local de l’objet distant.
• Il communique avec l’objet distant par l’intermédiaire d’un Skeleton.

7
L’architecture RMI
3. Le skeleton (squelette)

• Le Skeleton devra être placé sur la machine du serveur.


• Il déballe les paramètres de la méthode distante, les transmet à l’objet local et
emballe les valeurs de retours à renvoyer au client.

8
L’architecture RMI
4. Remote Reference Layer

• C’est la couche de référencement distante qui est assuré par le lancement


de l’annuaire RMIREGISTRY du côté du serveur.

Annuaire lancé par le serveur pour enregistrer la référence


d’objet distant pour les clients afin de les récupérer.

RMI Registry

Récupéré l’objet de l’annuaire Publie l’objet dans l’annuaire


en utilisant lookup() avec rebind()

Client Serveur

9
L’architecture RMI
5. La couche du transport

Machine 1 Machine 2
TCP IP ou UDP

Application 1 Application 2

• Cette couche est basée sur les connexions TCP/IP entre les machines.
• Elle fournit la connectivité de base entre les 2 JVM.
• Elle suit les connexions en cours.
• Elle construit une table des objets distants disponibles.
• Elle utilise aussi un protocole propriétaire R.M.P. (Remote Method Protocol).
10
Démarche RMI (approche pratique)
1. Réalisation de l’application

• Notre application RMI sera répartie sur deux projets Java, le premier projet
représente le Serveur, le deuxième représente le Client.
• Le principe de cette application est d’appliquer la démarche générale de RMI, cela
veut dire que le Client doit implémenter les méthodes distantes, qu’on va les créer
dans le Serveur, comme s’ils étaient crées localement.
• Notre application va permettre au client de:
1. Consulter un compte.
2. Convertir un montant de l’euro en dirhame.
3. Consulter une liste de compte.

11
Démarche RMI (approche pratique)
2. Le Serveur RMI
2.1 Vue d’ensemble

rmi

1. double conversion(double montant)


L’interface qui contient les méthodes distantes. 2. Compte consulterCompte(int code)
3. List<Compte> listComptes()
L’implémentation de l’interface (c’est une class).

C’est un objet métier qu’on doit le créer.


métier
default

La classe Compte.
La classe ServeurRMI.
12
• Démarche RMI (approche pratique)
rmi
2. Le Serveur RMI
2.2 L’interface Remote
IBanqueRemote.java
Java.rmi.Remote

2. Pour que ces méthodes soient accessible


par le client, cette interface doit hériter de la
classe Remote.
1. Créer une interface distante qui décrit IBanqueRemote.java
les méthodes que le client pourra invoquer
à distance. conversion(double mt): double
consulterCompte(int code): Compte
listeCompte(): Liste<Compte>
3. Chaque méthode doit lever
le RemoteException.

RemoteException

13
• Démarche RMI (approche pratique)
rmi
2. Le Serveur RMI
2.3 L’implémentation
IBanqueRemote.java
Java.rmi.Server.UnicastRemoteObject IBanqueRemote Implémentation.java
(Skeleton) conversion(double mt): double
consulterCompte(int code): Compte
listeCompte(): Liste<Compte>

1. extends
ImpBanqueRMI
ImpBanqueRMI() 2. implements

@Override

3. Lever le RemoteException
RemoteException pour chaque méthode.
14
• Démarche RMI (approche pratique)
métiers
2. Le Serveur RMI
2.4 L’objet métier
Java.io.Serializable Compte.java

Implements
Compte
Compte(code, solde, date)

Getter & Setters

• La classe Compte doit être serialisable puisqu’on va créer le compte dans une machine et on va l’envoyer
vers une autre.
• Les objets qui sont déclarés dans l’interface Remote doivent être serialisable.
• Pour qu’un objet soit serialisable on doit implémenter l’interface Serializable.
15
• Démarche RMI (approche pratique)
default
2. Le Serveur RMI
2.5 Skeleton
ServeurRMI.java
ServeurRMI
1. Démarrage de l’annuaire RMIregistry
2. Création de l’objet distant
3. Publier la référence de l’objet distant dans
l’annuaire

• Avant de démarrer le serveur il faut tout d’abord démarrer l’annuaire.


• Pour publier la référence de l’objet dans l’annuaire, on utilise la méthode rebind() de la classe Naming.
Num port

Naming.rebind(‘’rmi://localhost:1099/Banque’’, od);

@IP de l’annuaire nomObject Objet distant 16


• Démarche RMI (approche pratique)
2. Le Serveur RMI
Serveur
2.6 Vue d’ensemble
1. Créer l’objet distant
od: BanqueRmiService
conversion (double montant):double
consulterCompte (int code):Compte

: SKELETON
Port = x

Naming service: Ip et Port connues

Nom de l’objet distant Référence de l’objet distant 2. Publier la réf de l’objet


distant
Banque Réf 1: IP / Port / @mémoire

17
• Démarche RMI (approche pratique)
3. Le Client RMI
3.1 Vue d’ensemble

default

La classe ClientRMI (STUB).

• Le client devrait avoir l’interface Remote et la classe Client.


• Copier et puis coller les packages du serveur vers le client n’est pas pratique, c’est pour cela on
génère un fichier.jar à partir du serveur qui va contenir ce que le Client doit avoir.

C’est un fichier ZIP utilisé pour distribuer un ensemble de classes Java.


18
• Démarche RMI (approche pratique)
3. Le Client RMI
3.1 Vue d’ensemble

• Puisqu’on va utiliser le client.jar, ca sera plus pratique de créer un lanceur de notre application
qui contient le chemin vers notre client.jar et qui va s’exécuter dans la ligne de commande.

Le contenu de notre client.bat

19
• Démarche RMI (approche pratique)
default
3. Le Client RMI
3.2 Stub
ClientRMI ClientRMI.java
1. Création du Stub.
2. Obtenir le référence d’un objet distant.
3. Implémenter les méthodes distante.

• Pour obtenir la référence de l’objet distant, on utilise la méthode lookup() de la classe Naming.

Num port

Naming.lookup(‘’rmi://localhost:1099/Banque’’);

@IP de l’annuaire nomObject

• Le client devrait avoir l’interface Remote, et la classe Compte pour implémenter les méthodes de
l’objet métier. 20
• Démarche RMI (approche pratique)
3. Le Client RMI
Serveur
3.3 Vue d’ensemble
1. Créer l’objet distant
od: BanqueRmiService
4. Créer le STUB
Client conversion (double montant):double
consulterCompte (int code):Compte
6. Conversion(5)
8. Conversion(5) 9. Résultat

: STUB 5. Connexion : SKELETON


7. Conversion(5) Port = x

Naming service: Ip et Port connues

Nom de l’objet distant Référence de l’objet distant 2. Publier la réf de l’objet


3. Récupérer la réf de distant
Banque Réf 1: IP / Port / @mémoire
l’objet distant

21
Exécution

22
• Démarche RMI (approche pratique)
4. Exécution avec deux machine distantes

• Pour permettre la communication avec un serveur distant en échangeant des lignes de texte et
en recevant des réponses également sous forme de texte, on active le protocole Telnet.

23
• Démarche RMI (approche pratique)
4. Exécution avec deux machine distantes

• Dans la ligne de commande, on utilise Telnet pour qu’on puisse communiquer a distance avec le
serveur, de la manière suivante:

telnet @IP_Serveur num_Port

L’utilisation du Telnet.

24
• Bonus (exercice interactif - JeuRMI)
1. Réalisation de l’application

• Cette exercice va nous permettre de renforcer la compréhension du processus RMI.


• Notre application est un jeu interactif avec le serveur:
1. Le serveur va générer un nombre aléatoire.
2. L’utilisateur va jouer en entrant un nombre afin de deviner le nombre générer
par le serveur.
3. L’utilisateur reçoit une indication concernant le nombre saisi (plus petit, plus
grand ou bravo).

25
• Bonus (exercice interactif - JeuRMI)
2. Le Serveur Jeu RMI
2.1 Overview

jeuRMI
1. String jouer(int nombre)

L’interface qui contient les méthodes distantes.


1. Constructeur.
L’implémentation de l’interface. 2. void genererSecret()
3. @Override
ServeurJeuRMI.java

26
• Bonus (exercice interactif - JeuRMI)
jeuRMI
2. Le Serveur Jeu RMI
2.2 L’interface Remote
IJeuRemote.java
Java.rmi.Remote
2. Pour que cette méthode soit accessible
par le client, cette interface doit hériter de la
classe Remote.

1. Créer une interface distante qui décrit IJeuRemote.java


la méthodes que le client pourra invoquer
à distance.
jouer(int nombre): String

3. La méthode doit lever le


RemoteException.

RemoteException

27
• Bonus (exercice interactif - JeuRMI)
jeuRMI
2. Le Serveur Jeu RMI
2.3 L’implémentation
IJeuRemote.java
Java.rmi.Server.UnicastRemoteObject IJeuRemote.java JeuImplémentation.java
(Skeleton) jouer(int nombre): String

1. extends
JeuImplementation.java
JeuImplementation() 2. implements

void genererSecret()

@Override

3. Lever le RemoteException
RemoteException pour chaque méthode.
28
• Bonus (exercice interactif - JeuRMI)
jeuRMI
2. Le Serveur Jeu RMI
2.4 Skeleton
IJeuRemote.java

ServeurJeuRMI.java JeuImplémentation.java

1. Démarrage de l’annuaire RMIregistry ServeurRMI.java

2. Création de l’objet distant


3. Publier la référence de l’objet distant dans
l’annuaire

Num port Objet distant

Naming.rebind(‘’rmi://localhost:1099/JEU’’, jeu);

@IP de l’annuaire nomObject


29
• Bonus (exercice interactif - JeuRMI)
3. Le Client Jeu RMI
3.1 Vue d’ensemble

default

ClientJeuRMI (STUB).

• Le client devrait avoir l’interface Remote qui contient la méthode distante.

C’est un fichier ZIP utilisé pour distribuer un ensemble de classes Java.

30
• Bonus (exercice interactif - JeuRMI)
default
3. Le Client Jeu RMI
3.2 Stub
ClientJeuRMI.java
ClientJeuRMI.java
1. Création du Stub.
2. Obtenir le référence d’un objet distant.
3. Implémenter les méthodes distante.

• Pour obtenir la référence de l’objet distant, on utilise la méthode lookup() de la classe Naming.

Num port

Naming.lookup(‘’rmi://localhost:1099/JEU’’);

@IP de l’annuaire nomObject

31
Exécution

32
Conclusion et perspective

33
Merci pour votre attention!

34

Vous aimerez peut-être aussi