des sockets à rmi
Post on 23-Jan-2016
63 Views
Preview:
DESCRIPTION
TRANSCRIPT
Des sockets à RMI
Programmation réseau versus programmation objet
RMI = Remote Method Invocation
Pourquoi ?
• Maturation de la technologie orientée objet– ADA, Modula– Smalltalk , C++, Java
• Maturation des communications Client-Serveur – sockets– RPC (Remote Procedure Call)– couches OSI
L’héritage de la programmation Client Serveur
Importance du marshallingAutomatisation dans le cas des Appels de procédures à distanceDes serveurs accessibles simultanément par plusieurs clientsEnregistrement des serveurs dans des annuaires de nomsCommunication connectée ou par message…..
Circulation de messages et machines hétérogènes
• Couche de services– Annuaires
– Sécurité
– Protocoles d’applications
• Couche de transport– TCP
– UDP
Infrastructure informatique de distribution
Exemple
CLIENT Essifun SERVEUR de Surnoms
oter
infrastructure
Avantages d’un Protocole d’application ?
Communication client serveur
CLIENT SERVEUR
Préparation de la requêteEnvoi de la requêteAttente du résultat….
Analyse du résultat reçu
Connexion au serveur Attente de requêtes
Analyse de la requête…..Exécution….Préparation de la réponseEnvoi de la réponse
Exemple : annuaire des surnoms
EssiFun SERVEUR de Surnoms
enregistrer(« paul »,
«bug »)
marshalling
marshalling
unmarshalling
unmarshalling
0111000101000..
101..
enregistrer(« paul »,
«bug ») = TRUE
TRUE
1:Paul:bug ou ENR/nPaul/n/bug/n …ou Objet Requête/Reponse Serializable
1:Paul:bug ou ENR/nPaul/n/bug/n ou Objet Requête Serializable
1:TRUE ou Objet Réponse Serializable
Les couches de transport gèrent l’encodage final des données
L’héritage de la programmation par objets
Envoi de messages = appels de méthodesEncapsulation et InterfaceHéritage et Composition
Objets = briques logicielles
• Assembler des briques élémentaires
• Réduire la complexité des systèmes d’information
Séparation entre interface et implémentation
Représentation et types de données
Mécanismes d’abstraction
Séparation entre interface et implémentation
• séparation de la définition et de l’implémentation : encapsulation
• interface : partie visible de l’objet
• implémentation : partie privée inaccessible depuis d’autres objets
• interface = contrat entre l’objet et le monde extérieur
Séparation entre interface et implémentation
• Assemblage des objets dépend uniquement des interfaces, le changement local d’un objet ne perturbe pas l’ensemble de l’application.
Importance de la nomenclature des objetssubstitution logique liée à la substitution physique
Représentation et Types de données
• Définition de nouveaux types
• Choix d’un type pour une donnée (ex. montant) devient une contrainte sur la conception.
Types de données Abstraits
considérés comme des types de base
Mécanismes d’abstraction
• Abstraction des données : essence du procédé de construction de systèmes d ’information à base d ’objets distribués
• par Classe et/ou Composition
Des mises en œuvre différentes selon les cas
Classes et héritage
Com pte CodeviD e p o ser
com pte PELD é b ite r
Com pte de particulierC re d ite rD e b ite r
Mécanisme d’abstraction + GénéralisationSurcharge des méthodes par héritage
Classe et Composition
CARROSSERIE
MOTEUR
VEHICULE
Que peut on automatiser ?
A partir du protocole d’applications
Au minimum, la phase de marshalling/unmarshalling(hétérogéneité des langages, des systèmes, etc)
Selon les cas, le squelette du serveur les appels distants du client
Interaction Client/server :socket TCP
Serveur (s’exécutant sur l’hôte) Client
wait for incomingconnection requestconnectionSocket =welcomeSocket.accept()
create socket,port=x, forincoming request:welcomeSocket =
ServerSocket()
create socket,connect to hostid, port=xclientSocket =
Socket()
closeconnectionSocket
read reply fromclientSocket
closeclientSocket
send request usingclientSocketread request from
connectionSocket
write reply toconnectionSocket
TCP connection setup
Client/server socket interaction: UDP
closeclientSocket
Serveur
read reply fromclientSocket
create socket,clientSocket = DatagramSocket()
Create, address (hostid, port=x,send datagram request using clientSocket
create socket,port=x, forincoming request:serverSocket = DatagramSocket()
read request fromserverSocket
write reply toserverSocketspecifying clienthost address,port umber
Client
Exemple : annuaire des surnoms
boolean enregistrer(Personne p, Surnom sn)ListOfPersonne lister()boolean oter(Surnom surnom)
AnnuaireEssi
listePersonnes
Enregistrer(AnneMarie,AM)lister()
Client
Serveur
Exemple : annuaire des surnoms
• interface : partie visible de l’objet (enregistrer, oter, lister, …) = méthodes publiques Java
• implémentation : partie privée inaccessible depuis d’autres objets (listePersonnes : un vecteur de Personne ou un tableau ou ….)
• Interface distante = contrat entre l’objet et le monde extérieur (save impossible par exemple)
Circulation de messages et machines hétérogènes
• Couche de services
• Objets de l’application qui résultent de la conception du modèle
• Couche de transport
• Responsable de l’administration des objets et de l’acheminement des messages
Infrastructure informatique de distribution
CLIENT SERVEUR
Transport TCP IP...
Service (marshalling..)
transaction sécurité nommage
Infrastructure ?
Objets distribués
• Un programme (objet) peut être à la fois client de certains serveurs et serveur d’autres clients
• Il peut y avoir reconfiguration dynamique des rôles Client Serveur
Infrastructure Objets Distribués
Client Client Serveur Serveur
Objet1
Objet2 Objet3
Générateurs
RMIC / Orbix...
IDL Int. JavaSpécificationsdes données
Générateurs
Fichiersgénérés Stubs Skeletons Proxy
(mise en œuvre de la sérialisationet désérialisation…)
RMI
public interface Surnoms extends java.rmi.Remote{public Boolean enregistrer(String nom, String surnom) throws
java.rmi.RemoteException, ServeurSurnoms.surnoms.ExisteDeja ;
…. }
RMI
Classes et Interfaces
ClasseLocale
Souche Squelette
ClasseDistante
InterfaceDistante
Remote
Appel méthode m() Appel méthode m()
Machine locale Machine distante
InterfaceDistante
Comment activer des objets distribués ?
• Messages échangés entre objets =– Requêtes ou Résultats
• Certains envois de messages n’attendent pas de résultats
• Requête = Destinataire + nom de méthode + Paramètres
• Résultat = Donnée ou indication d’une erreur ou d’une défaillance
Comment activer des objets distribués ?
• Mécanisme d’exécution ou de transport– définit comment les messages sont véhiculés de
l’objet client vers l’objet serveur (destinataire)– retrouver et activer les objets adéquats
• Un objet client a deux manières d’envoyer des messages – invocation statique– invocation dynamique
Invoquer les services dont il a besoin par envoi de requêtes
Accès à l’objet destinataire par une référence à son implémentation par l’interface
Rôle du client
Unités autonomes - solidité - robustesse - adaptation
ID
Rôle de l’infrastructure
• administre les implémentations, la création et la destruction d’objets
• réceptionne les requêtes, localise le serveur, vérifie son état et celui du destinataire
• active au besoin le serveur, lui envoie les données de la requête
• ramène les résultats au client
• doit être informée de l’arrêt d’un serveur
• doit gérer la persistance
Rôle du serveur
• Administrer un flot de requêtes pour un ou plusieurs objets dont il a la responsabilité
• Ordonnancer la séquence des opérations de réponses à une requête
Rôle du serveur d’objets
• active si besoin l’objet destinataire
• recherche et exécute la méthode
• passe le résultat à l’infrastructure
• plusieurs requêtes peuvent arriver simultanément
• arrêt du serveur : désactiver tous les objets et enregistrer leur état
Scénario d ’obtention de la référence du service de nommage
Client ou Serveur ORB
CosNaming::NamingContext
resolve_initial_references ("NameService");
conversion
ajout,retrait,lecture,...
Enregistrer un objet
• Opération pour publier un Objet– en général, opération réalisée par le serveur
• Scénario Type1. Créer un objet2. Construire un chemin d ’accès (Name)3. Appeler l ’opération « bind » ou « rebind » avec le chemin et la référence de l ’objet
void bind (in Name n, in Object obj) raises (NotFound, CannotProceed, InvalidName, AlreadyBound);
Retrouver un objet
• Opération réalisée par un client ou un serveur
• Scénario type :
– construire un chemin d ’accès (Name)
– appeler l ’opération « resolve » avec le chemin
– convertir la référence obtenue dans le bon type
Object resolve (in Name n)
raises (NotFound, CannotProceed, InvalidName)
Invocation statique
• Le nom de l’objet destinataire et le message sont connus au moment du développement
• Ne permet ni l’ajout ni le retrait d’objets dans les serveurs
Invocation dynamique
• Permet au programme client de– découvrir les objets à l’exécution et les interfaces
proposés par ces objets
– construire dynamiquement messages et requêtes
– envoyer et recevoir le résultat de telles requêtes
• Rend les systèmes réactifs et faciles à modifier
Invocation dynamique + surcharge
• flexibilité du code
• briques logicielles avec les mêmes messages pour des objets de différentes natures– définir de nouveaux objets sans modifier
l’interface– changements qui n’affectent pas les clients
top related