Vous êtes sur la page 1sur 14

Institut National des Télécommunication et des Technologies

d'Information et de la Communication INT-TIC d'Oran Algérie

Invocation de Méthodes
à Distance
COURS : PROGRAMMATION RÉSEAU

R. HACHEMI
Appel de Procédure à Distance (RPC)

RPC : Remote Procedure Call

Extension de l'appel local de procédure dans le contexte des systèmes distribués.

Permet d'appeler une procédure distante (d’invoquer une méthode sur un objet distant) aussi
facilement (ou presque) que lors d’un appel local.

Une partie serveur offre une opération (un service, une procédure) appelée par une partie client.
Appel de Procédure à Distance (RPC)
Idée
Pouvoir directement appeler ce service sur le serveur presque aussi facilement que si ce service
était local.
Principe
• Deux rôles distincts : client et serveur
• Le serveur offre la possibilité à des programmes distants d'appeler une ou plusieurs de ces
procédures.
• Le client appelle localement la procédure sur un élément spécial qui s’occupe de relayer la
demande d'appel au coté serveur.
• Coté serveur, un élément spécial appelle la procédure et renvoie le résultat au client.
• Eléments spéciaux : talons (ou stubs)
• Communication via des sockets.
Appel de Procédure à Distance (RPC)
Invocation de Méthode à Distance (RMI)
Fonctionnement général de RMI (Remote Method Invocation)
1. Le client récupère (via le service de nommage) une référence de l'objet distant (en réalité, une
référence locale)
2. Le client appelle une méthode sur cette référence d'objet (appel synchrone : il attend que
l'appel soit terminé pour continuer son exécution)
3. Le talon, qui reçoit cet appel, « compacte » (marshall) toutes les données relatives à l'appel
(identificateur opération + paramètres)
4. Le talon envoie les données au talon coté serveur
5. Le talon coté serveur décompacte les données (unmarshall) et procède à l’appel de la méthode.
6. Le talon coté serveur récupère la valeur de retour, la compacte et l'envoie au talon coté client
(même en l’absence de valeur de retour, on renvoie quelque chose au talon pour l'informer de
la fin de l'appel d'opération)
7. Le talon coté client décompacte la valeur et la retourne au client
8. L'appel de la méthode distante est terminé, le client continue son exécution
Invocation de Méthode à Distance (RMI)
java.rmi Package à utiliser pour des communications via RMI.
java.rmi.Remote Interface à spécialiser pour définir les opérations
(méthodes) appelables à distance.
Cette interface est utilisée des deux cotés (client et
serveur).
java.rmi.RemoteException La signature d’une méthode appelable à distance doit
préciser qu'elle peut lever une exception de ce type.
java.rmi.server.UnicastRemoteObject Le serveur doit implémenter l’interface spécialisant
java.rmi.Remote et doit en même temps
spécialiser (ou utiliser des services de) de cette classe.
Serializable Les classes des données transmis en paramètres ou des
données de retour des doivent implémenter cette
interface.
Interface Remote
Sert à définir les services (méthodes) appelables à distance.

Chacune de ces méthodes doit être susceptible de lever l'exception RemoteException (elles
peuvent bien évidemment lever d’autres exceptions liées à l'application)

RemoteException est la super classe d'une hiérarchie d'une vingtaine d'exceptions détaillant le
problème rencontré lors de l'appel de la méthode (NoSuchObjectException,
UnknowHostException, ConnectException, …).

Lors de l'implémentation des méthode de l'interface Remote, le programmeur n’a pas à spécifier
les cas d'erreurs correspondant à la levée d'une exception RemoteException, c'est le
middleware (Java) qui s’en charge.
Interface UnicastRemoteObject
Sert à la communication via sockets TCP.

L'objet de la classe implémentant l'interface doit « s'exporter » pour accepter des connexions de
clients.

- Unicast : l'objet de la classe implémentant l'interface existe en un seul exemplaire sur une seule
machine.

- L'objet meurt avec la fin de l'exécution du serveur qui le lance.


Classe UnicastRemoteObject
Deux manières possibles d’implémentation :

- La classe hérite de la classe UnicastRemoteObject (le constructeur par défaut appelle


super()).

- Pas d’héritage UnicastRemoteObject. Le constructeur dans ce cas doit exécuter l'instruction


suivante : UnicastRemoteObject.exportObject(this).

Le constructeur doit préciser dans sa signature qu'il peut lever l’exception RemoteException.

Remarque la classe peut implémenter d'autres méthodes mais seules les méthodes de
l'interfaces étendant Remote sont appelables à distance.
Registe rmiregistry
L’objet distant doit s’enregistrer auprès du service rmiregistry (registre, annuaire ...).

rmiregistry est un service à part lancé coté serveur.

Un objet accède au rmiregistry via la classe Naming.

Identification d'un objet distant via une URL de la forme rmi://host:port/objName


host nom de la machine distante (sur laquelle tourne un rmiregistry)
port port sur lequel écoute le rmiregistry.
objName nom donné à un objet offrant des méthodes distantes
Registe rmiregistry
Lancement du rmiregistry
Unix/Linux $ rmiregistry [port]
Windows > start rmiregistry [port]
Port par défaut 1099

Variante de lancement : un objet Java peut à l'exécution lancer un rmiregistry via la méthode
statique de de java.rmi.registry.LocateRegistry :
public static Registry createRegistry(int port) throws
RemoteException
Classe java.rmi.Naming
Sert à enregistrer des objets et récupérer leurs références via les méthodes statiques suivantes :

void bind(String name, Remote obj)


Enregistre un objet sous le nom name (erreur si un objet utilise déjà ce nom)

void rebind(String name, Remote obj)


Enregistre un objet sous le nom name, en écrasant la précédente liaison objet/nom si elle existe.

void unbind(String name)


Supprime du rmiregistry la référence vers l'objet nommé name.
Classe java.rmi.Naming
Sert à enregistrer des objets et récupérer leurs références via les méthodes statiques suivantes :

String[] list(String name)


Retourne l'ensemble des noms des objets enregistrés sur le rmiregistry.

Remote lookup(String name)


Retourne une référence sur l'objet dont le nom est passé en paramètre.

Remarques Exception NotBoundException levée si l’objet n’est pas trouvé par le


rmiregistry.
name dans les 5 méthodes : sous la forme URL de type RMI
Paramètres et Valeurs de Retour
de Méthodes Distantes
Selon la classe du paramètre (ou de la valeur de retour) :

- Si la classe implémente Remote : passage par adresse. On passe ou récupère la référence sur un
objet distant.

- Si classe n'implémente pas Remote : passage par valeur. L'objet est cloné, on passe ou récupère
une copie de l'objet.

- Pour types primitifs : passage par valeur également.

- Si classe n'implémente pas Serializable : objet ne peut pas être paramètre ou la classe ne
peut pas être un type de retour. Les paramètres et les valeurs de retour sont forcément sérialisés
pour être transmis via le réseau (via des sockets).

Vous aimerez peut-être aussi