Vous êtes sur la page 1sur 31

Applications Réparties

Java RMI Avancé

Atef Ben Ismail

INSAT 2009-2010
RMI

 Callbacks
 RMI sur IIOP

 L’approche par délégation (Tie)

 Gestion des ressources

2 Application Réparties INSAT 2010


Qu’est-ce qu’un Callbacks
 Autorise le serveur à notifier un client

 Le client peut contenir un objet distribué

 Une référence de l’objet callback doit être passée au serveur

 Chaque partie peut être client et serveur au même moment

3 Application Réparties INSAT 2010


Exemple de callback

 Le client s’enregistre pour être notifié d’événements par le serveur


Exemple: un système de « Chat » où les clients envoient et reçoivent des messages
Un objet est détruit du serveur s’il n’est plus référencé

4 Application Réparties INSAT 2010


Objet passé par valeur
 L’objet Message est passé par valeur entre :
Le client qui poste le message et le serveur de « Chat »
Le serveur de chat et les autres clients enregistrés (qui recevront ce message)

5 Application Réparties INSAT 2010


Côté client : interface distribuée (1/3)
 L’interface distribuée MessageListener est implémentée côté client :

• Cela permettra au serveur de Chat d’invoquer la méthode “notify” à distance


• Le client devient un serveur: pour la méthode “notify”, les rôles sont inversés

6 Application Réparties INSAT 2010


Côté client : Callback (2/3)
 L‘implémentation de l’interface distribuée

 Ne fait ici qu’imprimer le message et son expéditeur sur la sortie standard (en
pratique il faut afficher ce message dans une IHM)

7 Application Réparties INSAT 2010


Côté client : main() (3/3)

 Le main du client
Récupère une référence sur le serveur de Chat
Intancie un MessageListenerImpl et l’enregistre auprès du serveur

 Le client n’enregistre rien dans le RMIRegistry


Il ne fait que transmettre un référence sur le MessageListenerImpl
Cette référence est acheminée automatiquement à travers le réseau

8 Application Réparties INSAT 2010


Côté serveur: implémentation

9 Application Réparties INSAT 2010


L’exécution de l’alarme

 Lorsqu’un client souhaite envoyer un message à tous les autres :


Il invoque la méthode « fireMessage(Message msg) » sur le serveur
Le serveur invoque en série la méthode « notify (Message msg) » sur tous les clients
enregistrés

10 Application Réparties INSAT 2010


RMI

 Callbacks

 RMI sur IIOP


 L’approche par délégation (Tie)

 Gestion des ressources

11 Application Réparties INSAT 2010


Introduction

 IIOP est le protocole de communication utilisé par CORBA

 RMI est indépendant de la couche réseau uilisée

 RMI-IIOP fournit tous les avantages de RMI associé à CORBA


• Fonctionalités multi-langage (C++, Java …)
• Conception des interfaces distribuées en Java
• Génération des IDL à partir des implémentations d’interfaces Java: rmic –idl
• Passage par valeur d’objet RMI
• Services CORBA (Persistances, Nommage, Transactionnel …)

12 Application Réparties INSAT 2010


Cycle de Développement

13 Application Réparties INSAT 2010


Les Etapes

1- Définir les packages *

2- Créer les interfaces *

3- Coder les objets passés par valeur *

4- Coder les objets sur le serveur

5- Générer les Stubs (avec rmic)

6- Ecrire le main() sur le serveur

7- Lancer le naming et le serveur

8- Coder et lancer le client

* = identique à RMI/JRMP

14 Application Réparties INSAT 2010


4- Coder les classes serveurs (1/2)

15 Application Réparties INSAT 2010


4- Coder les classes serveurs (2/2)

16 Application Réparties INSAT 2010


5- Générer les Stubs

 Compiler l’implémentation des Stubs


javac xxImpl.java yyImpl.java
 Générer les Stubs avec IIOP
rmic –iiop xxImpl yyImpl
– Génération des classes xxImpl_Stub.class et yyImpl_Stub.class

17 Application Réparties INSAT 2010


6- Ecrire le main du serveur

 Créer le premier objet

 Enregistrer l’objet par bind() ou rebind() sur le context JNDI

18 Application Réparties INSAT 2010


7- Lancer le service de Nommage

 Lancer l’exécutable tnameserv

 Lancer le serveur
java <PARAMS> server

19 Application Réparties INSAT 2010


8- Coder le Client (1/2)

 Le client doit recupérer un Proxu sur l’objet distribué par JNDI

 Effectuer une opération de conversion dans le type réel

 Appeler la méthode distante

20 Application Réparties INSAT 2010


8- Coder le Client (2/2)

21 Application Réparties INSAT 2010


RMI

 Callbacks
 RMI sur IIOP

 L’approche par délégation (Tie)


 Gestion des ressources

22 Application Réparties INSAT 2010


L’approche par délégation - Avant

23 Application Réparties INSAT 2010


L’approche par délégation - Après

24 Application Réparties INSAT 2010


RMI

 Callbacks
 RMI sur IIOP

 L’approche par délégation (Tie)

 Gestion des ressources

25 Application Réparties INSAT 2010


Gestion de la mémoire: Lease (1/2)
 RMI utilise un ramasse miettes distribué (DGC) basé sur les Leases
Les Leases sont gérés et alloués par RMI
RMI renouvelle les Leases automatiquement avant avant leur expiration
 Les objets distribués sont détruits automatiquement lorsqu’ils ne sont plus
référencés
• Les proxies doivent être libérés
• Utiliser System.gc() et System.runFinalization()
 La durée des Lease est définie par la propriété java.rmi.dgc.leaseValue
• Cette durée est en millisecondes
• java -D java.rmi.dgc.leaseValue=30000 Server

26 Application Réparties INSAT 2010


Gestion de la mémoire: Lease (2/2)
 Le serveur RMI ping à intervalle régulier les clients pour vérifier qu’ils sont
actif
Plus le lease est court plus le réseau est mis à l’épreuve
 Il est possible d’être notifé lorsque le serveur n’est plus référencé
L’objet distribué doit implémenter java.rmi.server.Unreferenced

27 Application Réparties INSAT 2010


Gestion des connexions
 Les connexions entre le serveur et le client sont gérées par la couche
Transport de RMI

 RMI gère un cache de connexion


• Une connexion est libérée après un certain temps d’inactivité
• Le DGC utilise une connexion spécifique
 Un client RMI à généralement 2 connexions:
• Une pour les requêtes au serveur
• Une pour le DGC

28 Application Réparties INSAT 2010


Gestion des Threads
 Dépend de l’implémentation. Par défaut RMI créera un Thread par requête
entrante

 Donc le code RMI doit être Thread safe

29 Application Réparties INSAT 2010


Conclusion
 Extension du RPC aux objets
• Permet l’accès à des objets distants
• Permet d’étendre l’environnement local par chargement dynamique de code
• Pas de langage séparé de description d’interfaces (IDL fourni par Java)
 Limitations
• Environnement restreint à un langage unique (Java)
– Mais passerelles possibles, en particulier RMI/IIOP
• Services réduits au minimum
– Service élémentaire de noms (sans attributs)
– Pas de services additionnels
– Duplication d’objets
– Transactions
–…

30 Application Réparties INSAT 2010


www.alcatel-lucent.com
INSAT 2009-2010

31 | A look Forward | January 2010

Vous aimerez peut-être aussi