Chap4 cliserrmi

Preview:

Citation preview

Programmation répartie en JAVA

RMI (Remote Method Invocation)

Invoquer une méthode d’un objet distant

• objetDistant.methode();

Passer un Objet Distant en paramètre à une méthode locale ou distante

• resultat=objetLocal.methode(objetDistant); • resultat=objetDistant.methode(autreobjetDistant);

Objectifs

PRINCIPE DE FONCTIONNEMENT

Client Serveur

Objet Distant

Attributs

Méthodes

Skeleton

Port = xxx

Naming Service : IP et Port

Stub

Port = xxx

Nom Objet Distant Ref Objet distant

Objet 1 Ref1 : IP/PORT/@m

Objet 2 Ref2 : IP/PORT/@m

1. Créer L’objet distant

2. Publier la référence de

l’objet

3. Récupérer la référence

de l’objet

4. Créer le stub

5. Connexion7. Appel

10. Résultat

7. Appel

11. Résultat

8. Appel 9. Résultat

DÉMARCHE RMI

Démarche RMI

(1) Créer les interfaces des objets distants

(2) Créer les implémentation des objets distants

(3) Créer le serveur RMI - générer le skeleton

(4) Créer le client RMI - générer le stub

(5) Déploiement Lancement• Lancer l’annuaire RMIREGISTRY• Lancer le serveur• Lancer le client

(1) Créer les interfaces des objets distants

• Doit Hériter de la classe Remote :

extends Remote

• Les méthodes doivent lever l’exception : RemoteException :

throws RemoteException

• Les Objets utilisés doivent être sérializable.

(2) Créer les implémentation des objets distants

• Doivent hériter de la classe : UnicastRemoteObjectextends UnicastRemoteObject

• Doivent implémenter l’interface définit précédement Redéfinir tous les méthodes

• Posséder un constructeur sans ou avec paramètres, permettant de lever l’exception : RemoteException.

(3) Créer le serveur RMI

• Démarrer le service de nom (rmiregistry) :LocateRegistry.createRegistry(1099);

• Instancier l’objet distant :NomClasse noj = new NomClasse();

• Publier le référence de cette objet dans l’annuaire :Naming.rebind("rmi://NomServeur:1099/NOBJ",noj);

(4) Créer le client RMI

• Créer le stub : Lire les référence de l’objet distant dans l’annuaire :<NomIntface> NomStub = (<NomIntface>) Naming.lookup("rmi://NomServeur:1099/NOBJ");

• Appeler les méthodes de l’objet distant via le stub :NomStub.NomMethode()

Recommended