RPC_RMI-1
RPC_RMI-1
RPC_RMI-1
Objectif de ce cours
2
Middleware RPC
⚫ Applications structurées en 2 parties
◦ le programme principal
◦ un ensemble de procédures
⚫ Principe de fonctionnement
programme principal et procédures sont
compilés et liés
au moment de l’exécution
- le programme principal appelle les
procédures en transmettant des paramètres
d’entrée
- les procédures s’exécutent et retournent
leurs résultats dans les paramètres de
sortie
3
middleware RPC: Analogie avec le
client-serveur
le programme principal se comporte comme un
client
l’ensemble des procédures est assimilable à un
ensemble de services disponibles sur un serveur
- Interface d’un service = signature de la procédure
- Interface du serveur = ensemble des signatures des
procédures
4
Middleware RPC
⚫ Assure la transparence de localisation
Le client appelle les procédures comme si elles étaient
locales
Le middleware assure la communication avec le serveur
L’interface du serveur est décrite en IDL
Le code de préparation d’une requête (stub client) est
généré automatiquement à partir de la description IDL
5
Middleware RPC
⚫ Exemple : calcul de fonction mathématiques
6
Middleware RPC
Le client R PC
⚫ Lors de la compilation et de l’édition des liens:
erreur car les procédures ne sont pas présentes
procédures émulées par 2 fausses procédures appelées stubs
client
⚫ Le stub client
procédure qui porte le nom de la vraie procédure qu’il remplace
donne l’illusion au programme principal que la procédure est
bien locale
remplace le code de la vraie procédure par un autre code
- Gère la connexion avec le bus middleware
- Transmet les paramètres vers la machine où se trouve la procédure
- Récupère le(s) résultat(s)
7
Middleware RPC
Le serveur R PC
⚫ Impossible d’avoir un programme exécutable
composé uniquement de procédures
nécessité d’un programme principal appelé stub
serveur
⚫ Le stub serveur
permet de créer un exécutable contenant les
procédures du serveur
gère la communication avec les stubs client
- Active la procédure désignée en lui transmettant les
paramètres d’appel
- Retourne les valeurs de résultat au stub client
8
Middleware RPC
Caractéristiques
Codes du client et du serveur indépendants du système de
communication; le client ne sait pas si la procédure est
locale ou éloignée
Le code du client n’a pas à préparer le message ni à
localiser le serveur => à la charge du middleware RPC
Système de dialogue entièrement externe au client et au
serveur décrit dans un langage spécifique (IDL) à partir
duquel est généré automatiquement le code nécessaire
Structure de communication construite au moment de la
compilation
Communication synchrone le client attend la réponse à
son appel de procédure avant de continuer son
traitement.
9
Middleware RPC
Les difficultés ⚫ Appel de procédure à
distance
⚫ Appel de procédure Appelant et appelé sont
local dans 2 espaces virtuels
appelant et appelé sont différents
dans le même espace pannes du client et du
virtuel serveur sont
indépendantes
même mode de pannes pannes du réseau de
appel et retour de communication (perte du
procédure sont des message d’appel ou de
réponse)
mécanismes internes
temps de réponse du
considérés comme serveur long
fiables - charge du réseau ou
du site serveur 10
Middleware RPC
⚫ Principe de réalisation
A B
C
E D
11
Middleware RPC
Principe de fonctionnement
⚫ Côté de l’appelant
Le client réalise un appel procédural vers la
procédure talon client
- Transmission de l’ensemble des arguments
⚫ Au point A
- Le talon collecte les arguments et les assemble dans
un message (empaquetage - parameter marshalling)
- Un identificateur est généré pour le RPC
- Le talon transmet les données au protocole de
transport pour émission sur le réseau. Mais où??
- Pb: détermination de l’adresse du serveur
12
Middleware RPC
Côté de l’appelé
⚫ le protocole de transport délivre le message au service de
RPC (talon serveur/skeleton)
⚫ Au point B
- Le talon désassemble les arguments (dépaquetage -
unmarshalling)
- L’identificateur de RPC est enregistré
- L’appel est ensuite transmis à la procédure distante requise
pour être exécuté (point C). Le retour de la procédure
redonne la main au service de RPC et lui transmet les
paramètres résultats (point D)
⚫ Au point D
- Les arguments de retour sont empaquetés dans un message
- Le talon transmet les données au protocole de transport
pour émission sur le réseau
13
Middleware RPC
⚫ Coté de l’appelant
◦ l’appel est transmis au service de RPC (point
E)
– Les arguments de retour sont dépaquetés
– Les résultats sont transmis à l’appelant lors du
retour de procédure ( un retour habituel de
procédure en mode local)
o Lestalons client et serveur sont créés
(générés automatiquement) à partir
d’une description d’interface
14
Middleware RPC
⚫ Description d’interface
◦ Interface = “contrat” entre client et serveur
Le contrat
Formalise le dialogue entre le client et le serveur
- Permet au client et au serveur d’avoir la même
compréhension des échanges effectués
Répond aux questions
- Que transmet-on ?
- Où envoie-t-on les données ?
- Qui reçoit les données ?
- Comment sait-on que le travail est terminé ?
15
Middleware RPC
⚫ Description d’interface
Indépendante d’un langage particulier
(adaptée à des langages multiples)
Indépendante de la représentation des types
Indépendante de la machine (hétérogénéité)
Contenu minimal
◦ Identification des procédures (nom, version)
◦ Définition des types des paramètres, résultats
◦ Définition du mode de passage (IN, OUT, IN-
OUT)
16
Middleware RPC
⚫ Exemple de contrat
17
Middleware RPC
18
Middleware RPC
Construction du client et du serveur
19
Middleware RPC
C onstruction
du client et
du serveur
20
Les objets répartis avec Java RMI
21
Introduction
⚫ L’idéalpour tout système distribué c’est d’utiliser la
technologie objet:
objetDistant.methode() ;
22
Introduction
⚫ Pouvoirpasser un O D en paramètre d’appel à une
méthode locale ou distante :
resultat=objetLocal.methode(objetDistant);
resultat=objetDistant.methode(autreObjetDistant);
⚫ Pouvoir récupérer le résultat d’un appel distant sous
forme d’un nouvel objet qui aurait été créé sur la
machine distante :
ObjetDistant=ObjetDistant.methode() ;
23
Présentation RMI
⚫ RMIest une API: un ensemble de classes et méthodes
que l’on trouve dans (java.rmi) et qui servent à
développer des applications distribuées en Java ayant
la même syntaxe que des applications non distribuées
dans différents processus (en général sur différentes
machines)…
24
Objectifs de RMI
25
Architecture de RMI
⚫ RMI est essentiellement construit sur une abstraction
en trois couches.
◦ Stubs et Skeletons (Souche et Squelette)
◦ Remote Reference Layer (Couche de référencement distante)
◦ Couche Transport
26
Stubs et Skeletons
⚫ Les stubs sont des classes placées dans la machine du client.
⚫ Lorsque notre client fera appel à une méthode distante, cet
appel sera transféré au stub.
⚫ Le stub est donc un relais du côté du client. Il devra donc
être placé sur la machine cliente.
⚫ Le stub est le représentant local de l’objet distant.
⚫ Il emballe les arguments de la méthode distante et les
envoie dans un flux de données vers le service RMI distant.
⚫ D’autre part, il déballe la valeur ou l’objet de retour de la
méthode distante.
⚫ Il communique avec l’objet distant par l’intermédiaire d’un
skeleton.
27
Stubs et Skeletons
29
Couche transport
⚫ La couche transport est basée sur les connexions
TCP/IP entre les machines.
⚫ Elle fournit la connectivité de base entre les 2 JVM.
⚫ De plus, cette couche fournit des stratégies pour
passer les firewalls.
⚫ Elle suit les connexions en cours.
⚫ Elle construit une table des objets distants
disponibles.
⚫ Elle écoute et répond aux invocations.
⚫ Cette couche utilise les classes Socket et
ServerSocket.
⚫ Elle utilise aussi un protocole propriétaire R.M.P.
(Remote Method Protocol).
30
Démarche RMI
1. Créer les interfaces des objets
distants
2.Créer les implémentation des objets
distants
3. Générer les stubs et skeletons
4. Créer le serveur RMI
5. Créer le client RMI
6. Déploiement Lancement
◦ Lancer l’annuaire RMIREGISTRY
◦ Lancer le serveur
◦ Lancer le client
31
Exemple
32
1- Interface de l’objet distant
33
Interfaces
⚫ La première étape consiste à créer une
interface distante qui décrit les méthodes
que le client pourra invoquer à distance.
⚫ Pour que ses méthodes soient accessibles
par le client, cette interface doit hériter de
l'interface Remote.
⚫ Toutes les méthodes utilisables à distance
doivent pouvoir lever les exceptions de type
RemoteException qui sont spécifiques à
l'appel distant.
⚫ Cette interface devra être placée sur les
deux machines (serveur et client).
34
Implémentation
⚫ Il faut maintenant implémenter cette
interface distante dans une classe. Par
convention, le nom de cette classe aura pour
suffixe Impl.
⚫ Notre classe doit hériter de la classe
java.rmi.server.RemoteObject ou de l ’une
de de ses sous-classes.
⚫ La plus facile à utiliser étant
java.rmi.server.UnicastRemoteObject.
⚫ C’est dans cette classe que nous allons
36
Naming Service
⚫ Les clients trouvent les services distants en
utilisant un service d'annuaire activé sur un
hôte connu avec un numéro de port connu.
⚫ Il inclut lui-même un service simple appelé
(rmiregistry).
⚫ Le registre est exécuté sur chaque machine
37
Utilisation de RMI
⚫ Un serveur crée un service distant en créant
d'abord un objet local qui implémente ce service.
⚫ Ensuite, il exporte cet objet vers RMI.
⚫ Quand l’objet est exporté, RMI crée un service
38
Le serveur
⚫ Notre serveur doit enregistrer auprès du registre RMI
l’objet local dont les méthodes seront disponibles à
distance.
⚫ Cela se fait grâce à la méthode statique bind() ou
rebind() de la classe Naming.
⚫ Cette méthode permet d’associer (enregistrer)
39
Code du serveur RMI
40
Client
⚫ Le client peut obtenir une référence à un objet distant par l’utilisation
de la méthode statique lookup() de la classe Naming.
⚫ La méthode lookup() sert au client pour interroger un registre et
récupérer un objet distant.
⚫ Elle retourne une référence à l’objet distant.
⚫ La valeur retournée est du type Remote. Il est donc nécessaire de
caster cet objet en l’interface distante implémentée par l’objet distant.
41
Fonctionnement de RMI
42
Lancement du registre
Lancement du registry
⚫ Windows : > start rmiregistry [port]
◦ En paramètre, on peut préciser un numéro de port :
port d'écoute du registry
Fonctionnalités principales :
1. Contrôle d'accès :
Empêche les applications non autorisées d'exécuter certaines actions (lecture/écriture
de fichiers, connexion réseau, exécution de commandes système).
2. Gestion des politiques de sécurité :
Les règles de sécurité sont définies dans un fichier de politique (par défaut java.policy),
où vous spécifiez les permissions accordées à chaque code source.
3. Protection des environnements sensibles :
Très utilisé dans des contextes où des applications non fiables doivent être exécutées,
comme les applets ou des services distants (exemple : RMI).
Activation d'un Security Manager dans une application Java
Explications :
• SocketPermission : Autorise les connexions réseau
nécessaires pour le fonctionnement de RMI.
• FilePermission : Permet au serveur de lire et d'écrire des
fichiers si nécessaire.
• PropertyPermission : Permet de lire certaines propriétés
système comme java.version.
Étape 2 : Modifier le client pour utiliser un Security Manager
Étape 3 : Lancer le client avec la politique de sécurité