Académique Documents
Professionnel Documents
Culture Documents
XB2 Corba
XB2 Corba
Xavier.Blanc@lip6.fr
L'environnement
C.O.R.B.A.
utilisation avec Java
1
Plan de la présentation
• Aperçu de C.O.R.B.A.
• Service de désignation
3
Qu'est ce que l'O.M.G. ?
4
Fonctionnement de l'OMG
5
Les spécifications de l'O.M.G.
OMA
appelé O.M.A. ( Object Model Architecture )
MDA
– CORBA est une partie de ce modèle,
6
Qu'est ce que C.O.R.B.A. ?
8
Le bus CORBA
NT UNIX UNIX
PC PC Sparc
9
La vue réelle du bus CORBA
NT UNIX UNIX
PC PC Sparc
Réseau TCP/IP
10
Serveur et objets
serveur.
11
Le langage IDL CORBA
interface Horloge
{
string donne_heure_a_paris();
string donne_heure_a_pekin();
};
12
La compilation IDL
ent e souche
rc e cli
de l 'a m o
t i on
é ra
description Gén
IDL Gén
é ra t i
on d
e l'am
orce
serv
e ur squelette
13
Intervention des amorces
C.O.R.B.A.
NT UNIX UNIX
PC PC Sparc
Protocole IIOP
14
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)
15
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 invoquable
– 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)
16
L'identité d'un objet C.O.R.B.A.
serveur
17
L'adaptateur d'objets
Serveur
Objet A Objet B
Squelette A Squelette B
Client
Adaptateur d'objets
Souche A
18
L'adaptateur d'objets
• Fonctions
– Interface entre les objets CORBA et l’ORB
– Enregistrement et recherche des implantations
d’objets
– Génération de références pour les objets
– Gestion de l’instanciation des objets serveurs
– Activation des processus dans le serveur
– Aiguillage des invocations de méthodes vers les
objets serveurs
• Différents type d’adaptateur
– BOA (Basic Object Adapter)
– POA (Portable Object Adapter)
19
Les communications avec CORBA
20
Normalisation des communications
22
L'annuaire C.O.R.B.A.
d'objet.
23
Vue du modèle O.M.A.
Le bus C.O.R.B.A.
24
Une première application
avec C.O.R.B.A.
25
Opérations à réaliser
3. Développer le serveur
4. Développer le client
26
Décrire les services offerts
29
Les types de bases
30
Les paramètres d'une opération
31
Un exemple de description IDL
• L'exemple suivant décrit un objet qui offre une interface appelée « Premier ».
Cette interface comporte une opération dénommée « affiche » qui entraîne
l'affichage d'un message sur le serveur ( message passé en tant que
paramètre ).
interface Premier
{
void affiche ( in string message ) ;
};
32
Compilation d'une description IDL
34
Correspondance des types de bases
35
Développer les objets CORBA
Généré à
PremierPOA PremierOperations partir de l'IDL
37
Développement de notre
premier objet CORBA
System.out.println( message );
}
}
La seule obligation est de ne pas oublier l'héritage du squelette.
! Ensuite, il faut tout simplement fournir le code des opérations
décrites dans l'interface IDL.
38
Développer le serveur
39
Initialiser l'ORB
40
PO
A
Initialiser l'adaptateur d'objets BO
A
(«RootPOA»));
et
– Activer le POA Manager
rootpoa.the_POAManager().activate();
41
POAManager & POA
SERVEUR Servant
Servant
Requêtes
client
ORB POA
POAManager POA Servant
(orb) POA*
Servant
Servant
Servant
Servant
Servant
*RootPOA
(rootpoa)
42
Créer et enregistrer l'objet CORBA
43
Echanger une référence d'objet
orb.run();
} catch ( Exception ex )
{ ex.printStackTrace(); }
}
}
45
Développer le client
– Initialiser l'ORB,
– Utiliser l'objet.
46
Conversion de références d'objets
object_to_string
org.omg.CORBA.Object
Premier
string_to_object
Conversion
org.omg.CORBA.Object
– lancer le serveur,
client,
– lancer le client.
50
Synthèse
– Implantation du client.
51
Exercice
53
Gestion des exceptions
54
Décrire une exception en IDL
exception nom_de_l'exception
{
membres_de_l'exception;
};
type_idl nom_du_membre;
55
Signaler qu'une opération peut
lancer une exception.
• Comme en Java, une opération décrite avec l'IDL doit signaler sa
capacité à lancer une exception.
• Exemple :
void f( ) raises ( monException );
56
Les catégories d'exceptions
org.omg.CORBA.SystemException ),
org.omg.CORBA.UserException ).
• Une exception décrite en IDL est une exception utilisateur qui sera
57
Lancer une exception
depuis l'objet CORBA
• Pour lancer une exception CORBA on procède exactement de la
même façon qu'en Java.
58
Intercepter l'exception dans le client
• Cette règle s'applique à tous les types complexes qui sont décris dans une
interface.
60
Exercice
exception DivisionParZero
{ };
interface Diviseur
{
float division( in float nb1, in float nb2 )
raises ( DisivionParZero );
};
61
Les attributs IDL
62
Traduction d'un attribut IDL en Java
• Règle de traduction :
[ readonly ] attribute type nom ;
L'opération d'écriture n'existe
public void nom( type value ); pas dans le cas d'un attribut
public type nom( ); spécifié "readonly".
• Exemple :
attribute string nom;
63
Le module IDL
module nom_du_module
{
// corps du module
};
Un module est traduit en un package.
64
Exercice
module Exemple
{
interface Personne
{
readonly attribute string nom;
attribute string adresse( );
readonly attribute long age();
void anniversaire();
};
};
65
Notion d'Alias
• Exemple :
66
Traduction d'un Alias en Java
• La notion d'alias n'existe pas en Java. C'est pour cette raison que
l'alias est remplacé en Java par le type original.
// IDL
typedef long Heure;
interface Exemple
{
void fixe_heure( in Heure h );
};
// Java
public interface Exemple // …
{
public void fixe_heure( int h );
}
67
Notion de séquence IDL
• Exemples :
• Exemples :
// IDL
typedef sequence<long> colonne;
// Java
int [ ]
// IDL
typedef sequence<colonne> matrice;
// Java
int [ ] [ ]
69
Notion de structure IDL
struct nom_de_la_structure
{
liste_des_membres;
};
struct Personne
{
string nom;
string prenom; Une structure peut ensuite servir de type de donnée.
};
interface Course
{
attribute liste participants;
};
71
Traduction d'un structure
• Chaque membre est lui même traduit selon la règle standard qui lui
est propre ( exemple : une séquence est traduite en un tableau ).
72
Exemple de traduction de structure
// IDL
struct Personne
{
string nom;
string prenom;
};
// Java
public class Personne // …
{
public String nom;
public String prenom;
public Personne() { // … }
public Personne( String _nom, String _prenom ) { // … }
}
73
Héritage d'interfaces IDL
• Pour convertir une référence d'objet vers une référence d'un objet
de base on doit utiliser l'opération « narrow » :
74
Echange de référence d'objets
75
Exemples
interface AutreExemple
{ Avec « g » on ne pourra échanger que des
void f ( in Object obj ); références d'objets vers « Exemple » où
des références d'objets héritants
de « Exemple ».
void g ( in Exemple obj );
};
76
Les classes Holders
• Une classe holder porte le même nom que le type avec pour
suffixe « Holder ».
• Exemples :
// IDL
void retourne_heure( out Heure h );
// Java
public void retourne_heure( org.omg.CORBA.IntHolder h );
// IDL
typedef sequence<long> colonne;
typedef sequence<colonne> matrice;
void ajoute_matrices( in matrice m1, in matrice m2, out matrice result );
// Java
public void ajoute_matrices( int [ ][ ] m1, int [ ] [ ] m2, matriceHolder result );
80
Exercice
interface Exemple
{
typedef struct Personne
{
String nom;
String prenom;
} coureur;
interfaces.
Invoque
Client Objet de délégation
Délègue
Délégué
83
Création de l’objet délégué
84
Génération de l'objet de délégation
PO
PremierPOATie.java A
BO
A
85
Utilisation de l'objet de délégation
interface Diviseur
{
exception DivisionParZero { };
88
Commençons par un exercice
89
Service de désignation (nommage)
91
Qu’est-ce qu’un nom ?
92
La liaison
93
Obtenir une référence
94
jdk
orbd 1. 4
95
Etude du type « Any »
96
Any : un méta type !
• Un type Any peut contenir une valeur de n’importe quel autre type
97
Le type Any en Java
• Exemple :
99
Exemple d’utilisation
100
Exercice
interface Calculatrice
{
any addition( in any nb1, in any nb2 );
};
101
Insérer et extraire des types complexes
103
La description du type
104
Les familles de types
• Chaque type CORBA est associé à une famille de type appelé TCKind.
• Chaque type simple dispose de sa propre famille dont le nom est tk_xxxx
( boolean = tk_boolean ).
• Les types complexes appartiennent chacun à une famille précise comme :
tk_struct, tk_sequence, …
• En Java, la classe « org.omg.CORBA.TCKind » correspond à la traduction
du type CORBA TCKind.
– Cette classe comporte pour chaque catégorie de famille un attribut public de
valeur entière dont le nom est celui de la catégorie précédé de « _ » :
_tk_boolean
– Cette classe comporte également pour chaque catégorie un objet de type
TCKind dont le nom est celui de la catégorie. Pour obtenir la valeur entière de
ce TCKind, on utilise l’opération « value ».
105
Les principales opérations d’un TypeCode
106
Obtenir le TypeCode d’un type
simple ou complexe :
– Les types simples : on utilise l’opération « get_primitive_tc »
107
Exemple
// Initialise l’ORB
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
108
Exercice
interface Calculatrice
{
any addition( in any nb1, in any nb2 );
};
110
Concept de mécanismes dynamiques
112
Le mécanisme D.S.I.
113
Notion de référentiel d'interfaces
114
Synthèse sur C.O.R.B.A.
115
Un environnement complet...
environnements équivalent.
116
Vue de l'architecture C.O.R.B.A.
Objet C.O.R.B.A.
CLIENT SERVEUR
Squelette D.S.I.
le bus C.O.R.B.A.
117
Pour plus d'informations...
• Quelques ouvrages
– Au cœur de CORBA
( J.DANIEL, Vuibert )
– CORBA : des concepts à la
pratique
( Ph.MERLE, InterEditions )
118