• Aucun résultat trouvé

6.3 Composants protocolaires de la couche neutre

6.3.3 Objets de liaison

Organisation des échanges de messages

Comme nous l’avons évoqué dans la section 4.4.5, les objets de liaison créés par les personnalités protocolaires sont organisés comme des piles de filtres.

Au niveau le plus bas de chaque pile se trouve un point de terminaison du service de transport. Au niveau le plus haut est située une session, composant fourni par une personnalité protocolaire.

Entre les deux peuvent être insérés un nombre quelconque de filtres gé- nériques, chargés de transformer et de réguler le flot de données entre leurs voisins. Cette organisation générale est inspirée de projets existants tels que x -kernel [46] ; elle est illustrée par la figure 6.11.

Point de terminaison Filtre Filtre Session Lower Upper Upper Lower Lower Upper

Fig. 6.11 – Organisation des piles de protocole

Chaque filtre est un composant muni de deux ports correspondant à ses voisins inférieur et supérieur.

6.3 Composants protocolaires de la couche neutre 163 Tous les services rendus par un objet de liaison sont réalisés par transfert de messages entre les couches successives. Chaque type de message ne traverse la pile de filtres que dans une direction fixée. Cependant, un message donné ne traverse pas nécessairement l’ensemble des couches : il peut être absorbé par un filtre intermédiaire au lieu d’être transmis au composant suivant.

Les messages essentiels échangés dans les piles de filtres sont :

– la demande d’émission de données, propagée des couches supérieures vers les couches inférieures ;

– l’indication de données reçues, propagée des couches inférieures vers les couches supérieures.

Un message complémentaire est utilisé par les couches supérieures pour si- gnaler aux couches inférieures qu’elles sont prêtes à recevoir des données. Aucune indication de données reçues ne peut être émise alors que son destinataire n’y est pas prêt.

Aucun traitement de message par un composant d’un objet de liaison (point de terminaison, filtre ou session) n’est bloquant. L’ensemble des protocoles de PolyORB est piloté par événements.

Cette organisation réactive des objets de liaison autorise le découplage entre les objets de liaisons et les tâches. En particulier, elle permet la réalisation de serveurs n’utilisant qu’une seule tâche.

Chaque objet de liaison se comporte comme une machine à états qui réagit aux événements extérieurs provenant du sous-système de transport et du noyau générique. L’organisation des objets de liaison et du sous-système de trans- port piloté par événements est donc synchrone (un événement reçu est traité immédiatement par une suite d’opérations non bloquantes), tandis que l’ordon- nanceur et les sources d’événements adoptent un fonctionnement asynchrone : notre architecture est similaire à celle du patron Half-sync/Half-async, notam- ment proposé par TAO [95], et que nous avons discuté dans la section 4.7.2. Usines d’objets de liaison

Les objets de liaison, formés d’une pile de filtres liés à un point de terminaison du service de transport et à une session, sont créés au moyen d’usines d’objets de liaison. Ces structures sont des listes d’usines de filtres (la dernière étant en fait un protocole, c’est-à-dire une usine de sessions).

Lorsque la fonction de création d’une pile de filtres est appelée, les usines de filtres successives sont invoquées à tour de rôle. Chaque filtre est relié à ses voisins selon l’organisation indiquée par la figure 6.11. Un pointeur sur le filtre le plus bas de la pile est retourné à l’appelant, afin que celui-ci puisse connecter ce filtre au point de terminaison approprié.

Exemples de filtres

Dans PolyORB, des filtres sont utilisés en particulier pour effectuer la déli- mitation des messages qui sont traités par les entités réalisant les protocoles de communication.

En effet, une indication de données reçues provenant d’un point de terminai- son du service de transport peut correspondre à un message complet (au sens du protocole), à un fragment de message, ou encore à la fin d’un message et au début d’un second.

164 Réalisation d’une couche neutre de répartition Or, on souhaite qu’une session (c’est-à-dire le composant de plus haut niveau d’un objet de liaison, issu d’une personnalité protocolaire) reçoive exactement une telle indication lorsqu’un message (au sens du protocole qu’elle met en œuvre) a été reçu. En effet, cela permet de réaliser la session de façon natu- relle, comme un automate dont les transitions sont déclenchées par les messages échangés.

On insère donc dans l’objet de liaison un filtre qui intercepte les indica- tions de données reçues provenant des couches inférieures, et ne les retransmet à la session que lorsqu’un message complet a été reçu. Un tel filtre nécessite une connaissance a priori de la longueur des messages à recevoir. Nous l’utili- sons notamment pour mettre en œuvre les objets de liaison IIOP, dans lesquels chaque message est précédé d’un en-tête de taille fixe indiquant sa longueur.

Le protocole HTTP est également réalisé sous forme d’un filtre. Il peut ainsi être utilisé comme support pour la mise en œuvre du protocole SOAP, aussi bien que pour l’utiliser en tant que protocole d’appel de méthodes à part entière.

Ces deux exemples montrent que l’architecture adoptée pour les objets de liaison de PolyORB permet de construire ceux-ci par assemblage de modules réalisant des traitements élémentaires de communication : cette architecture contribue à la factorisation de code entre différents objets de liaison, et à la réutilisation de ces modules élémentaires.

6.4

Synthèse

Nous avons présenté la réalisation de la couche neutre de PolyORB. Celle-ci remplit les fonctions d’adressage, de liaison et d’exécution de l’intergiciel, de façon indépendante du choix d’une personnalité.

Les modules de la couche neutre manipulent des représentations des inter- actions entre les objets définies par rapport à un modèle de répartition inspiré de celui de CORBA. Toute interaction entre objets applicatifs y est représentée par une « requête ».

Le noyau générique de la couche neutre comporte les outils nécessaires à la construction et à la manipulation des requêtes et des références d’objets. Il contient également deux composants centraux :

l’ordonnanceur-orienteur, responsable du contrôle du cycle de vie des re- quêtes et de leur acheminement entre les composants des personnalités ; le lieur, responsable de la détermination de la continuation des références d’ob-

jets.

À ces composants s’ajoutent des modules génériques réutilisables par les per- sonnalités applicatives : les adaptateurs d’objets génériques, capables de gérer l’espace d’identification local nécessaire à la fonction d’adressage, et réalisant la fonction d’activation.

Enfin, des outils pour la construction de personnalités protocolaires sont proposés :

– des tampons de communication optimisés pour limiter les copies de don- nées ;

– un sous-système de communication réalisant la fonction de transport ; – une architecture d’objets de liaison sous forme de piles de filtres.

CHAPITRE

7

Réalisation de personnalités

applicatives

Sommaire