I.3.3 La norme C.O.R.B.A.

(Common Object Request Broker Architecture / architecture standard pour les objets distribués)

C.O.R.B.A. a été développé par l'O.M.G. (Object Management Group).
L'O.M.G. est un consortium international regroupant des fournisseurs de matériels (SUN, HP, IBM, ...), des fournisseurs de logiciels (I.O.N.A., Borland, Oracle, Microsoft, ...) et des grands utilisateurs comme Motorola, Alcatel, Boeing.
Son but est de définir des standards pour l'intégration d'applications distribuées hétérogènes.
Pour que ces applications répondent aux besoins de communication, de portabilité et d'interopérabilité, l'O.M.G. a défini un modèle de référence : la norme C.O.R.B.A .
C.O.R.B.A. utilise:

Ainsi, les objets C.O.R.B.A. peuvent être localisés n'importe où sur un réseau (internet par exemple), ils peuvent aussi interargir avec d'autres objets situés sur d'autres sites. Ils sont écrits dans n'importe quel langage de programmation pour lequel l'association avec l'I.D.L. existe.

Bus

Architecture CORBA



I.3.3.1 L'architecture O.M.A.

(Object Management Architecture)

Cette architecture globale de l'O.M.A. propose une classisfication des types d'objets C.O.R.B.A. selon leur fonctionnalité dans les applications distribuées.
Elle structure ces fonctionnalités en quatre catégories de composantes :

Tous ces objets dialoguent à travers le bus d'objets répartis C.O.R.B.A. : l'O.R.B (Object Request Broker / distributeur de requêtes objet) qui fournit l'infrastructure de communication.



I.3.3.2 Le bus C.O.R.B.A. : O.R.B.

(Object Request Broker / distributeur de requêtes objet)

Caractéristiques

O.R.B.

A l'image d'un bus matériel, l'O.R.B. est un outil de communication entre différents éléments logiciels répondant à la norme C.O.R.B.A. Il permet de résoudre les besoins d'interopérabilité et d'intégration de technologies informatiques hétérogènes.
Il gère de façon tranparente :

Pour permettre la communication entre bus différents à travers le monde entier, l'O.M.G. a spécifié le protocole I.I.O.P. (Internet Inter-O.R.B. Protocol / protocole d'interopérabilité entre O.R.B. sur Internet).
I.I.O.P. est l'implantation du potocole G.I.O.P. (General Inter-O.R.B. Protocol) basé sur TCP/IP.

Distributeur de requêtes objet

Comme son nom l'indique, l'O.R.B. assure le transport des requêtes entre les objets distribués.
Il fonctionne selon un modèle objet de type client/serveur.

(Néanmoins, une application peut être à la fois cliente et serveur).
Notons : le client ne connaît : Tout ceci reste transparent à l'utilisateur.
Le client peut seulement invoquer les méthodes spécifiées par l'interface de l'objet C.O.R.B.A.

L'O.R.B est utilisé aussi bien par le client que par le serveur via des souches de communication (appelées aussi talons ou proxy).

Ces souches masquent les communications à travers le reseau.
Elles sont générées automatiquement par le compilateur d'I.D.L. (décrit plus loin) à partir des sources I.D.L.
A chaque objet décrit en I.D.L. sont générées une souche client et une souche serveur.

Du côté client, la souche s'appelle le "stub"; elle est stockée dans l'espace d'adressage du client et représente l'objet distant. C'est à ce représentant que le client adressera ses requêtes.
De façon symétrique, le serveur dispose d'une souche serveur de l'objet : le "skeleton" qui reçoit la requête du client et invoque l'objet.

Principe d'invocation en mode statique

invocation requête
  1. Le client d'un objet C.O.R.B.A. dispose d'une référence de l'objet dans son espace mémoire.
    Il utilise celle-ci pour manipuler l'objet.
  2. Le client invoque une méthode spécifique sur la référence de l'objet.
  3. Si l'objet est distant, son stub associé emballe les arguments de la requête et la transmet à l'O.R.B.
  4. Le réseau transporte l'invocation via l'O.R.B.
  5. La souche serveur associée à l'objet déballe les arguments et invoque l'objet.
  6. L'objet transmet le résultat au squelette qui l'emballe.
  7. Le réseau transporte le résultat via l'O.R.B.
  8. Le stub déballe le résultat et le transmet au client.



Architecture
architecture de l'O.R.B.
Particularité :
Il existe deux mécanismes pour invoquer les objets :


I.3.3.3 Le langage de définition d'interfaces : I.D.L.

(Interface Definition Language)

Développer des applications distribuées sur des plate-formes hétérogènes nécessite une séparation stricte interface / implantation.
En effet rappelons que c'est selon l'interface que les applications clientes peuvent manipuler les objets.
Ainsi, pour pouvoir décrire ces interfaces, l'O.M.G. a conçu l'I.D.L.
L'I.D.L. assure aussi la correspondance avec différents langages de programmation.

Définition

L'I.D.L. permet de décrire les interfaces des objets.
C'est un langage déclarartif orienté objet dont la syntaxe est très inspirée du langage C++ ou Java.
L'I.D.L. définit pour un objet distribué :

Une interface peut hériter d'une ou plusieurs interfaces : héritage de spécification multiple.

Les constructions du langage I.D.L.

Exemple :

Interface d'une Banque en I.D.L. :

/*classe de définition d'une banque */
interface Banque { 
	readonly attribute string nombanque;
	long ouvrirCompte(in string nom); 
	void fermerCompte(in long numero); 
	void crediterCompte(in float montant,in long numero ); 
	void debiterCompte(in float montant,in long numero); 
	float soldeCompte(in long numero); 
	string listeClients(); 
};



Projection vers un langage de programmation

Pour pouvoir exploiter les défintions I.D.L., l'environnement C.O.R.B.A. fournit des compilateurs I.D.L. qui dépendent du langage cible et de l'implantation du bus.
Ces précompilateurs transforment ces définitions I.D.L. en des constructions utilisables depuis des langages de programmation.
Précompilateurs existants : I.D.L. vers Java, C, C++, Corba-script, Smalltalk, Cobol, Ada.
Pour chaque interface I.D.L., le précompilateur génère :

Reprenons l'exemple ci-dessus.
Avec un précompilateur I.D.L. vers Java , les fichiers suivants sont générés pour l'interface Banque _BanqueStub.java sera utilisé pour développer le programme client.
_BanqueSkeleton.java sera utilisé pour implanter l'objet Banque sur le serveur.