Professional Documents
Culture Documents
Xavier.Blanc@lip6.fr
L'environnement
C.O.R.B.A.
utilisation avec Java
Plan de la prsentation
Aperu de C.O.R.B.A.
Une premire application avec C.O.R.B.A.
Des applications plus consquentes
Service de dsignation
Etude du type Any
Les mcanismes dynamiques de C.O.R.B.A.
Synthse sur C.O.R.B.A.
2
Aperu de C.O.R.B.A.
Fonctionnement de l'OMG
OMA
MDA
Objectifs de CORBA
Le bus CORBA
NT
UNIX
UNIX
PC
PC
Sparc
ORB
PC/NT
ORB
PC/UNIX
ORB
Sparc/UNIX
NT
UNIX
UNIX
PC
PC
Sparc
Rseau TCP/IP
10
Serveur et objets
11
interface Horloge
{
string donne_heure_a_paris();
string donne_heure_a_pekin();
};
12
La compilation IDL
description
IDL
13
orc
m
a
'
el
d
n
o
i
ra t
n
G
Gn
rati
on
de l'
a
souche
ur
squelette
en t
i
l
c
e
mor
ce s
erve
Objet C++
Souche Java
Squelette C++
ORB Java
PC/NT
ORB
PC/UNIX
ORB C++
Sparc/UNIX
NT
UNIX
UNIX
PC
PC
Sparc
Protocole IIOP
14
Souche statique
Souche dynamique
15
Squelette : Ct serveur
Fonctions du squelette :
dcode les paramtres dentre des invocations
prpare les paramtres de sortie et le rsultat
Squelette statique
un par type dobjet serveur invoquable
identique aux talons serveurs RPC
gnr la compilation partir de linterface IDL
Squelette dynamique
squelette gnrique prenant en compte dynamiquement tout
type de requtes
permet de crer lexcution des classes dobjets serveurs (i.e.
que lon ne connaissait pas la compilation)
16
L'adaptateur d'objets
Serveur
Objet A
Objet B
Squelette A
Squelette B
Client
Souche A
Adaptateur d'objets
L'adaptateur d'objets
Fonctions
19
20
Composants du protocole
CDR : Common Data Representation
Format de donnes dencodage des donnes
21
22
L'annuaire C.O.R.B.A.
23
Transaction
Objets de domaines
Mdecine
Electronique
Le bus C.O.R.B.A.
Client
Serveur
Applications utilisateurs
24
Administration
Impression
Utilitaires communs
25
Oprations raliser
1. Dcrire les services offerts des objets CORBA
2. Dvelopper les objets CORBA
3. Dvelopper le serveur
4. Dvelopper le client
26
27
interface Exemple
{
// contenu de l'interface
};
Se termine par un point virgule
28
30
boolean
octet
short ( ushort )
long ( ulong )
longlong ( ulonglong )
float
double
long double
char
wchar
string
wstring
31
affiche qui
que paramtre ).
interface Premier
{
void affiche ( in string message ) ;
};
32
Premier
jdk
1.
PO
A
BO
A
Concept de mapping
34
35
IDL
boolean
octet
short
ushort
long
ulong
long long
ulong long
Java
boolean
byte
short
int
long
IDL
float
double
Java
float
double
IDL
string
wstring
Java
string
string
long double
char
wchar
char
char
36
API de CORBA
org.omg.PortableServer.Servant
PremierPOA
Implantation
de l'objet
37
PO
A
BO
A
PremierOperations
Gnr
partir de l'IDL
Dveloppement de notre
premier objet CORBA
public class PremierImpl extends PremierPOA
{
public void affiche( String message )
{
L'implantation hrite
du squelette.
System.out.println( message );
}
}
!
38
Dvelopper le serveur
Les tapes respecter sont les suivantes :
initialiser l'ORB
initialiser l'adaptateur d'objets
crer l'objet CORBA
enregistrer l'objet CORBA
exporter la rfrence de l'objet CORBA
attendre les invocations clientes
39
Initialiser l'ORB
40
PO
A
BO
A
41
rootpoa.the_POAManager().activate();
ORB
(orb)
POAManager
Servant
Servant
POA
POA
POA*
Servant
Servant
Servant
Servant
Servant
Servant
*RootPOA
(rootpoa)
42
43
44
Le code du serveur
import org.omg.CORBA.ORB;
import org.omg.PortableServer.*;
public class Serveur
{
public static void main( String [] args )
{
try {
ORB orb = ORB.init( args, null );
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
PremierImpl premier = new PremierImpl();
org.omg.CORBA.Object objref = rootpoa.servant_to_reference(premier);
String ref = orb.object_to_string( objref );
java.io.FileOutputStream file = new java.io.FileOutputStream("ObjectID");
java.io.PrintStream output = new java.io.PrintStream( file );
output.println( ref );
output.close();
orb.run();
} catch ( Exception ex )
{ ex.printStackTrace(); }
}
45
Dvelopper le client
Les tapes suivre sont les suivantes :
Initialiser l'ORB,
Rcuprer la rfrence de l'objet utiliser,
Convertir la rfrence vers le type de l'objet utiliser,
Utiliser l'objet.
46
org.omg.CORBA.Object
object_to_string
Premier
string_to_object
Conversion
47
org.omg.CORBA.Object
48
Le code du client
49
Excuter l'application
Suivre les tapes suivantes :
lancer le serveur,
copier le fichier contenant la rfrence d'objet sur le poste
client,
lancer le client.
50
Synthse
Le dveloppement d'une application CORBA respecte
toujours les mme tapes.
Description des objets l'aide de l'IDL,
Implantation des divers objets,
Implantation du serveur avec changes des rfrences,
Implantation du client.
51
Exercice
52
53
54
55
Exemple :
void f( ) raises ( monException );
56
Une exception dcrite en IDL est une exception utilisateur qui sera
traduite en Java sous forme d'une classe.
57
58
59
Une exception IDL peut tre dfinie au sein d'une interface IDL.
interface Diviseur
{
exception DivisionParZero { };
};
60
Cette rgle s'applique tous les types complexes qui sont dcris dans une
interface.
Exercice
61
Rgle de traduction :
[ readonly ] attribute type nom ;
public void nom( type value );
public type nom( );
Exemple :
attribute string nom;
public void nom( String value );
public String nom();
63
Le module IDL
64
Exercice
65
Notion d'Alias
Exemple :
typedef long Heure;
66
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
Exemples :
typedef sequence<String> liste;
typedef sequence<String, 100> liste_bornee;
68
Exemples :
// IDL
typedef sequence<long> colonne;
// Java
int [ ]
// IDL
typedef sequence<colonne> matrice;
// Java
int [ ] [ ]
69
Exemple de structure
struct Personne
{
string nom;
string prenom;
};
typedef sequence< Personne > liste;
interface Course
{
attribute liste participants;
};
71
Chaque membre est lui mme traduit selon la rgle standard qui lui
est propre ( exemple : une squence est traduite en un tableau ).
72
74
Pour convertir une rfrence d'objet vers une rfrence d'un objet
de base on doit utiliser l'opration narrow :
interface Base
{ // };
Sub a = .
Base b = BaseHelper.narrow( a );
75
Exemples
interface Exemple
{
//
};
interface AutreExemple
{
void f ( in Object obj );
void g ( in Exemple obj );
};
76
77
Une classe holder porte le mme nom que le type avec pour
suffixe Holder .
78
Quelques piges...
Type standard IDL : string
Traduction en Java : String
Classe holder associe : org.omg.CORBA.StringHolder
Type utilisateur IDL : typedef long heure;
Traduction en Java : int
Classe holder associe : org.omg.CORBA.IntHolder
!
79
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
81
82
Client
Invoque
Objet de dlgation
Dlgue
Dlgu
!
83
85
jdk
1.4
PO
A
BO
A
86
Exercice
Reprendre l'exercice prcdent en utilisant cette fois
l'approche par dlgation. On devra en plus dvelopper
le serveur.
interface Diviseur
{
exception DivisionParZero { };
float division( in float nb1, in float nb2 )
raises ( DisivionParZero );
87
};
Service de dsignation
88
89
90
.narrow(orb.resolve_initial_references(("NameSe
rvice")));
classe NameComponent
Dfinir un nom simple
Crer une squence un doublon (~ 1 tableau 1 lm.)
NameComponent[]name=new
NameComponent[1];
Initialiser la squence
name[0]=newNameComponent();
name[0].id="Hello";name[0].kind=
"appliCORBA";
92
La liaison
Liaison : Mthodes bind ou rebind de linterface
NamingContext
bind(name, href) : cre la liaison name-href dans le
contexte ncref
rebind(name, href) : cre la liaison name-href dans le
contexte ncref mme si le nom est dj li
93
orbd
jdk
1.4
95
96
Un type Any peut contenir une valeur de nimporte quel autre type
de donne de CORBA ( types de bases et types complexes ).
97
Exemple :
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
org.omg.CORBA.Any monAny = orb.create_any();
99
Exemple dutilisation
public class Exemple
{
public static void main( String [] args )
{
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init( args, null );
org.omg.CORBA.Any any = orb.create_any();
int nombre = 100;
any.insert_long( nombre );
int extrait = any.extract_long( );
}
}
100
Exercice
Dvelopper lapplication suivante ( client et objet ) :
interface Calculatrice
{
any addition( in any nb1, in any nb2 );
};
101
102
103
La description du type
104
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 ).
105
106
107
Exemple
// Initialise lORB
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
108
Exercice
Reprendre lapplication prcdente en utilisant la notion
de TypeCode :
Typedef sequence<int> intSequence;
interface Calculatrice
{
any addition( in any nb1, in any nb2 );
};
110
111
Le mcanisme D.I.I.
112
Le mcanisme D.S.I.
113
114
115
Un environnement complet...
116
Objet C.O.R.B.A.
CLIENT
SERVEUR
Squelette
souche
D.I.I.
Adaptateur d'objets
le bus C.O.R.B.A.
117
D.S.I.
Quelques ouvrages
Au cur de CORBA
( J.DANIEL, Vuibert )
118