100% ont trouvé ce document utile (1 vote)
377 vues42 pages

RMI et Objets Distribués en Java

Transféré par

Hatim JAMALI
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
377 vues42 pages

RMI et Objets Distribués en Java

Transféré par

Hatim JAMALI
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

M.3.

3: Génie Logiciel Objet

M.3.3.2
Programmation Objet Avancée

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 1
M.3.3.2 Programmation Objet Avancée

RMI
et
objets distribués

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 2
Plan

 Pourquoi RMI ?

 Principe de fonctionnement

 Développement RMI

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 3
Pourquoi RMI ?

Contexte
 Un objet peut demander à un autre objet de faire
un travail (généralement spécialisé)

machine locale machine distante

od

 Le problème est que l’objet qui fait le travail n’est


pas localisé sur la même MV. Et peut ne pas être
implémenté en Java.

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 4
Pourquoi RMI ?
Système distribué objet : l’idéal serait de pouvoir

 Invoquer une méthode d’un objet distant (od) de la


même manière que s’il était local.

machine locale machine distante

[Link](); od

 Demander à un service « dédié » de renvoyer


l’adresse de l’od …

od = [Link]("monObjet");

… sans savoir où l’objet se trouve.


M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 5
Pourquoi RMI ?
Système distribué objet : l’idéal serait de pouvoir

 Passer un od en paramètre à une méthode (distante


ou locale)

[Link](od);
[Link](od);

 Récupérer le résultat d’un appel distant sous forme


d’un nouvel objet qui aurait été créé sur la machine
distante

od = [Link]() ;

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 6
Pourquoi RMI ?
Système distribué objet : la difficulté ?
 En local, le programme (client) doit
─ traduire la requête dans un format Mach. Locale Mach. distante

intermédiaire pour la transmission, Client Serveur

─ envoyer les données de la requête au


serveur
Envoi requête
─ analyser la réponse et l’afficher à
l’utilisateur
Retour réponse

 A distance, le programme (serveur) doit


─ analyser la requête,
─ évaluer la réponse,
─ formater la réponse pour la transmettre au client

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 7
Pourquoi RMI ?
Solution: proxys
 Ajouter des représentants (proxys) pour faire ce travail

 Ni le client ni le serveur n’ont à se soucier de l’envoi des


données dans le réseau ni de leur analyse

Machine A Machine B

Client proxy proxy Serveur

Appel proxy Appel méthode


Envoi requête localement
localement

Retour résultat
Retour réponse

Retour résultat

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 8
Pourquoi RMI ?
Comment les proxys communiquent-il ?

 Cela dépend de la technologie d’implémentation.

Généralement trois choix :

► CORBA (Common Object Request Brocker Architecture)

► SOAP (Simple Object Access Protocol)

► RMI (Java Remote Method Invocation)

► COM de Microsoft («oublié » au profit de SOAP)

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 9
Pourquoi RMI ?
Comment les proxys communiquent-il ?
 CORBA

─ Client et serveur peuvent être écrits en C, C++, Java ou


tout autre langage
─ utilise le protocole IIOP (Internet Inter-ORB Protocol)
pour communiquer entre les objets

─ Interface de description qui spécifie les signatures des


méthodes et les types de données des objets. Un langage
spécial : IDL (Interface Definition Language)

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 10
Pourquoi RMI ?
Comment les proxys communiquent-il ?
 SOAP
 est aussi neutre vis-à-vis des langages de programmation.

 Utilise un format de transmission basé sur XML

 L’interface de description est spécifiée dans un langage


spécial : WSDL (Web Services Description Language)

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 11
Pourquoi RMI ?
Comment les proxys communiquent-il ?
 RMI est une core API (intégré au JDK 1.1)
 100 % Java, gratuit (différent de CORBA)

 Une version "orientée objet" de RPC

 Permet aux Objets Java Distants de communiquer Mais


sans écrire une seule ligne de code réseau

 RMI est suffisant car plus simple.

Lorsque les objets communicants sont implémentés


en Java, la complexité et la généralité de CORBA
ou de SOAP les rendent plus difficile que RMI.

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 12
Pourquoi RMI ?
Comment les proxys communiquent-il ?
 RMI
 RMI utilise directement les sockets
 RMI code ses échanges avec un protocole propriétaire :
RMP (Remote Method Protocol)

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 13
Principe
 L’objet client appelle les méthodes de l’objet distant
─ Bien entendu les paramètres doivent être envoyés d’une façon
ou d’une autre à l’autre machine
─ Le serveur doit en être informé pour exécuter la méthode et la
valeur de retour doit être renvoyés.

JVM JVM
Programme client Programme serveur
public class A{ public class B{
RMI prend en void f(){
Method
void m(){
Call
B o; ...
charge ces détails ... }
o.m(); }
...
Network Socket Network Socket
Network
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 14
Principe
 La terminologie objet client, objet serveur concerne
un appel distant : Un ordinateur peut être client pour
un appel et serveur pour un autre

JVM JVM
L’objet proxy Programme client Programme serveur
qui se trouve objet OD

sur le client est


appelé stub stub

Représentant Network Socket Network Socket


local de l’OD

Network
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 15
Principe
 Le client utilise toujours des variables de type interface

interface Warehouse {
int getQuantity(String description) throws RemoteException;
Product getProduct(Customer cust) throws RemoteException;

Le client n’a pas de connaissance sur le type


d’implémentation

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 16
Principe
 A l’appel la variable fait référence au stub

Warehouse centralWarehouse = …
//doit être lié à un objet courant d’un certain type

 La syntaxe est la même que pour un appel local

int q = [Link]("Super Cleaner");

 Les classes du stub et les objets associés sont créés


automatiquement

La plupart des détails sont cachés au programmeur, mais


un certain nombre de techniques doivent être maitrisées
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 17
Principe
Entités : Client – Serveur– RMI Registry
1. Exposer l’OD via UniCastRemoteObject
2. L’OD doit s’enregistrer auprès du Serveur de Noms

JVM JVM
Programme client Programme serveur
RMI Registry [Link]()
Serveur de 2
Noms OD
Serveur 1
UniCastRemoteObject
stub d’objets

Network Socket Network Socket

Network
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 18
Principe
Entités : Client – Serveur– RMI Registry
3. Demander l’existence de l’OD
4. Récupérer une instance de l’OD

JVM JVM
Programme client Programme serveur
3 RMI Registry
[Link]() Serveur OD
Serveurde
de
noms
noms
4
Serveur
stub d’objets

Network Socket Network Socket

Network
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 19
Principe
Entités : Client – Serveur– RMI Registry
5. Le stub récupère les paramètres de la méthode
6. Le stub emballe les paramètres qu’il envoi au skeleton via
le serveur d’objets
JVM JVM
Programme client Programme serveur
RMI Registry
OD
5 Serveur de
noms

6 Serveur 6
stub d’objets Skeleton

Network Socket Network Socket

Network
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 20
Principe
Entités : Client – Serveur– RMI Registry
7. Le skeleton déballe les infos et fait appel à la méthode de l’OD
8. Il renvoie le résultat après emballage

JVM JVM
Programme client Programme serveur
RMI Registry
OD
Serveur de
8 noms
7
8 Serveur 8
stub d’objets Skeleton

Network Socket Network Socket

Network
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 21
Remote Method Invocation
Interface pour l’objet distant

import [Link].*;
[Link]
public interface Produit extends Remote {
String getDescription() throws RemoteException;
}

Cette interface doit résider sur le client et le serveur


Elle doit étendre “Remote”
Ces méthodes doivent lancer une RemoteException puisque
des problèmes réseau peuvent survenir.

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 22
Remote Method Invocation
Implémentation de l’objet distant
import [Link].*; [Link]
import [Link].*;
public class ProduitImpl extends UnicastRemoteObject
implements Produit{
private String name;
public ProduitImpl(String n) throws RemoteException {
name = n;
}
public String getDescription() throws RemoteException {
return " Je suis " + name + ". Achete moi!";
}
}

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 23
Remote Method Invocation

Génération de la classe stub nécessaire au client


javac [Link]

─ JDK 1.2
• rmic –v1.2 ProductImpl
• Deux fichiers sont générés
Fichier stub
Product_Skel.class
─ JDK 5.0
• Toutes les classes stub sont générées automatiquement
• La classe skeleton n’est plus nécessaire à partir de JDK1.2

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 24
Remote Method Invocation
Les classes RMI
Object

Remote

RemoteObject classe abstraite :


définit uniquement les
mécanismes de base pour
la communication entre
les objets serveur et les
stubs.
RemoteStub RemoteServer

classe concrète :
UnicastRemoteObject Traitements
élémentaires pour
un objet distant.

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 25
Remote Method Invocation

Les classes RMI


─ Il est possible de ne pas étendre UnicastRemoteObject
(héritage multiple par exemple).
─ Dans ce cas, il faut :
 instancier manuellement les objets serveur et les
passer à la méthode statique exportObject()
 Dans le constructeur de l’objet serveur par exemple :

[Link](this,0);

(0 pour indiquer que n’importes quel port peut


être utilisé pour écouter les connexions client)

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 26
Remote Method Invocation
Le programme serveur
import [Link].*; [Link]
import [Link].*;
public class ProduitServer {
public static void main(String args[]) {
[Link]("Construction des implémentations");
ProduitImpl ref1 = new ProduitImpl("Sony 40p");
ProduitImpl ref2 = new ProduitImpl("ZapXpress Microwave");

Le serveur crée les objets distants

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 27
Remote Method Invocation
Le programme serveur
[Link]
[Link]("Binding implementations to registry");
[Link]("television", ref1);
[Link]("microwave", ref2);
[Link]("Enregistrement effectué attente de
clients...");

Le serveur enregistre les objets auprès du serveur de noms


en donnant un nom unique et une reference à chaque objet.
rebind() à la place de bind() pour éviter l’erreur
AlreadyBoundException lorsque l’entrée existe déjà
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 28
Remote Method Invocation
Le programme serveur
API [Link] 1.1
 static void bind(String name, Remote obj)
binds name to the remote object obj. Throws a AlreadyBoundException if the
object is already bound.
 static void unbind(String name)
unbinds the name. Throws a NotBoundException if the name is not currently
bound.
 static void rebind(String name, Remote obj)
binds name to the remote object obj. replaces an existing binding.
 static String[] list(String url)
returns an array of strings of the URLs in the registry located at the given URL.
The array contains a snapshot of the names present in the registry.

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 29
Remote Method Invocation
Le programme serveur
Le registre de noms RMI doit s'exécuter avant de pouvoir
enregistrer un objet ou obtenir une référence.

Le registre de noms RMI peut être lancé :

─ par rmiregistry

─ Ou dynamiquement dans la classe qui enregistre l'objet.

[Link](1099);
[Link](url, od);

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 30
Remote Method Invocation

Lancer le serveur
─ L’objet UnicastRemoteObject réside sur le serveur. Il doit
être actif lorsqu’un service est demandé et doit être
joignable à travers le protocole TCP/IP

─ Où est donc l’attente ?


En fait nous créons des objets d’une classe qui étend
UnicastRemoteObject, un thread séparé est alors
lancé, il garde le programme indéfiniment en vie .

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 31
Passage de paramètres
 Une référence à un od peut être passée en argument
ou retournée en résultat d’un appel dans toutes les
invocations (locales ou distantes)

 Les arguments locaux et les résultats d’une invocation


distante sont toujours passés par copie et non par
référence
 leurs classes doivent implémenter [Link]

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 32
Chargement dynamique de classes
 Si jamais le type n’est pas disponible localement, il est
chargé dynamiquement.

C’est [Link] (un chargeur de


classes spécial RMI) qui s’en charge.

 Le processus est le même que pour les applets qui


s’exécutent dans un navigateur

 A chaque fois qu’un programme charge du code à partir


d’une autre machine sur le réseau, le problème de la
sécurité se pose.

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 33
Sécurité

 Il faut donc utiliser un gestionnaire de sécurité


dans les applications clientes RMI.
 Le comportement par défaut lors de l'exécution d'une
application Java est qu’aucun gestionnaire de
sécurité n’est installé.

 Le gestionnaire de sécurité par défaut pour RMI est


[Link]

[Link](RMISecurityManager)

 Les Applets, elles, installent un gestionnaire de


sécurité assez restrictif : AppletSecurityManager
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 34
Sécurité

 Pour des applications spécialisées, les programmeurs


peuvent utiliser leur propre « ClassLoader » et «
SecurityManager » mais pour un usage normal, ceux
fournis par RMI suffisent.

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 35
Remote Method Invocation
Le programme client

import [Link].*; [Link]


public class ProduitClient {
public static void main(String args[]) {
[Link]( new RMISecurityManager());

Par défaut, RMISecurityManager empêche tout le code dans


le programme d'établir des connexions réseau.
Mais ce programme a besoin de connexions réseau :
• Pour atteindre le "RMI Registry"
• Pour contacter les "objets serveur"
• Lorsque le client est déployé, il a aussi besoin de permissions
pour charger ces classes de stub.
Donc, Java exige que nous écrivons un "policy file”
M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 36
Remote Method Invocation
Policy File : « [Link] »
grant
{ permission [Link]
"*:1024-65535", "connect";
};

Autorise l’application à faire des connections réseau sur un


port supérieur à 1024. (Le port RMI est 1099 par défaut)

A l’exécution du client, on doit fixer une propriété système :

javac [Link]
java –[Link]=[Link] ProduitClient

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 37
Remote Method Invocation
Le programme client
[Link]
String url = "rmi://localhost/";
//stub
Produit c1 = (Produit)[Link](url + "television");
Produit c2 = (Produit)[Link](url + "microwave");
[Link]([Link]());
[Link]([Link]());

Le serveur de noms fournit la méthode statique lookup(url) pour


localiser un objet serveur. L’URL RMI : "rmi://serveur:[port]/objet"

c1 et c2 ne font pas référence à des objets sur le serveur. Ils font


plutôt référence à un stub qui doit exister sur le client

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 38
Remote Method Invocation
Récapitulatif des activités
1. Compiler les fichiers java
javac *.java
2. Avant JDK1.5: générer les stub
rmic –v1.2 ProduitImpl
3. Lancer le RMI registry (serveur de nom)
start rmiregistry
4. Lancer le serveur

start java ProduitServer


5. Exécuter le client
java –[Link]=[Link] ProduitClient

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 39
Remote Method Invocation
Fichiers en jeu
Machine A Machine B

JVM1 Client JVM2 Serveur

copie
[Link] [Link]

OD [Link]

copie
ProduitImpl_Stub.class ProduitImpl_Stub.class

[Link] [Link]

Network

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 40
Remote Method Invocation
Déploiement
─ Préparer le déploiement (JDK1.5)
─ Trois dossiers
server/
[Link]
[Link]
[Link]
client/
[Link]
[Link]
[Link]
download/
[Link]
download contient les classes utilisées par
RMI registry, le client et le serveur.

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 41
M.3.3: Génie Logiciel Objet

M.3.3.2
Programmation Objet Avancée

M3.3.2 POA Leçon n°4: RMI et objets distribués  Pr. A. El FAKER - 2015 43

Vous aimerez peut-être aussi