CORBA
INSAT 2009-2010
OMG (Object Management Group)
Son rôle :
• promouvoir la technologie objets répartis
• en produisant des spécifications acceptées par consensus
CORBA (Common Object Request Broker Architecture) (1991 1.0 ; 2001 2.4 ;
2002 3.0)
…
http://www.omg.org/
Mécanismes par lesquels des objets peuvent envoyer des requêtes et recevoir
des réponses de manière transparente
Requête
• Emise par un client pour demander l’exécution d’une opération sur un objet cible.
• La requête contient l’opération à exécuter, l’objet cible et les paramètres éventuels.
Interface
• Description d’un ensemble d’opérations disponibles sur un objet.
• Spécification des interfaces en IDL.
Opération
• Entité identifiable caractérisée par une signature décrivant les paramètres de la
requête et les valeurs de retour.
Objets application : objets propres à chaque application non décrits par l'OMG
Objets service
Objet passager : sa durée de vie est liée à la durée de vie du serveur qui
l'héberge.
Traduit vers le langage de mise en oeuvre désiré (C, C++, java, perl, python,
etc)
org.omg.CORBA.portable.InputStream in,
org.omg.CORBA.portable.ResponseHandler handler){ }
À chaque Interface, type de base et définition de type est associée une classe
Helper qui ne contient que des méthodes statiques
À chaque Interface, type de base et définition de type est associée une classe
Holder nécessaire pour les paramètres inout et out
Les classes Holder pour les types IDL de base sont définit dans le package
org.omg.CORBA
Deux classes Java supplémentaires sont aussi générées pour chaque interface
• Une classe Helper
• Une classe Holder
Une constantes est traduite en une variable Java statique finale ou une interface.
module Imprimante
{
const string BAC_CAPACITY = 500;
interface Lazer public interface BAC_CAPCITY {
public final static java.lang.String value = (java.lang.String)500;
{
}
const long TONER_CAPACITY = 1000;
//…
}; public final static int TONER_CAPACITY = 1000;
};
module GestImpr {
exception TacheRefusee { (...) };
struct Tache {
short no; tableau de longueur variable
string fichier;
};
typedef sequence <Tache> ListeTaches;
typedef Tache TabTaches [10];
enum Etat { arret, marche };
enum SecuritePolitique { normal, protege };
union AdminId switch (SecuritePolitique) {
case normal : string nom ;
case protege : string nom; string motPasse;
};
interface Imprimante {
short printDocument ( in string n, out long t) raises( TacheRefusee) ;
};
interface AdminImprimante {
attribute Etat etat;
};
interface ImprimantePlus : Imprimante, AdminImprimante {
ListeTaches tachesEnCours();
readonly attribute short tacheCour;
oneway void envoiRapide ( in string n);
};
};
IDL
typedef sequence<string> StrSeq;
interface XXX {
Type de base:
boolean, char, double, float, long, octet, short, string, unsigned, void, wchar, wstring
Types complexes
any, enum, union, sequence, struct, object, exception
Mots clé de déclaration
attribute, module, interface, raises, typedef, valuetype
Modificateurs
in, inout, out, const, oneway, readonly, public private, abstract
Valeurs constantes
FALSE, TRUE
Autres
default, switch, case
struct Tache
{
short no;
string fichier;
};
(...)
Tache decrireTache (in long numeroTache);
L'état de l'objet,
valuetype TacheV
{
// état de l'objet
private short no;
public string fichier;
// constructeur
// méthodes de l'objet
void afficher();
};
interface Imprimante
{
(...)
TacheV getTacheCourante();
}
En plus des exceptions utilisateurs dénies dans l'IDL, toute opération CORBA
peut générer des exceptions CORBA : :SystemException.
IDL dénit 36 cas d'exceptions CORBA qui peuvent être soulevées par toute
opération (implicitement) :
Notre agenda permet de stocker un rendez-vous par jour, sur une durée de 31
jours. Un agenda pourra par la suite représenter l’agenda d’un enseignant ou
celui d’une salle, etc.
#ifndef GL2__IDL
#define GL2__IDL
CallBack
…