Professional Documents
Culture Documents
Samia Bouzefrane
Maître de Conférences
Laboratoire CEDRIC
Conservatoire National des Arts et Métiers
292 rue Saint Martin
75141 Paris Cédex 03
samia.bouzefrane@cnam.fr
http://cedric.cnam.fr/~bouzefra
Intergiciels à messages
MOM: Message Oriented Middleware IBM MQSeries,
Microsoft Message Queues Server,DECmessageQ, etc.
- Développement des réseaux hétérogènes tant sur les architectures que sur
les systèmes
Modèle Client/serveur
requête
Client Serveur
réponse
Interface Interface
Réseau
C C C/S C/S
S C/S
Appelant
Appelant
Réseau
Décodage Squelette
Appelé
paramètres
Appel local
Invocation distribuée Appelé
ORB
Objet serveur
Objet serveur BD Objet annuaire d ’impression
1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001
OMA v1
11 membres 390 Définition de services CORBA
CORBA 1.1 membres CORBA 2.0 CORBA 2.3 CORBA 3
200 membres 2.2
Commerciaux
• ORBIX IONA www.iona.com
• VisiBroker Inprise www.inprise.com/visibroker/
• ORBacus OOC www.ooc.com
• DSOM IBM www.software.ibm.com/ad/som/
Gratuits
• MICO Univ. Francfort www.mico.org
• JacORB univ. Berlin www.inf.fu-berlin.de/~brose/jacorb
• OmniORB 2 AT&T www.uk.research.att.com/omniORB/
• TAO univ. Washington www.cs.wustl.edu/~schmidt/TAO.html
Client
Serveur
Smalltalk
Smalltalk
Cobol
Java
Cobol
C++
Java
C++
Ada
Ada
C
C
Interface IDL
Souche Squelette
Interface
IDL Gestionnaire du
Service (Serveur) appelle
Client Implémentation
Compilateur du service
inclut IDL inclut
(Servant)
projection
stub/
squelette
souche
ORB
invocation Raccordement au bus
- Quand un client invoque une méthode sur l’objet proxy (stub) local,
- l’ORB empaquette les paramètres de l’appel ;
- il les envoie au serveur;
- le serveur les dépaquette ;
- le serveur invoque la méthode sur le servant (objet distant);
- les éventuels paramètres de sortie ou valeurs de retour suivent le chemin
inverse.
IDL de CORBA
• orienté objet
• supporte l’héritage
• dédié à la programmation distribuée
<modules> module TP {
<interfaces> interface Etudiant {
<attributs> attribute long age;
<operations> boolean present (in long jour)
raises jourFerie;
}
}
• les modules peuvent être emboîtés les uns dans les autres
• les types, constantes, exceptions peuvent être déclarés à différents niveaux
(globalement, localement à un module, localement à une interface).
Opérateurs autorisés
• unaires + - ~
• binaires + - * / % << >> & | ^
module <ident> { … }
Exemple
module mesAnimaux {
…
module alaVille { …};
module alaCampagne { …};
…
};
Toutes les définitions d’un module sont «visibles» grâce à l’opérateur de
résolution de portée ::
Ex. mesAnimaux::alaVille::...
Exemple
interface B {
void f (in float T);
};
interface A : B { …}; // utilise B
4 1 2 3
Prog. Interface Prog.
client IDL Implantation serveur
Générés par
Souche le compilateur Squelette
statique de langage IDL statique
Adaptateur d ’objets
Noyau de l ’ORB
IDL Java
[unsigned] short short
[unsigned] long int
[unsigned] long long long
float float
double double
char, wchar char
string, wstring Java.lang.String
boolean boolean
octet byte
any org.omg.CORBA.Any
void void
long double non supporté
IDL Java
module package
interface interface
attribute Méthodes setter/getter
opération Méthode Java
Rmq. Les constructions IDL qui n’ont pas d’équivalent en Java sont traduites
par des classes
IDL Java
module M { package M;
interface I {
long meth (in long arg) interface I {
raises (e); int meth ( int arg)
throws e;
attribute float a;
float a();
readonly void a ( float value);
attribute double d; double b();
} }
exception e { … } class e extends Java.lang.Exception
} { ... }
// fichier Specification.idl
module ReverseApp
{
interface Reverse
{
string reverseString(in string chaineOrigine);
};
};
/**
* ReverseApp/Reverse.java .
* Generated by the IDL-to-Java compiler (portable), version
"3.2"
* from Reverse.idl
* vendredi 17 octobre 2008 17 h 04 CEST
*/
/**
* ReverseApp/ReverseOperations.java .
* Generated by the IDL-to-Java compiler (portable), version
"3.2"
* from Reverse.idl
* vendredi 17 octobre 2008 17 h 04 CEST
*/
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
}
catch(Exception e) {
System.err.println("Erreur : "+e);
e.printStackTrace(System.out);
}
}
} // fin du serveur
int longueur=chaineOrigine.length();
StringBuffer temp = new StringBuffer (longueur);
for (int i=longueur; i>0; i--) {
temp.append(chaineOrigine.substring(i-1, i));
}
return temp.toString();
}
} // fin de Servant
Machine_serv> ls
Specification.idl Serveur.java ReverseApp/
Machine_serv> ls ReverseApp/
Reverse.java ReverseOperations.java
ReversePOA.java ReverseHelper.java
ReverseHolder.java _ReverseStub.java
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import ReverseApp.*;
String P="Paris";
String resultat=Ref1.reverseString(P);
System.out.println("Le mot inverse de " + P +" est :" + resultat);
}
catch(Exception e) {
System.out.println("Erreur : " + e);
e.printStackTrace(System.out);
}
} // fin du main
} // fin de la classe
Machine-cli> ls
Specification.idl ReverseApp/
Machine-cli> ls ReverseApp/
Reverse.java ReverseOperations.java
_ReverseStub.java ReverseHelper.java
ReverseHolder.java
Machine-cli> ls
Specification.idl Client.java Client.class ReverseApp/
Machine-cli>
Sous Unix :
Machine-serv> tnameserv –ORBInitialPort 1500&
Sous Windows :
Machine-serv> start tnameserv –ORBInitialPort 1500&
Lancer le serveur :
Machine-serv> java Serveur –ORBInitialPort 1500&
Lancer le client.
Sous Unix :
Machine-cli> java Client –ORBInitialHost serv.cnam.fr
–ORBInitialPort 1500
- Cours CORBA, DESS Informatique, C. Bertelle & D. Olivier, Université du Havre, 2001.
- Au cœur de CORBA avec Java, J. Daniel, Ed. Vuibert, Nlle Edition, 2002.
- Client/Server Programming with JAVA and CORBA, Robert Orfali & Dan Harkey,
2ème édition, John Wiley & Sons Inc, 1998.