2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA Stéphane Vialle Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle 1 Principes 2 Architecture 3 4 Aperçu d utilisation 2 Principes Corba : Un mécanisme de RPC (RMI) de haut niveau en environnement hétérogène Communication entre objets distants : Y.f( ); X f( ) { } Y Processus P1 Processus P2 Machine Machine Windows Comm. network Unix Coopération entre différents environnements : C C++ Java CORBA bus Eiffel SmallTalk 3 1
Principes Description officielle : CORBA = Common Request Broker Architecture Bus logique pour la gestion d objets distribués - Première version en 1991 - Pour construire des applications distribuées de grande taille Masque l hétérogénéité des environnements - différents langages - différents OS - différentes architectures Basé sur le Remote Method Invocation (RMI) - du RPC entre objets Fruit d un consortium international (un standard) 4 Principes Composition de Corba : Un modèle objet : OMG object model Une architecture objet globale : Management Architecture (OMA) Un bus logique d objets distribués : Request Broker architecture (ORB) Un langage de description d interface : Interface Description Language (IDL) Des implantations variées Non spécifiées 5 1 Principes 2 Architecture 3 4 Aperçu d utilisation 6 2
CORBA est juste un ensemble de spécifications : Un schéma de 9 blocs fonctionnels Pas de spécifications d implantation chaque implanteur de CORBA est libre d inventer une mise en oeuvre efficace +IDL compiler Interface Repository 4 Client IDL s: DII: Static Dynamic Invocation Invocation Interface Interface 2 3 ORBI: ORB Interface 5 1 ORB Core IDL Skeleton s DSI: Dynamic Skeleton Interface 6 7 Adapter Implementation Repository 9 Adapter Interface 8 7 ORB core: - Route les RPC/RMI entre les objets - Optimisation du mécanisme de routage : - entre machines : par le réseau, - entre processus de la même machine : par la mémoire partagée, - entre parties du même processus : par appels de fonctions Mais Corba reste considéré comme «lent»! - ORB core est inaccessible aux applications (couche cachée) 8 Les «talons» coté client : IDL s / Static Interface Invocation: - Pour les RMI sur des objets et méthodes connues à la compilation - Permettent aux clients de faire des appels locaux (à des s ) -Les s empaquètent et dépaquètent les RMI et se chargent des vrais appels distants Dynamic Invocation Interface: - Utile quand l interface des objets à appeler est inconnue à la compilation (ex : pour implanter des interpréteurs de cmd) - Doit rassembler beaucoup d info sur l objet à appeler Beaucoup plus complexe que les RMI statiques 9 3
Les «talons» coté serveur : Static Skeleton Interface - Dépaquètent les appels des clients - Transmettent aux objets appelés et connus à la compilation - Empaquètent les résultats destinés aux clients -Les skeletons sont générés par IDL (comme les s ) Dynamic Skeleton Interface - Permet d accepter des appels sans connaître les règles de dépaquetage à la compilation (sans connaître les skeleton ) - Utile pour s interfacer avec des langages interprétés 10 Les objets appelés peuvent être plus complexes Adapter - ORB core délègue le traitement des appels à l Adapter - Les objets peuvent avoir différents supports : processus, BdD, - L Adapter masque ces différences: activation de processus, accès à une BdD, - L Adapter lit les données de l implementation repository Implementation Repository - Stocke les données relatives à l implantation des objets - Ex : noms des exécutables, droit d accès, politique d activation des exécutables, 11 Classification des objets Corba en 5 grandes catégories : Des objets utiles à une application, non standardisés Pour réaliser les communications, masquer l hétérogénéité, accéder aux autres objets distribués Application interfaces Des objets métiers, classés par domaines et standardisés Domain interfaces Request Broker services Common facilities Pour les services de base, utilisés par toutes les applications, avec des interfaces standardisées (ex : naming, security, ) Pour les services de haut niveau commun à beaucoup d applications, avec des interfaces standardisées Conçu dés le départ pour capitaliser des développements 12 4
1 Principes 2 Architecture 3 4 Aperçu d utilisation 13 L IDL n est pas un language de programmation, seulement un langage de description IDL permet de : - décrire des coopérations entre clients et serveurs - établir un contrat (agreement) entre clients et serveurs Client IDL agreement CORBA bus skeleton En CORBA l IDL est un langage à part entière avec son générateur de s et skeletons, mais qui ne fait que de la description. 14 IDL agreement Client projections CORBA bus skeleton Les contrats IDL sont : indépendants de l environnement de développement projetés dans des environnements de développement : s coté clients skeleton coté serveurs suivant des règles de projection (IDL C++, IDL Java, ) par le pré-compilateur IDL réalisés par : les s + le bus Corba (ORB) + les skeletons 15 5
Exemple de syntaxe IDL : définition d un service de date (1) module ServiceDate { // Data type definitions // - basic type definitions typedef unsigned short Day; enum Month { January, February, March, April, May, June, July August, September, October, November, December}; typedef unsigned short Year; // - One date (structure) struct Date { Day the_day; Month the_month; Year the_year; }; // - sequence: unlimited set of dates typedef sequence<date> SomeDates; 16 Exemple de syntaxe IDL : définition d un service de date (2) // a first interface in the module interface Calendar { // attribute: object variables accessible from other // objects (possibility to be more accurate) attribute Year current_year; // operations: object methods with input and output // parameters (possibility to be more accurate) boolean Check_one_date(in Date d); void the_day_after(inout Date d); // definitions of specific exception(s) exception IrrelevantDate{String reason;}; // operations using exception(s) Date translate_string(in string one_string) raises(irrelevantdate); string translate_date(in Date one_date) raises(irrelevantdate); }; 17 Exemple de syntaxe IDL : définition d un service de date (3) // a second interface that inherits of the first interface CalendarWithOfficialHolydays : Calendar { // one more operation void official_holydays(in Year the_year, out SomeDates dates); }; }; //end of the module L IDL de CORBA est un langage structuré, avec des concepts «objet» Mais ne définissant que des types et des prototypes de méthodes Sans aucune réelle «instruction» 18 6
Exemple de projection en C++ et Java IDL agreement C++ Client C++ & IDL CORBA bus Java Java & IDL skeleton Règles de projection : IDL C++ Java autre module namespace package structure structure class operation virtual method method 19 1 Principes 2 Architecture 3 4 Aperçu d utilisation 20 Aperçu d utilisation Présence d un serveur de nom (global) : Il existe un annuaire de tous les objets CORBA accessible à travers le bus logique (l ORB) : le serveur de nom de CORBA Inutile de connaitre les machines hébergeant les services Il suffit de connaitre un objet-serveur par son nom mais il faut quand même interroger le serveur de nom (se simplifiera avec les RPC de Grid) /* Identification du service de naming global sur le bus Corba*/ ORB orb = ORB.init(); NamingContext NameServer = NamingContextHelper.narrow( orb.resolve_initial_references( NameService )); /* operation d identification de l objet réalisant le service */ ClasseService ObjetService = ClasseServiceHelper.narrow(NameServer.resolve( calcul )); /* objet (service) distant utilisé comme un objet local */ res = ObjetService.calcul(12,a,b,c); 21 7
Aperçu d utilisation Sémantique puissante Syntaxe lourde : CORBA a plus de puissance d expression que les JAVA-RMI Ex : il dispense le développeur de connaitre le nom des serveurs physiques, et gère l hétérogénéité. Pour cela il s appuie sur une couche de middleware importante Mais sa syntaxe reste lourde (plus lourde que les JAVA-RMI) très critiqué et toujours utilisé (dans des couches cachées) 22 Aperçu d utilisation Co-simulation de systèmes d armes Architecture TENA de cosimulation distribuée (2000-2010) ORB-CORE Bus CORBA (TAO OpenSRC version) 23 8