65
Laboratoire Laboratoire d’Informatique du Littoral Le middleware CORBA (1) Le middleware CORBA (1) N. Melab [email protected] littoral.fr

Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab [email protected]

Embed Size (px)

Citation preview

Page 1: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

LaboratoireLaboratoire d’Informatique du Littoral LaboratoireLaboratoire d’Informatique du Littoral

Le middleware CORBA (1)Le middleware CORBA (1)

N. [email protected]

Page 2: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

RéférencesRé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

Page 3: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Motivations (1)Motivations (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 d’hétérogénéité

Page 4: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Motivations (2)Motivations (2) Coopération

Coopération des applications «patrimoines» Nouvelles technologies

Mise à jour des applications «patrimoines»

Problèmes d’interopérabilité et d’intégration

Page 5: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

CommunicationCommunication

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

Page 6: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

HétérogénéitéHétérogénéité Trouver la meilleure combinaison des

technologies A différents niveaux :

Modèles et langages de programmation Systèmes d’exploitation 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

Page 7: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

IntégrationIntégration

Intégration à deux niveaux Intégration des nouvelles technologies

«Perpendiculaire» au problème d’intégration

Intégration des applications «patrimoines» avec les nouvelles technologies

Page 8: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

InteropérabilitéInteropé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, …)

Page 9: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

L’approche objetL’approche objet Différents environnements basés sur les

3 paradigmes cités résolvent les problèmes de communication et d’hétérogénéité

L’approche objet : solution aux problèmes d’intégration et d’interopérabilité Propriété d’encapsulation IDL : Interface Definition Language

Informatique répartie & approche objet : cadre conceptuel unique allant de l’analyse jusqu’au déploiement des applications distribuées

Middleware (CORBA)

Page 10: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Objets distribuésObjets 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 d’un objet distant

Page 11: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

L’Object Management Group (OMG) IDL : Langage de spécification ORB : Bus de communication entre

objets Méthodologie de développement et

application

PlanPlan

Page 12: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

L’Object Management Group

Consortium créé en 1989actuellement plus de 850 membres

Objectif: faire émerger des standards

pour l’intégration d’applications distribuées hétérogènes et

la réutilisation de composants logiciels

Page 13: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

OMG : 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)

Page 14: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

OMA : l’architecture globale

OMA : l’architecture globale

Bus d’objets répartis

Licences

Transactions PersistancePropriétés ChangementsEvents

Nommage Vendeur Sécurité RelationsCollectionsTemps Externalisation

InterrogationsCyclede vie Concurrence

Services objet communs

Gestion des tâches

Gestion de l’information

IHM

Administration

Utilitaires communs

Finance

Télécoms

Santé

Interfacesde domaine

Objetsapplicatifs

Spécifiques

Page 15: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

L’Object Management Group (OMG) IDL : Langage de spécification ORB : Bus de communication entre

objets Méthodologie de développement et

application

PlanPlan

Page 16: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Le langage OMG-IDLLe langage OMG-IDL

Coopération entre fournisseurs et utilisateurs de services Expression sous forme de contrats Séparation de l’interface de l’implémentation

Contrat : ensemble d’interfaces spécifiées avec IDL

Projection en souche (côté client) et squelette (côté serveur) Précompilateur IDL

Page 17: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Langage «objet» de spécification d’interfaces (et non pas d’implantation) : 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.

CaractéristiquesCaractéristiques

Page 18: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (1)

Eléments du langage (1)

Commentaires Même chose qu’en 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

Page 19: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (2)

Elé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 sequence<string> DesAgences; // Autres définitions };

Page 20: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (3) : Types de données

Eléments du langage (3) : Types de données

Valeur

Type simple

shortlonglonglong ushort

ulongulonglong

floatdoublelongdouble

charstring

wcharwstring

booleanoctet

Type dynamique

TypeCode any

Type composé

arraysequence

struct

unionenum

Type d’objet

...

Page 21: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (4)

Elé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;

Page 22: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (5)

Elé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; };

Page 23: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (6)

Elé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; };

Page 24: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (7)

Eléments du langage (7)

Tableaux Exemples

typedef Date[10] tab_dates; typedef float[TAILLE1] [TAILLE2] matrice;

Tableaux dynamiques : séquences : Mot-clé sequence Exemple

typedef sequence<long> DesNombresPremiers; typedef sequence<Jour> DesJours; typedef sequence<Date> DesDates;

Page 25: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (8)

Elé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 sequence<Compte> DesComptes;

Page 26: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (9)

Elé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 d’invocation : 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 d’opérations

Page 27: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (10)

Elé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 l’attribut

Exemple readonly attribute Annee annee_courante;

Page 28: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Eléments du langage (11)

Elé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;

}

L’héritage peut être multiple et répété

Page 29: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Constructions du langage (résumé)

Constructions 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 { ... } ;

Page 30: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

ExempleExemple

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; }; // D’autres définitions et interfaces };

Page 31: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Projection d’IDL (1)Projection d’IDL (1)

Deux types de projection : squelette & souche

Fichier IDL

Souche IDL C++

Squelette IDL Java

IIOP

ORB A

ORB BClient C++ Serveur Java

Précompilateur IDL Java

Précompilateur IDL C++

Page 32: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Projection d’IDL (2)Projection d’IDL (2) Liaison vers un langage donné conformément aux règles définies par l’OMG 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 L’invocation des opérations La manipulation des exceptions L’accès aux attributs L’API de l’ORB.

Page 33: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

CORBA/IDL C++ Javashort CORBA: :Short short

unsigned short CORBA: :UShort shortlong CORBA: :Long intunsigned long CORBA: : ULong intlong long CORBA: :LongLong long

unsigned long long CORBA: :ULongLong long

float CORBA: :Float float

double CORBA: :Double double

long double CORBA: :LongDouble Pas encore défini

boolean CORBA: :Boolean boolean

octet CORBA: :Octet byte

char CORBA: :Char char

wchar CORBA: :WChar char

string CORBA: :String & char* String

wstring CORBA: :WString & char* String

fixed Template CORBA: :Fixed Java.math.BigDecimal

Types de baseTypes de base

Page 34: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

CORBA/IDL C++ JavaModule namespace, classe

imbriquée ou autrepackage

Type élémentaire Définition de type Type élémentaireConstante Constante Attribut constantDéfinition de type typedef Pas de projectionEnumération enum Classe

Structure Structure Classe

Union Classe Classe

Tableau Tableau Tableau

Séquence Classe Tableau(dynamique)

Interface Classe Interface

Référence d’objet Instance Instance

Attribut 1 ou 2 fonctions virtuellesmembres

1 ou 2 opérationsmembres

Opération Fonction virtuelle membre Opération membre

Autres règles de projection (1)Autres règles de projection (1)

Page 35: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

CORBA/IDL C++ JavaInvocation Appel de fonction membre

(->)Appel d’opération(.)

Passage de paramètres (suite) Par valeur ou classeTHolder

Exception Classe ClasseTraitement desexceptions

try { … } catch try { … } catch

Gestion mémoire Classes T_var Ramasse-miettes

Autres règles de projection (2)Autres règles de projection (2)

Page 36: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Exemple : PerfectNumbers.idl

Exemple : PerfectNumbers.idl

interface PerfectNumbers { typedef sequence<long> PERFECTS; boolean is_perfect_number (in long number); PERFECTS all_perfects (in long number);};

Page 37: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Exemple : PerfectNumbers.java

Exemple : PerfectNumbers.java

public interface PerfectNumbers extends org.omg.CORBA.Object { public boolean is_perfect_number (int number); public int[] all_perfects (int number);};

Page 38: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Exemple : PerfectNumbers.hExemple : PerfectNumbers.h

class PerfectNumbers : virtual public CORBA_Object { // … typedef OBFixSeq<CORBA_Long> PERFECTS;

virtual CORBA_boolean is_perfect_number (CORBA_Long number); virtual PERFECTS* all_perfects (CORBA_Long number);};

Page 39: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Passage de références en C++Passage de références en C++

Types IDL in inout out result

Types élémentaires Par valeur T Par référence T& Par référenceT&

Par valeur T

Chaîne de caractères const char* char*& char*& char*Références d’objets T_ptr T_ptr& T_ptr& T_ptrStructures et unions àtaille fixe

Par référenceconst T&

Par référence T& Par référenceT&

Par valeur T

Structures et unions àtaille variable,séquences et any

Par référenceConst T&

Par référence T& Par référencesur ptr T*&

Pointeur T*

Page 40: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

ExempleExemple

interface PerfectNumbers { typedef sequence<long> PERFECTS; boolean is_perfect_number (in long number); PERFECTS all_perfects (in long number);};

Page 41: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

L’Object Management Group (OMG) IDL : Langage de spécification ORB : Bus de communication entre objets Méthodologie de développement et

application

PlanPlan

Page 42: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

ORB

OMG : le modèle client/serveur objet

ObjetCORBA

Etat

Coded’implantation

Référenced’objet

Interfaced’objet

Requête Activation

Page 43: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Le module CORBA contient les définitions des API des composantes du

bus les définitions IDL des protocoles

d’interopérabilité entre bus CORBA (IIOP, GIOP, etc.)

Deux interfaces de base Object ORB

Le module CORBALe module CORBA

Page 44: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Encapsulation des références d’objets CORBA

Héritée par les interfaces IDL définies dans tout contrat

Opérations d’obtention des méta-données caractérisant un objet

Opérations de base de manipulation de ces références

Opérations relatives à l’invocation dynamique

L’interface Object (1)L’interface Object (1)

Page 45: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

interface Object { // Non standardisée : dépend de l’implantation 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);};

L’interface Object (2)L’interface Object (2)

Page 46: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

L’interface ORBL’interface ORB

C’est un «fourre-tout» Elle permet

d’obtenir les références des objets notoires de convertir les références d ’objets en

chaînes de caractères et vice versa d’obtenir les références des adaptateurs

d’objets d’instancier des méta-données nécessaires à

l’invocation dynamique des objets manipuler les requêtes invoquées

dynamiquement

Page 47: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

module CORBA { typedef string ORBid; typedef sequence<string> 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);

... }

Initialisation du busInitialisation du bus

Page 48: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Les objets notoires (1)Les 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

Page 49: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

interface ORB { typedef string ObjectId; typedef sequence<ObjectId> ObjectIdList; ObjectIdList list_initial_services();

exception InvalidName {}; Object resolve_initial_references(in ObjectId

identifier) raises (InvalidName);};

Les objets notoires (2)Les objets notoires (2)

Page 50: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

...// Obtenir toute la liste des objets notoiresObjectIdList liste = orb.list_initial_services();

// Obtenir un seul objet notoiretry { Object obj2 = resolve_initial_references(``NameService’’);} catch (org.omg.CORBA.ORBPackage.InvalidNmae ex) { System.err.println(``Can not resolve NameService’’); return; };

Les objets notoires (3)Les objets notoires (3)

InterfaceRepository

TradingService

Page 51: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

// 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 (args[0]); Hello hello = HelloHelper.narrow(obj);

// Invocation de l ’objet distant hello.hello();

Conversion d’objetsConversion d’objets

Page 52: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

L’Object Management Group (OMG) IDL : Langage de spécification ORB : Bus de communication entre

objets Méthodologie de développement et

application

PlanPlan

Page 53: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Ecrire le contrat IDL (appli.idl) : ensembles d’interfaces en IDL

Générer les souches/squelettes de communication

et les interfaces (compilateur IDL/langage d’implantation)

Ecrire les implantations des interfaces Ecrire les codes du serveur et du client

Méthodologie de développement

Méthodologie de développement

Page 54: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Compilation et exécution (Java)

Compilation et exécution (Java)

Quelques variables d’environnement setenv CLASSPATH <RépertoireORB>/lib/OB.jar: … : classes setenv PATH <RépertoireORB>/bin/<JDK>/bin:$PATH

Génération des souches/squelettes mkdir <nomPackage> jidl <nomPackage>.idl --package <nomPackage>

Compilation des sources et souches/squelettes mkdir classes javac -d classes *.java <nomPackage>/*.java

Exécution du serveur et du client java Server java Client [IOR: …]

Page 55: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Le bus ORBacusLe 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

Page 56: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Le cas du bus ORBacusLe 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 d’interfaces (IR) C++

Synopsis (-h, --h : option d’aide) idl [options] fichiers_idl jidl [options] fichiers_idl hidl [options] fichiers_idl ridl [options] fichiers_idl irgen nom

Page 57: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

L’application « Hello World »L’application « Hello World »

Client

Traitement

Serveur

Bus d’objets répartis CORBA

HelloImpl

Souche Hello Squelette Hello

// OMG-IDLinterface Hello { void Hello(); };

Page 58: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

Génération des souches et Génération des souches et interfaces Java pour le fichier interfaces Java pour le fichier

Hello.idlHello.idl

Hello.idl

Compilateur OMG-IDL/Java

Hello.javaHelloHelper.javaHelloHolder.java

_HelloImplBase.java

StubForHello.java

HelloClient HelloServeur

Page 59: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

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.object 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 ... }

L’interface et les classes L’interface et les classes HelloHello

Page 60: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

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 l’implantation

Les classes souche et Les classes souche et squelettesquelette

Page 61: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

// HelloImpl implante l’interface 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 !"); }}

L’implantation Java de L’implantation Java de HelloHello

Page 62: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

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 l’objet d’implantation Hello. 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 programme Le programme HelloServerHelloServer

Page 63: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

// Mettre le serveur en attente des requêtes CORBA boa.impl_is_ready (null);

System.exit(0);

// En cas de problème lié à l’utilisation de CORBA} catch (org.omg.CORBA.SystemException ex) { System.err.println(ex.getMessage()); ex.printStackTrace(); System.exit(1); }}}

Le programme Le programme HelloServer HelloServer (suite) (suite)

Page 64: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

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 l’objet Hello.

org.omg.CORBA.Object obj = orb.string_to_object (args[0]);

Hello hello = HelloHelper.narrow(obj);

// Invocation de l’objet distant

hello.hello();

Le programme Le programme HelloClientHelloClient

Page 65: Laboratoire Laboratoire dInformatique du Littoral Le middleware CORBA (1) N. Melab melab@lil.univ-littoral.fr

System.exit(0);

// En cas de problème lié à l’utilisation de CORBA} catch (org.omg.CORBA.SystemException ex) { System.err.println(ex.getMessage()); ex.printStackTrace(); System.exit(1); }}}

Le programme Le programme HelloClient HelloClient (suite) (suite)