Title: Laboratoire dInformatique du Littoral
1 Laboratoire dInformatique du Littoral
Le middleware CORBA (1)
N. Melab melab_at_lil.univ-littoral.fr
2Références
- R. Orfali, D. Haskey et J. Edwards. Objets
Répartis Guide de Service. Intl. Thomson
Publishing France, Paris, 1996. - J-M. Geib, C. Gransart et P. Merle. Corba, Des
concepts à la pratique. InterEditions, 1997. - ORBacus for C and Java, Document technique
version 4.0.3. - Object Management Group. The Common Object
Request Broker Architecture and Specification.
OMG TC Document 95-7-X, Juillet 1995. www.omg.org
3Motivations (1)
- Décentralisation
- Répartition des ressources matérielles
logicielles - matérielles processeurs, mémoires et
périphériques - logicielles données (fichiers) et applications
- Partage de ressources
- Evolution technologique et croissance du ratio
performance/coût des réseaux.
Problèmes de communication et dhétérogénéité
4Motivations (2)
- Coopération
- Coopération des applications patrimoines
- Nouvelles technologies
- Mise à jour des applications patrimoines
Problèmes dinteropérabilité et dintégration
5Communication
- Applications réparties sur des sites distants
- Différents paradigmes de communication ?
- Passage de messages PVM, MPI, ...
- RPC OSF/DCE-IDL, Sun/RPCL, ...
- Mémoire virtuellement partagée LINDA, ...
Paradigmes non accessibles directement via les
langages de programmation
6Hétérogénéité
- Trouver la meilleure combinaison des technologies
- A différents niveaux
- Modèles et langages de programmation
- Systèmes dexploitation
- Matériel PCs, Stations, Clusters, MPP, etc.
- Protocoles de communication
- En général, résolu par les mécanismes de
communication par utilisation du format de
données XDR
7Intégration
- Intégration à deux niveaux
- Intégration des nouvelles technologies
- Perpendiculaire au problème dintégration
- Intégration des applications patrimoines avec
les nouvelles technologies -
-
8Interopérabilité
- Communication entre systèmes (applications)
développé(e)s par des tiers - Définition de normes pour léchange des données
et de services (formats universels, protocoles,
)
9Lapproche objet
- Différents environnements basés sur les 3
paradigmes cités résolvent les problèmes de
communication et dhétérogénéité - Lapproche objet solution aux problèmes
dintégration et dinteropérabilité - Propriété dencapsulation
- IDL Interface Definition Language
- Informatique répartie approche objet cadre
conceptuel unique allant de lanalyse jusquau
déploiement des applications distribuées - Middleware (CORBA)
10Objets distribués
- Spécification en utilisant IDL
- Déploiement en objets répartis sur sites distants
- Infrastructure de communication (ORB)
- Communication par RMI Remote Method Invocation
- RMI version étendue de RPC
- Utilisation de souches de communication
- Souche représentant local dun objet distant
11Plan
- LObject Management Group (OMG)
- IDL Langage de spécification
- ORB Bus de communication entre objets
- Méthodologie de développement et application
12LObject Management Group
Consortium créé en 1989 actuellement plus de 850
membres
Objectif faire émerger des standards pour
lintégration dapplications distribuées
hétérogènes et la réutilisation de composants
logiciels
13OMG Objectifs
- Interopérabilité entre plusieurs langages
- Transparence des invocations
- Invocation statique et dynamique
- Système auto-descriptif
- Activation automatique
- Interopérabilité entre bus (GIOP, IIOP, etc)
14OMA larchitecture globale
Bus dobjets répartis
15Plan
- LObject Management Group (OMG)
- IDL Langage de spécification
- ORB Bus de communication entre objets
- Méthodologie de développement et application
16Le langage OMG-IDL
- Coopération entre fournisseurs et utilisateurs de
services - Expression sous forme de contrats
- Séparation de linterface de limplémentation
- Contrat ensemble dinterfaces spécifiées avec
IDL - Projection en souche (côté client) et squelette
(côté serveur) - Précompilateur IDL
17Caractéristiques
- Langage objet de spécification dinterfaces (et
non pas dimplantation) partie de C étendue - Indépendant de tout langage de programmation
- Fortement typé (passage de paramètres)
- Héritage multiple et répété
- Projection automatique dans plusieurs langages de
programmation C, Smalltalk, Cobol, AdaObjet,
C, Java, etc.
18Eléments du langage (1)
- Commentaires
- Même chose quen C
- Exemples
- // Ceci est un commentaire court
- / Ceci est un commentaire pluuuuuuuuuuuuuuuuuuuu
- uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuus long
/ - Identificateurs
- Séquences de caractères alphabétiques, chiffres
et du caractère _ - Premier caractère lettre
- Pas de différence entre majuscules et minuscules
-
19Eléments du langage (2)
- Espaces de définition
- Module contient tout type de définition
- Exemple
- module Banque
- const double TAUX 5.25
- typedef unsigned sequenceltstringgt
DesAgences - // Autres définitions
-
-
20Eléments du langage (3) Types de données
21Eléments du langage (4)
- Constantes
- Mot-clé const comme en C
- Exemples
- const double PI 3.14159
- const string UneConstante une chaîne de
caractères - const short TAILLE1 10
- const long TAILLE2 TAILLE1 2
- Définition de types
- Mot-clé typedef comme en C
- Exemples
- typedef unsigned short Jour
- typedef unsigned short Mois
- typedef unsigned short Annee
-
-
22Eléments du langage (5)
- Enumérations
- Mot-clé enum comme en C
- Exemple
- enum JoursOuvrables Lundi, Mardi, Mercredi,
Jeudi, Vendredi - Structures
- Mot-clé struct comme en C
- Exemple
- struct Date
- Jour le_jour
- Mois le_mois
- Annee l_annee
-
-
-
23Eléments du langage (6)
- Unions
- Mot-clé union comme en C
- Exemple
- union DateVariee switch (long)
- case 1
- Date format_date
- case 2
- string format_chaine
- Default
- Jour nb_jours
-
-
-
24Eléments du langage (7)
- Tableaux
- Exemples
- typedef Date10 tab_dates
- typedef floatTAILLE1 TAILLE2 matrice
- Tableaux dynamiques séquences
- Mot-clé sequence
- Exemple
- typedef sequenceltlonggt DesNombresPremiers
- typedef sequenceltJourgt DesJours
- typedef sequenceltDategt DesDates
-
-
25Eléments du langage (8)
- Interfaces
- Une interface contient des définitions de types
et constantes, des attributs et des opérations - Exemple
- interface Compte
- attribute float valeur
- void deposer (in float somme)
- void retirer (in float somme)
- // Autres opérations
-
- typedef sequenceltComptegt DesComptes
-
-
26Eléments du langage (9)
- Opérations
- Caractéristiques
- Nom identificateur unique
- Paramètres mode de passage (in, out, inout),
type et nom - Type du résultat void si pas de retour
- Mode dinvocation oneway si opération
asynchrone - Liste des exceptions à la C
- Exemple
- exception problem string raison
- oneway void retirer (in float somme) raises
problem - Pas de surdéfinition dopérations
-
27Eléments du langage (10)
- Attributs
- Mot-clé attribute
- Caractéristiques
- Mode
- Par défaut, les attributs peuvent être consultés
et modifiés - readonly accessibles en lecture seulement
- Nom de lattribut
- Exemple
- readonly attribute Annee annee_courante
-
-
28Eléments du langage (11)
- Héritage
- Exemple
- interface Compte
- attribute float valeur
- void deposer (in float somme)
- void retirer (in float somme)
- // Autres opérations
-
- interface CompteLivret Compte
- readonly attribute float Taux
-
- Lhéritage peut être multiple et répété
-
29Constructions du langage (résumé)
- Modules module NAME ...
- Interfaces interface NAME ...
- Constantes const TYPE NAME
VALEUR - Types énumérés enum NAME V1, ..., Vn
- Nouveaux types typedef DECL NAME
- Structures struct NAME DECL
- Unions union NAME switch
(TYPE) - Attributs readonly attribute
TYPE NAME - Opérations TYPE NAME (ARGs)
raises ( ... ) - in
inout out TYPE NAME - Exceptions exception NAME ...
30Exemple
module GestionBancaire struct
FicheClient string nom string adresse
interface compte
attribute FicheClient client
readonly attribute float balance
void faireDepot (in float f)
oneway float faireRetrait (in
float f)
interface livret compte
readonly attribute float taux
// Dautres définitions et
interfaces
31(No Transcript)
32Projection dIDL (2)
- Liaison vers un langage donné conformément aux
- règles définies par lOMG pour ce langage
- Ces règles de traduction concernent
- Les types de base IDL
- Les constructeurs de type enum, typedef,
sequence, etc. - Les références vers les objets
- Linvocation des opérations
- La manipulation des exceptions
- Laccès aux attributs
- LAPI de lORB.
-
33Types de base
34Autres règles de projection (1)
35Autres règles de projection (2)
36Exemple PerfectNumbers.idl
interface PerfectNumbers typedef
sequenceltlonggt PERFECTS boolean
is_perfect_number (in long number) PERFECTS
all_perfects (in long number)
37Exemple PerfectNumbers.java
public interface PerfectNumbers extends
org.omg.CORBA.Object public boolean
is_perfect_number (int number) public int
all_perfects (int number)
38Exemple PerfectNumbers.h
class PerfectNumbers virtual public
CORBA_Object // typedef
OBFixSeqltCORBA_Longgt PERFECTS virtual
CORBA_boolean is_perfect_number (CORBA_Long
number) virtual PERFECTS all_perfects
(CORBA_Long number)
39Passage de références en C
40Exemple
interface PerfectNumbers typedef
sequenceltlonggt PERFECTS boolean
is_perfect_number (in long number) PERFECTS
all_perfects (in long number)
41Plan
- LObject Management Group (OMG)
- IDL Langage de spécification
- ORB Bus de communication entre objets
- Méthodologie de développement et application
42OMG le modèle client/serveur objet
43Le module CORBA
- Le module CORBA contient
- les définitions des API des composantes du bus
- les définitions IDL des protocoles
dinteropérabilité entre bus CORBA (IIOP, GIOP,
etc.) - Deux interfaces de base
- Object
- ORB
44Linterface Object (1)
- Encapsulation des références dobjets CORBA
- Héritée par les interfaces IDL définies dans tout
contrat - Opérations dobtention des méta-données
caractérisant un objet - Opérations de base de manipulation de ces
références - Opérations relatives à linvocation dynamique
45Linterface Object (2)
interface Object // Non standardisée
dépend de limplantation du bus
ImplementationDef get_implementation()
InterfaceDef get_interface() boolean
is_nil() Object duplicate() void
release() boolean is_a(in string
logical_type_id) boolean non_existent()
boolean is_equivalent(in Object other_object)
unsigned long hash(in unsigned long maximum)
46Linterface ORB
- Cest un fourre-tout
- Elle permet
- dobtenir les références des objets notoires
- de convertir les références d objets en chaînes
de caractères et vice versa - dobtenir les références des adaptateurs dobjets
- dinstancier des méta-données nécessaires à
linvocation dynamique des objets - manipuler les requêtes invoquées dynamiquement
47Initialisation du bus
- module CORBA
- typedef string ORBid
- typedef sequenceltstringgt arg_list
- ORB ORB_init(inout arg_list argv, in ORBid
orb_identifier) -
- public static void main (String args)
-
- try
- // initialisation du bus CORBA pour un
processus client - org.omg.CORBA.ORB orb
org.omg.CORBA.ORB.init (args,null) - ...
-
48Les objets notoires (1)
- Objets primordiaux permettant de découvrir les
objets disponibles sur le bus - Trois objets notoires
- Référentiel des interfaces (Interface Repository)
- Services Nommage et Vendeur annuaires
permettant de retrouver les références de tout
objet sur le bus CORBA
49Les objets notoires (2)
- interface ORB
- typedef string ObjectId
- typedef sequenceltObjectIdgt ObjectIdList
- ObjectIdList list_initial_services()
- exception InvalidName
- Object resolve_initial_references(in ObjectId
identifier) - raises
(InvalidName) -
50Les objets notoires (3)
- ...
- // Obtenir toute la liste des objets notoires
- ObjectIdList liste orb.list_initial_services()
- // Obtenir un seul objet notoire
- try
- Object obj2 resolve_initial_references(Name
Service) - catch (org.omg.CORBA.ORBPackage.InvalidNmae ex)
-
- System.err.println(Can not resolve
NameService) - return
-
InterfaceRepository
TradingService
51Conversion dobjets
- // Le serveur fait
- HelloImpl hello new HelloImpl ()
- // Diffusion de la référence de l objet
- String chaineIOR orb.object_to_string
(hello) - System.out.println ("IOR de l objet "
chaineIOR) - // Le client fait
- org.omg.CORBA.Object obj orb.string_to_object
(args0) - Hello hello HelloHelper.narrow(obj)
- // Invocation de l objet distant
- hello.hello()
52Plan
- LObject Management Group (OMG)
- IDL Langage de spécification
- ORB Bus de communication entre objets
- Méthodologie de développement et application
53Méthodologie de développement
- Ecrire le contrat IDL (appli.idl) ensembles
dinterfaces en IDL - Générer les souches/squelettes de communication
- et les interfaces (compilateur IDL/langage
dimplantation) - Ecrire les implantations des interfaces
- Ecrire les codes du serveur et du client
54Compilation et exécution (Java)
- Quelques variables denvironnement
- setenv CLASSPATH ltRépertoireORBgt/lib/OB.jar
classes - setenv PATH ltRépertoireORBgt/bin/ltJDKgt/binPATH
- Génération des souches/squelettes
- mkdir ltnomPackagegt
- jidl ltnomPackagegt.idl --package ltnomPackagegt
- Compilation des sources et souches/squelettes
- mkdir classes
- javac -d classes .java ltnomPackagegt/.java
- Exécution du serveur et du client
- java Server
- java Client IOR
-
55Le bus ORBacus
- Conçu par la société Object-oriented Concepts,
Inc. - gratuit pour utilisation non commerciale
- les sources sont entièrement disponibles
- Environnement CORBA 2.x ouvert
- langages C et Java
- OS Solaris, Linux, Windows 95/NT, AIX, SGI et
HP-UX - Services
- Sécurité, Vendeur, Nommage, Evénement et
Propriétés - Disponibilité http//www.ooc.com
56Le cas du bus ORBacus
- ORBacus intègre 4 générateurs de code
- idl IDL à C
- jidl IDL à java
- hidl IDL à HTML
- ridl IDL à RTF
- irgen IDL au Référentiel dinterfaces (IR) C
- Synopsis (-h, --h option daide)
- idl options fichiers_idl
- jidl options fichiers_idl
- hidl options fichiers_idl
- ridl options fichiers_idl
- irgen nom
57Lapplication Hello World
HelloImpl
58Génération des souches et interfaces Java pour le
fichier Hello.idl
59Linterface et les classes Hello
- Hello.java interface pour le type Hello
- public interface Hello extends
org.omg.CORBA.object - public void hello()
-
- HelloHelper.java classe utilitaire pour le type
Hello - final public class HelloHelper
- public static Hello narrow(org.omg.CORBA.o
bject obj) - méthodes insert, extract, type, id,
read, write ... -
- HelloHolder.java pour le passage out et inout
- final public class HelloHolder implements
- public Hello value
- méthodes constructeurs, _ read, _write,
_type ... -
60Les classes souche et squelette
- StubForHello.java implantation de la souche
- sert à envoyer les requêtes
- invisible pour les programmeurs
- instanciée automatiquement par HelloHelper
(narrow) - _HelloImplBase.java implantation du squelette
- recoit et décode les requêtes
- doit être héritée par limplantation
61Limplantation Java de Hello
- // HelloImpl implante linterface IDL Hello et
hérite donc du squelette _HelloImplBase généré
par le compilateur jidl - public class HelloImpl extends HelloImplBase
-
- public void hello()
-
- System.out.println ("JAVA HelloImpl.hello()
Hello World !") -
-
62Le programme HelloServer
- import org.omg.CORBA.
- import java.io.
- import hello.
- public class HelloServer
- // Fonction principale implantant un
processeur serveur CORBA - public static void main (String args)
- try
- // initialisation du bus CORBA pour un
processus serveur - org.omg.CORBA.ORB orb
org.omg.CORBA.ORB.init (args,null) - org.omg.CORBA.BOA boa orb.BOA_init
(args,null) - // Création de lobjet dimplantation
Hello. - HelloImpl hello new HelloImpl ()
-
- // Diffusion de la référence de lobjet
- String chaineIOR orb.object_to_string
(hello) - System.out.println ("IOR de lobjet "
chaineIOR) -
63Le programme HelloServer (suite)
- // Mettre le serveur en attente des requêtes
CORBA - boa.impl_is_ready (null)
- System.exit(0)
- // En cas de problème lié à lutilisation de
CORBA - catch (org.omg.CORBA.SystemException ex)
- System.err.println(ex.getMessage())
- ex.printStackTrace()
- System.exit(1)
-
-
-
-
64Le programme HelloClient
- public class HelloClient
-
- public static void main (String args)
-
- try
- // initialisation du bus CORBA pour un
processus client - org.omg.CORBA.ORB orb
org.omg.CORBA.ORB.init (args,null) - // Création de la souche Java
référençant lobjet Hello. - org.omg.CORBA.Object obj
orb.string_to_object (args0) - Hello hello HelloHelper.narrow(obj)
- // Invocation de lobjet distant
- hello.hello()
65Le programme HelloClient (suite)
- System.exit(0)
- // En cas de problème lié à lutilisation de
CORBA - catch (org.omg.CORBA.SystemException ex)
- System.err.println(ex.getMessage())
- ex.printStackTrace()
- System.exit(1)
-
-
-
-