IFT604_3e_InterProcessus_serialiser

publicité
Communication entre
processus
From Coulouris, Dollimore and Kindberg
Distributed Systems:
Concepts and Design
Edition 3, © Addison-Wesley 2001
Chapitre 4
Plan
 Caractéristiques des protocoles de communication entre processus dans un système
réparti
 Principes généraux
 communication
 par datagrammes
•
•
Client-serveur
Communication de groupe
 par flots (streams)
•
Client-serveur
 construction de protocoles pour les patterns de communication
 client-serveur : requête-réponse
 groupe : même message est envoyé à plusieurs processus
 données
 représentation des objets dans les messages
 références à des objets distants
Des objets aux bits
Comment les objets et les structures de
données doivent-ils être traduits pour
ensuite être transmis dans les messages
sur le réseau ?
Sérialisation
XML
Représentation externe des
données
 information dans les programmes
structures de données et objets
 information dans les messages
suite d ’octets
 tous les ordinateurs ne représentent pas les valeurs
primitives de la même manière
 Comment les ordinateurs peuvent-ils s ’échanger des
données ?
Echange de données
 Protocole 1
les valeurs sont converties en un format externe convenu avant
la transmission
à la réception, conversion du format commun dans le format de
la machine
pour supporter RMI ou RPC, il faut un format commun (appelé
représentation externe des données)
 Protocole 2
les valeurs sont transmises dans le format de l ’émetteur avec
une indication du format utilisé
le destinataire convertit les valeurs si nécessaire
Marshalling et unmarshalling
 Marshalling
 Traduction des structures de données et des valeurs primitives en une
représentation externe de données
 Unmarshalling
 génération de valeurs primitives à partir de leur représentation externe
 reconstruction des structures de données
 Usages
 transmission dans des messages
 entreposage dans des fichiers
 Activités réalisées au niveau du middleware
Approches
 Alternatives
Corba common data representation (CDR)
utilisable dans plusieurs langages
Sérialisation
pour usage en Java seulement
 Représentations alternatives
transformation des données primitives en forme binaire
(e.g. Corba CDR et sérialisation)
transformation des objets en texte (e.g. protocole http)
Sérialisation en Java
 Le processus qui effectue la désérialisation ne possède pas
de connaissance a priori sur les classes des objets à
désérialiser
besoin d ’information sur la classe des objets à désérialiser
nom de la classe
numéro de version
• fixé par le programmeur
• calculé automatiquement
charger cette classe sur la machine destination
Sérialisation
Lorsqu ’un objet est sérialisé,
tous les objets qu ’il référence sont sérialisés
Handles : référence à un objet dans la forme sérialisée
Désérialisation
s ’assurer qu ’un objet n ’est écrit qu ’une fois
s ’assurer que les références pointent bien vers leur
« handle »
Algorithme
 Encoder le nom de la classe et son numéro de version
 Encoder le nombre, les types et noms des variables d ’instance
 si les variables d ’instance appartiennent à de nouvelles classes,
réitérer le processus jusqu ’à ce que tous les types et descriptions des variables
d ’instance aient été encodés
 Ecrire les valeurs
 les types primitifs sont transcrits dans un format binaire portable à l ’aide des
méthodes de java.io.ObjectOutputStream
 les chaînes et les caractères sont transcrits via la méthode writeUTF de
java.io.ObjectOutputStream
 UTF = Universal Transfer Format
 La sérialisation en Java est un procédé générique qui utilise la réflexivité
pour trouver le nom de la classe de l ’objet, etc.
 pas besoin de créer des fonctions spéciales de marshallisation comme en Corba
Rendre les classes sérialisables
 La classe doit implémenter
java.io.Serializable
 La sérialisation est réalisée par
la méthode defaultWriteObject
de la classe ObjectOutputStream
 classe de l ’objet
 signature
 valeurs de toutes les variables non-transient et non-static
 La désérialisation est réalisée par
la méthode defaultReadObject
de la classe ObjectInputStream
Ajuster la sérialisation
private void writeObject(ObjectOutputStream s)
throws IOException
{
s.defaultWriteObject();
// customized serialization code
}
private void readObject(ObjectInputStream s)
throws IOException
{ s.defaultReadObject();
// customized deserialization code ...
// followed by code to update the object, if necessary
}
 gère seulement la sérialisation immédiate de la classe
 la sérialisation des superclasses est gérée automatiquement
Contrôle explicite
de la sérialisation
package java.io;
public interface Externalizable extends Serializable
{
public void writeExternal(ObjectOutput out)
throws IOException;
public void readExternal(ObjectInput in)
throws IOException,
java.lang.ClassNotFoundException;
}
 L ’externalisation des superclasses n ’est pas appelée automatiquement
Sérialisation : exemple
//serializing the object to a file named theTime
FileOutputStream out = new FileOutputStream("theTime");
ObjectOutputStream s = new ObjectOutputStream(out);
s.writeObject("Today");
//throws
a NotSerializableException if it's given an object that is
not serializable
s.writeObject(new Date());
s.flush();
Désérialisation : exemple
FileInputStream in = new FileInputStream("theTime");
ObjectInputStream s = new ObjectInputStream(in);
String today = (String)s.readObject();
Date date = (Date)s.readObject();
Exemple
Explanation
Serialized values
Person
8-byte version number
h0
class name, version number
3
int year
java.lang.String java.lang.String number, type and name of
name:
place:
instance variables
1934
5 Smith
6 London
h1
values of instance variables
The true serialized form contains additional type markers; h0 and h1 are handles
Référence à un objet remote
 Identificateur pour un objet remote valide pour tout le système
réparti
 invocation de méthode
 paramètre
 résultat de l ’invocation d ’une méthode
 tout objet remote ne possède qu ’une seule référence unique à
travers le temps et l ’espace
 les références remote peuvent être comparées entre elles pour
déterminer si elles réfèrent au même objet remote
Représentation d ’une
référence remote
32 bits
32 bits
Internet address
port number
32 bits
time
32 bits
object number
interface of
remote object
Adresse vs référence
Durée de vie des objets remote
RMI simple
aussi longtemps que le processus qui les a créés existe
la référence remote peut être utilisée comme adresse de l ’objet
remote
relocalisation des objets dans un processus différent sur un
autre ordinateur
la référence remote ne peut pas être utilisée comme adresse de
l ’objet remote
• voir Chapitre 17.2.4
Téléchargement