Université des Sciences et de la Technologie
d’Oran
- Mohamed Boudiaf -
Cours L3/ISIL
CORBA
Common Object Request Broker
Architecture
Pr Mekkakia.M.Z
Les standards
Java RMI
Remote Method Invocation
CORBA
Common Object Request Broker
Architecture
2
RMI vs CORBA
RMI CORBA
Editeur SUN OMG
Plate-forme Multi Multi
Langage de Java Multi
programmation
Langage de définition Java IDL
de service
Réseau TCP, HTTP, IIOP GIOP, IIOP
Marshalling Sérialisation Java Représentation IIOP
Nommage RMI, JNDI, JINI CosNaming
Marshaling (Présentation) : est le processus de
transformation de la représentation mémoire d'un objet en un
format de données adapté au stockage ou à la transmission.3
CORBA
Common Object Request Broker
Architecture
Permet de mettre en place une
communication logique entre 2
applications
Les applications peuvent être
implémentées en des langages
différents.
Est constituée de plusieurs composants
Nécessite peu de bibliothèques.
propose des profils pour le temps réel et
l'embarqué. 4
L'architecture des
composants
Bus logiciel ORB
Object Request Broker
Souches
stub et skeleton
POA
Portable Object Adapter
l'interface IDL
IOR
Interoperable Object Reference
Services
5
ORB
Object Request Broker
Il est responsable de la communication
transparente entre objets distants au travers
des environnements répartis hétérogènes.
C’est le noyau de transport des requêtes aux objets
Il maintient / gère les références des objets distants
Il achemine la requête vers l’objet a partir de sa
référence
ORB est locale pour chaque application
Chaque langage défini une bibliothèque ORB
6
CORBA : Les souches
stub et skeleton
Côté client : le stub est défini
Il assure la liaison avec l'ORB.
IL assure le codage et décodage des
paramètres.
Il assure la transparence des références du
serveurs.
7
CORBA : Les souches
stub et skeleton
Côté serveur : le skeleton
IL permet de gérer l'activation de
l'objet distant à la demande.
Il hérite du POA
8
CORBA : POA
Portable Object Adapter
POA est l'adaptateur d'objet côté serveur
Il génère et interprète les références des
objets distants
Il gère les autorisations d‘accès aux objets
Il permet l'invocation des méthodes sur les
objets
Il maintient les associations entres objets
CORBA
9
CORBA : l'interface IDL
IDL est commune aux langages.
Elle Défini les interfaces des objets
CORBA distants
interface de communication client/serveur
contient la signature des méthodes de
l'objet distant
Une interface par objet distant est
définie
10
Interoperable Object
Reference
C’est la référence de l'objet CORBA.
stocké dans Naming Service (service
de nom)
est sous forme codé :
adresse IP de la machine où est localisé
l'objet
port IP pour se connecter au serveur de
l'objet
clé pour designer l'objet dans le serveur.
Exemple :
11
CORBA : Les services
C’est des bibliothèques qui offrent
des services variés pour une
meilleure qualité du projet à
construire
12
CORBA : Exemple de
services
naming: service d'annuaire CORBA.
event: envoie des évènements asynchrones
entre applications.
concurrence : gère les accès concurrent aux
serveurs.
security : gère les accès sécurises aux
serveurs (identification, confidentialité ...)
transaction : prenant en charge les
transactions atomiques (ex: fct de tolérance
aux pannes) et la restauration en cas
d'échec.
13
CORBA : Description par
l’exemple
On présente un exemple d’application
distribuée CORBA à l'aide de Java IDL et
comment les mettre en œuvre en
programmation Java.
L’exemple est tiré du document
https://docs.oracle.com/javase/7/docs/technotes/guides/idl/
jidlExample.html
Les étapes à suivre sont
Définir l’interface
Essalem.idl
Ecrire l’application client
EssalemClient.java
Ecrire le serveur
EssalemServer.java
Compilation et exécution 14
d’application
client/serveur
L’interface IDL
1.1- Ecrire l’interface Essalem.idl
module EssalemApp {
interface Essalem{
string sayEssalem();
}; };
15
d’application
client/serveur
1.2- Mappage de Essalem.idl vers Java
idltojava Essalem.idl
Cette ligne de commande génère le répertoire
EssalemApp ,il contient cinq fichiers:
_EssalemImplBase.java
_EssalemStub.java
Essalem.java
EssalemHelper.java
EssalemHolder.java
16
d’application
client/serveur
1.3 Description des fichiers
_EssalemImplBase.java
C’est une classe abstraite qui représente le squelette du serveur,
fournissant les fonctionnalités CORBA de base pour le serveur.
_EssalemStub.java
Cette classe est le stub client, fournissant la fonctionnalité CORBA pour le
client. Il implémente l‘interface Essalem.java
Essalem.java
Cette interface contient la version Java de notre interface IDL. Elle contient
la méthode unique sayEssalem.
EssalemHelper.java
Cette classe fournit des fonctionnalités auxiliaires, notamment la méthode
«narrow» requise pour convertir les références d'objet CORBA en leurs
types appropriés.
EssalemHolder.java
Cette dernière classe contient un membre d'instance publique de type
Essalem. Il fournit des opérations pour les arguments out et inout, que
CORBA possède 17
d’application
client/serveur
1.4 Exemple de mappage IDL vers
Java
Déclaration IDL Déclaration Java
module EssalemApp package EssalemApp;
interface Essalem public interface Essalem
string sayEssalem(); String sayEssalem();
18
d’application
client/serveur
2- L’application client Corba
comment créer un objet ORB,
comment utiliser le service de
nommage pour obtenir une référence
d'objet initiale et comment invoquer
une opération sur un objet CORBA.
On génère le fichier
EssalemClient.java
19
d’application
client/serveur
2.1 Les étapes à suivre
Importation des packages requis
Déclarer la classe client
Définir une méthode principale
Gestion des exceptions du système CORBA
Création de l’objet ORB
Obtention du contexte de nommage initial
Limitation de la référence d'objet
Trouver un service dans le nommage
Appel de la méthode
20
d’application
client/serveur
2.6 Le code complet du EssalemClient.java
import EssalemApp.*; // Le package contenant nos stubs.
import org.omg.CosNaming.*; // EssalemClient utilisera le service de nommage..
import org.omg.CORBA.*; // Toutes les applications CORBA ont besoin de ces classes.
public class EssalemClient
{ public static void main(String args[])
{ try{
// Créer et initialiser l'ORB
ORB orb = ORB.init(args, null);
// Récupère le contexte de nommage racine
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
// Résoudre la référence d'objet dans le nommage
NameComponent nc = new NameComponent("Essalem", "");
NameComponent path[] = {nc};
Essalem essalemRef = EssalemHelper.narrow(ncRef.resolve(path));
// Appeler l'objet serveur Essalem et afficher les résultats
String essalem = essalemRef.sayEssalem();
System.out.println(essalem);
} catch(Exception e) {
System.out.println("ERROR : " + e);
e.printStackTrace(System.out);
} } }
21
d’application
client/serveur
3. Le serveur EssalemServer.java
comment créer un objet ORB pour le
serveur, comment instancier le
servant (serviteur) et le connecter à
l'ORB, comment enregistrer le servant
auprès du service de nommage et
comment faire attendre le serveur
pour les invocations sur le servant.
22
d’application
client/serveur
3.1 Les étapes à suivre
Importation des packages requis
Déclaration de la classe de serveur
Définir la méthode principale (main)
Gestion des exceptions du système CORBA
Création d'un objet ORB
Gestion de l'objet serveur
Instanciation de l'objet servant (serviteur)
Définition de la classe Servant
Nommage et limitation de la référence d’objet
23
d’application
client/serveur
3.2 Le code du serveur
EssalemServer.java
import EssalemApp.*; // Le package contenant nos stubs.
import org.omg.CosNaming.*; // EssalemServer utilisera le service de nommage.
import org.omg.CosNaming.NamingContextPackage.*; // Le package contenant les exceptions
spéciales
import org.omg.CORBA.*; // Toutes les applications CORBA ont besoin de ces classes.
public class EssalemServer
{ public static void main(String args[])
{ try {
// Créer et initialiser l'ORB
ORB orb = ORB.init(args, null);
// Crée le servant et l'enregistrer auprès de l'ORB
EssalemServant essalemRef = new EssalemServant();
orb.connect(essalemRef);
// Récupèrer le contexte de nommage racine
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef); 24
d’application
client/serveur
3.2 Le code du serveur (suite)
// Lire la référence de l'objet dans le nommage
NameComponent nc = new NameComponent("Essalem", "");
NameComponent path[] = {nc};
ncRef.rebind(path, essalemRef);
// Attendre les invocations des clients
java.lang.Object sync = new java.lang.Object();
synchronized(sync){ sync.wait();
} }
catch(Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}}}
//Le serveur est prêt ; il doit attendre qu'un client demande son service
class EssalemServant extends _EssalemImplBase
{ public String sayEssalem()
{ return "\n Essalem Alaykoum!!\n";
} 25
}
d’application
client/serveur
4. Compilation et exécution
Compiler EssalemClient.java
javac EssalemClient.java EssalemApp\*.java
Vous obtiendrez dans le répertoire du projet.
EssalemClient.class
Compiler EssalemServer.java
javac EssalemServer.java EssalemApp\*.java
Vous obtiendrez dans le répertoire du projet.
EssalemServer.class et EssalemServant.class
26
d’application
client/serveur
5. Exécution de l’application C/S
À partir de l’invité (Windows ou UNIX),
démarrez le serveur de noms Java IDL
tnameserv -ORBInitialPort 1050
À partir du seconde invité
démarrez le serveur Essalem
java EssalemServer -ORBInitialPort 1050
À partir du troisième invité,
exécutez le client d'application Essalem
java EssalemClient -ORBInitialPort 1050
Le client imprime la chaîne du serveur sur la
ligne de commande :Essalem Alaykoum!!
27
d’application
client/serveur
6. A la fin
après le retour réussi de l'application cliente,
n'oubliez pas d'arrêter à la fois
le NameServer et
les processus EssalemServer
En cas où
Si le compilateur Java ( javac) lance un
NoClassDefFoundError, Alors utiliser l'option
(-cp) lors de la compilation des fichiers
source.
javac -cp . *.java EssalemApp\*.java
28
Quelques frameworks
middleware
CORBA (OMG)
Common Object Request Broker Architecture
RMI (Java)
Remote Method Invocation
RMI/IIOP (Java)
IIOP : Internet Inter-ORB Protocol
EJB
Enterprise Java Beans (Objets distribués)
J2EE (Sun)/JEE (actuelement)
Java2 Enterprise Edition: Intègre les API RMI, Corba,
….. 29
Quelques frameworks
middleware
RMI, CORBA, EJB et J2EE sont des
technologies distribuées
RMI :
Appeler des méthodes sur des objets qui
vivent dans une autre VM
C'est un bon choix pour les petits
programmes compatibles réseau
30
Quelques frameworks
middleware
CORBA
Est une spécification indépendante du
langage de programmation
Il énumère plusieurs services: dénomination,
sécurité, objets persistants, etc.
Serait utile pour créer des applications plus
complexes que RMI ne le prendrait
facilement en charge seule.
Applications qui nécessitent des autorités de
sécurité et plusieurs serveurs.
31
Quelques frameworks
middleware
EJB
EJB sont des composants serveurs donc non
visuels qui respectent les spécifications d'un
modèle éditées par Sun.
Ces spécifications définissent une architecture,
un environnement d'exécution et un ensemble
d'API.
Les EJB et leurs technologies associées (comme
CORBA) sont utiles pour les applications à
grande échelle.
32
Quelques frameworks
middleware
J2EE / JEE
Les EJB font partie de J2EE (Java 2 Enterprise
Edition), qui spécifie de nombreux types de
services spécifiés par CORBA et utilise RMI pour
communiquer.
C’est aujourd’hui un standard du marché car il
offre
une simplification de l’architecture, du
développement et de la maintenance
un support du transactionnel et de la scalibilité
une intégration homogène avec les SI existants
une indépendance sur le choix des serveurs, des
outils et des composants (nouveau JEE !!!) 33
Quelques frameworks
middleware
Conclusion
Ce sont des technologies non triviales
(puissantes),
il est donc difficile de dire exactement où
l'un choisirait l'une par rapport à l'autre.
Ces décisions (choix du framework) doivent
être guidées par les exigences de
l'application que l'on conçoit.
34