19
RMI RMI 2012-2013 REMOTE METHOD INVOCATION BOUAZZA Zakaria BENZERHOUN Soufiane [email protected] [email protected]

Présentation de RMI Java

Embed Size (px)

Citation preview

Page 1: Présentation de RMI Java

RMIRMI

2012-2013

REMOTE METHOD

INVOCATION

BOUAZZA ZakariaBENZERHOUN Soufiane

[email protected]@gmail.com

Page 2: Présentation de RMI Java

Plan

• Introduction à RMIIntroduction à RMI

• Mise en œuvre de RMIMise en œuvre de RMI

- Partie Commune (Remote - Partie Commune (Remote Interface).Interface).

- Partie Serveur (Remote Object).- Partie Serveur (Remote Object).

- Partie Cliente.- Partie Cliente.

• Sécurité?Sécurité?

• Exemple d’applicationExemple d’application

Page 3: Présentation de RMI Java

RMI? C’est Quoi?

• RMI : Remote Method InvocationDepuis Java 1.1

• Cet API propose :– GC distribué.– Même syntaxe d’utilisation pour un objet distant

qu’un objet local.– Gestion de l’objet à travers une interfaceinterface.– Liaison avec les couches transport et l'ouverture de

sockets appropriés.

Page 4: Présentation de RMI Java

Schéma illustratif

Page 5: Présentation de RMI Java

Rôle des talons

Page 6: Présentation de RMI Java

Mise en Oeuvre

Partie CommunePartie Commune ___________________________________

(le REMOTE INTERFACEREMOTE INTERFACE)

Page 7: Présentation de RMI Java

Remote Interface

• Structure de cette interface:* Hériter de java.rmi.Remote et

* Les méthodes lèvent unejava.rmi.RemoteException exception.

____________Passage d’objets en paramètre?• Les objets locaux sont passés par valeur (Shallow Copy)

– Etre sérialisables (étendent l’interface java.io.Serializable)

• Les objets distants sont passés par référence et sont désignés par leur interface (Deep Copy)

Page 8: Présentation de RMI Java

• Exemple :

Import java.rmi.Remote

Import java.rmi.RemoteException

public interface Hello implements Remote{

void sayHello() throws RemoteException;

}

Remote Interface

Page 9: Présentation de RMI Java

Partie

Serveur

Mise en Oeuvre

Page 10: Présentation de RMI Java

Partie Serveur

La Classe distante (Remote Object) :

• Implémenter l’interface distante(Hello).

• Etendre la classe

java.rmi.server.UnicastRemoteObject

• Appel Local Possible de méthodes.

Page 11: Présentation de RMI Java

Remote Object

Exemple:Public class HelloImpl extends UnicastRemoteObject

implements Hello{Public void sayHello(){System.out.println(« Hello World »);}

}

Public class HelloImpl extends UnicastRemoteObject implements Hello{

public void HelloImpl throws RemoteException{super();}

Public void sayHello() throws RemoteException{System.out.println(« Hello World »);}

//Autres méthodes locales possibles}

Page 12: Présentation de RMI Java

Une classe pour lançer le serveur:• Créer et installer le gestionnaire de Créer et installer le gestionnaire de

sécurité [Optionnel]sécurité [Optionnel]

• Créer au moins une instance de la Créer au moins une instance de la classe serveur ( HelloImpl )classe serveur ( HelloImpl )

• Enregistrer au moins une instance Enregistrer au moins une instance dans le serveur de noms (RmiRegistry)dans le serveur de noms (RmiRegistry)

Partie Serveur

Page 13: Présentation de RMI Java

RmiRegistry

Lier le stub d’un objet distant à des nomsLier le stub d’un objet distant à des noms

Objectif:

HelloImpl

Rmic pour générer le stub. pour générer le stub. peut être omis depuis peut être omis depuis

la version 5la version 5

Start rmiRegistry

Page 14: Présentation de RMI Java

Lancer le Serveur

• Instancier l’objet (HelloImpl)

• L’enregistrer dans le RmiRegistry

HelloImpl obj=new HelloImpl();

Naming.rebind(« rmi://host:port/name »,obj);

Page 15: Présentation de RMI Java

Lancer le Serveur

try {

HelloImpl obj = new HelloImpl();

Naming.rebind("rmi://localhost/he", obj);

System.out.println("Serveur lancé");

} catch (RemoteException e) …..

La classe qui lance le serveur :try {HelloImpl obj = new HelloImpl();Naming.rebind("rmi://localhost/he", obj);System.out.println("Serveur lancé");} catch (RemoteException e) …..

Page 16: Présentation de RMI Java

Client

Page 17: Présentation de RMI Java

Client

• Obtenir la référence vers l’objet désiré

Avec Naming.lookup("rmi://localhost/he");

Retourne un Remote => Hello

• Appeler méthodes

Hello p=(Hello) Naming.lookup("rmi://localhost/he");

p.sayHello();

Hello p=(Hello) Naming.lookup("rmi://localhost/he");p.sayHello();

Page 18: Présentation de RMI Java

Sécurité?

• Pourquoi en parler?

System.setSecurityManager(new RMISecurityManager());

Un policy file:grant

{

permission java.net.SocketPermission

"*:80", "connect";

};

grant{permission java.net.SocketPermission "*:80", "connect";};

java -Djava.security.policy=policyfilename

Page 19: Présentation de RMI Java

Faisons le point.

Compatibilité? Java uniquement. Contrairement à CORBA.

Charger des classes? Oui, en spécifiant le codebase.

Lenteur? Coûts de la sérialisation des paramètres…

Charger des classes distantes? Oui.