Académique Documents
Professionnel Documents
Culture Documents
Chapitre 6
CORBA
Common Object Request Broker Architecture
Concepts clés
Permettre l’interopérabilité des composants / applications
par l’intermédiaire d’un mode de coopération unifié :
l’appel d’objets distants
Transparence des invocations
Bus CORBA
L’Object Request Broker (ORB)
Le cœur de CORBA est constitué par l’ORB qui est le
bus (le conduit) par lequel les requêtes sur les objets
transitent.
WINDOWS
Les composantes du Bus CORBA
ORB (Object Request Broker) est le noyau de transport des requêtes
aux objets. Il intègre au minimum les protocoles GIOP et IIOP.
l’interface au bus fournit les primitives de base comme l’initialisation
de l’ORB.
SII (Static Invocation Interface) est l’interface d’invocations statiques
permettant de soumettre des requêtes contrôlées à la compilation
des programmes. Cette interface est générée à partir de définitions
OMG-IDL.
DII (Dynamic Invocation Interface) est l’interface d’invocations
dynamiques permettant de construire dynamiquement des requêtes
vers n’importe quel objet CORBA sans générer/utiliser une interface
SII.
IFR (Interface Repository) est le référentiel des interfaces contenant
une représentation des interfaces OMGIDL accessible par les
applications durant l’exécution.
Les composantes du Bus Corba
SSI (Skeleton Static Interface) est l’interface de squelettes
statiques qui permet à l’implantation des objets de recevoir les
requêtes leur étant destinées. Cette interface est générée comme
l’interface SII.
DSI (Dynamic Skeleton Interface) est l’interface de squelettes
dynamiques qui permet d’intercepter dynamiquement toute
requête sans générer une interface SSI.
OA (Object Adapter) est l’adaptateur d’objets qui s’occupe de
créer les objets CORBA, de maintenir les associations entre
objets CORBA et implantations et de réaliser l’activation
automatique si nécessaire.
ImplR (Implementation Repository) est le référentiel des
implantations qui contient l’information nécessaire à l’activation.
Ce référentiel est spécifique à chaque produit CORBA.
Le langage IDL (Interface Definition Language)
Il permet de définir dans un langage commun à
l’ensemble des compilateurs, la partie visible d’un
objet : méthodes et propriétés. Le principe utilisé ici
est la séparation de l’interface d’un objet et de son
implémentation et en masquant les divers
problèmes liés à l’interopérabilité, l’hétérogénéité et
la localisation de l’objet.
Permet d’exprimer, sous la forme de contrats IDL la
coopération entre les fournisseurs et les utilisateurs
de services.
Interface Definition Language IDL
Dans une description IDL Il s'agit de décrire au sein
d'une interface ( vue cliente de l'objet ) la liste des
services offerts ( ensemble de fonctions et données )..
IDL est compilé pour générer les stubs, les squelettes
et pour définir les interfaces du référentiel d'interface
Indépendant de tout langage de programmation /
compilateur
Langage pivot entre applications
À l’aide d’un compilateur IDL, on génère une souche (stub) pour le client et un
squelette (skeleton) pour le serveur.
Une description IDL est compilée pour générer les stubs et squelettes
nécessaires au mécanisme d’invocation à distance.
Souche : Coté client
Fonctions de la souche :
Prépare les paramètres d’entrée de l’invocation
Décode les paramètres de sortie et le résultat
Souche statique
Une par type d’objet serveur à invoquer
Identique aux talons clients RPC
Générée à la compilation à partir de l’interface IDL
Souche dynamique
Souche générique construisant dynamiquement tout
type de Requêtes
Permet d’invoquer des objets serveurs que l’on
découvre à l’exécution (i.e. dont on ne connaît pas
l’interface à la compilation : Référentiel d’interfaces)
Squelette : Côté serveur
Fonctions du squelette :
– décode les paramètres d’entrée des invocations
– prépare les paramètres de sortie et le résultat
Squelette statique
– un par type d’objet serveur invocable
– identique aux talons serveurs RPC
– généré à la compilation à partir de l’interface IDL
Squelette dynamique
squelette générique prenant en compte
dynamiquement tout type de requêtes
permet de créer à l’exécution des classes d’objets
serveurs (i.e. que l’on ne connaissait pas à la
compilation)
Structure d'un fichier IDL
3. Développer le serveur
4. Développer le client
Développer les objets CORBA
Pour développer un objet CORBA plusieurs critères
sont à prendre à compte :
le type de l'adaptateur d'objet utilisé,
l'approche de développement.
Deux adaptateurs d'objets sont disponibles :
le B.O.A. ( Basic Object Adapter )
le P.O.A. ( Portable Object Adapter )
Deux approches existent :
l'approche par héritage : la classe d’implantation doit
hériter du squelette généré (extends PremierPOA.java)
l'approche par délégation : développer une classe qui
implémente l’interface d’opérations de l’objet
(implements PremierOperations.java)
L’approche par héritage
Développement d’un objet CORBA
initialiser l'ORB
initialiser l'adaptateur d'objets (BOA ou POA)
créer un (ou plusieurs) objet d’implantation CORBA
Connexion et activation de l’objet à l’adaptateur d’objets
enregistrer l'objet
exporter la référence de l'objet dans un fichier
attendre les invocations clientes
Initialiser l'ORB
Pour cela, on fait appel à la fonction statique « init » de la
classe « org.omg.CORBA.ORB ».
Initialiser l'ORB,
Utiliser l'objet.
Conversion de références d'objets
Les classes helpers
Pour chaque élément décrit en IDL, le compilateur
génère une classe supplémentaire appelée classe
helper.
Cette classe porte le nom de l'élément IDL avec pour
suffixe "Helper".
Les classes helpers associées aux interfaces IDL
comportent une opération de conversion ( narrow ).
public class PremierHelper
{
public static Premier narrow( org.omg.CORBA.Object obj )
{…}
...
}
Le code du client
public class Client
{
public static void main( String [ ] args )
{
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init( args, null );
try {
java.io.FileInputStream file = new java.io.FileInputStream("ObjectID");
java.io.InputStreamReader input = new java.io.InputStreamReader( file);
java.io.BufferedReader reader = new java.io.BufferedReader(input);
String ref = reader.readLine();
file.close();
org.omg.CORBA.Object obj = orb.string_to_object(ref) ;
Premier premier = PremierHelper.narrow( obj );
premier.affiche("Bonjour du client…");
} catch ( java.lang.Exception ex )
{ ex.printStackTrace(); }
}
}
Exécuter l'application
Suivre les étapes suivantes :
lancer le serveur,
lancer le client.
Synthèse
Le développement d'une application CORBA respecte
toujours les mêmes étapes:
Implantation du client.
Exemple 2. Hello World en java