1 / 118

L'environnement C.O.R.B.A. utilisation avec Java

Xavier Blanc. L'environnement C.O.R.B.A. utilisation avec Java. Xavier.Blanc@lip6.fr. Plan de la présentation. Aperçu de C.O.R.B.A. Une première application avec C.O.R.B.A. Des applications plus conséquentes… Service de désignation Etude du type « Any »

cormac
Download Presentation

L'environnement C.O.R.B.A. utilisation avec Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Xavier Blanc L'environnementC.O.R.B.A.utilisation avec Java Xavier.Blanc@lip6.fr

  2. Plan de la présentation • Aperçu de C.O.R.B.A. • Une première application avec C.O.R.B.A. • Des applications plus conséquentes… • Service de désignation • Etude du type « Any » • Les mécanismes dynamiques de C.O.R.B.A. • Synthèse sur C.O.R.B.A.

  3. Aperçu de C.O.R.B.A.

  4. Qu'est ce que l'O.M.G. ? • O.M.G. ( Object Management Group ) est un consortium qui regroupe plus 800 entreprises du monde entier. • Consortium ouvert aux horizons autres que les concepteurs de logiciels ( industriels, chercheurs, université, etc... ). • Ce consortium définit des spécifications pour fournir un modèle de coopération entre objets répartis.

  5. Fonctionnement de l'OMG • Plusieurs niveaux de souscriptions existent : • contributing, domain contributing, influencing, auditing, university. • Principe de création des spécifications • request for information, request for proposal. • Principe d'approbation des spécifications • Task Force, • Technical Comitee • Architecture Board

  6. OMAMDA Les spécifications de l'O.M.G. • L'OMG spécifie tous les constituants d'un modèle objet global appelé O.M.A. ( Object Model Architecture ) • CORBA est une partie de ce modèle, • Utilitaires communs ( services ), • Eléments spécifiques à des corps de métier ( objets de domaines ).

  7. Qu'est ce que C.O.R.B.A. ? • CORBA ( Common Object Request Broker Architecture ) est un environnement réparti (middleware). • Défini par l'OMG : • première spécification : 1991 • seconde version majeure : 1995 • troisième version majeure : 2002 Version courante ( Septembre 2002) : 3.0

  8. Objectifs de CORBA • Fournir un environnement ouvert • les membres participent aux spécifications • Fournir un environnement portable • les API sont définis pour rendre les applications portables ( quelque soit le produit CORBA utilisé ) • Fournir un environnement interopérable • Permettre aux applications CORBA de collaborer entre elles.

  9. Le bus CORBA Le bus CORBA = ORB NT UNIX UNIX PC PC Sparc

  10. La vue réelle du bus CORBA Réseau TCP/IP ORB PC/NT ORB PC/UNIX ORB Sparc/UNIX NT UNIX UNIX PC PC Sparc

  11. Serveur et objets • Un serveur CORBA peut héberger plusieurs objets CORBA. • Chaque objet est accessible indépendamment des autres objets du serveur. • Chaque objet exprime son offre de services. Pour cela, on utiliser un langage de description de services appelé IDL CORBA.

  12. Le langage IDL CORBA • Il s'agit de décrire au sein d'une interface ( vue cliente de l'objet ) la liste des services offerts ( ensemble de fonctions ). interface Horloge { string donne_heure_a_paris(); string donne_heure_a_Beigin(); };

  13. La compilation IDL • Une description IDL est compilée pour générer les amorces nécessaires au mécanisme RPC. souche description IDL Génération de l'amorce cliente Génération de l'amorce serveur squelette

  14. Intervention des amorces C.O.R.B.A. Client Java Objet C++ Protocole IIOP Souche Java Squelette C++ ORB Java PC/NT ORB PC/UNIX ORB C++ Sparc/UNIX NT UNIX UNIX PC PC Sparc

  15. Souche : Coté client • Fonctions de la souche : • Prépare les paramètres d’entrée de l’invocation • Décode les paramètres de sortie et le résultat • Souche statique • Une par type d’objet serveur à invoquer • Identique aux talons clients RPC • Générée à la compilation à partir de l’interface IDL • Souche dynamique • Souche générique construisant dynamiquement tout type de requêtes • Permet d’invoquer des objets serveurs que l’on découvre à l’exécution (i.e. dont on ne connaît pas l’interface à la compilation : Référentiel d’interfaces)

  16. Squelette : Côté serveur • Fonctions du squelette : • décode les paramètres d’entrée des invocations • prépare les paramètres de sortie et le résultat • Squelette statique • un par type d’objet serveur invoquable • identique aux talons serveurs RPC • généré à la compilation à partir de l’interface IDL • Squelette dynamique • squelette générique prenant en compte dynamiquement tout type de requêtes • permet de créer à l’exécution des classes d’objets serveurs (i.e. que l’on ne connaissait pas à la compilation)

  17. L'identité d'un objet C.O.R.B.A. • Chaque objet C.O.R.B.A. est associé à une référence d'objet qui forme son identité. • Deux objets C.O.R.B.A. du même type ( exemple deux objets Horloge ) ont deux identités différentes. Les références d'objets sont le moyen d'accès à un objet. serveur

  18. L'adaptateur d'objets Serveur Objet A Objet B Squelette A Squelette B Client Adaptateur d'objets Souche A Le bus C.O.R.B.A. ( O.R.B. )

  19. L'adaptateur d'objets • Fonctions • Interface entre les objets CORBA et l’ORB • Enregistrement et recherche des implantations d’objets • Génération de références pour les objets • Gestion de l’instanciation des objets serveurs • Activation des processus dans le serveur • Aiguillage des invocations de méthodes vers les objets serveurs • Différents type d’adaptateur • BOA (Basic Object Adapter) • POA (Portable Object Adapter)

  20. Les communications avec CORBA • Les participants à un échange CORBA communiquent à l'aide d'un protocole spécifique à CORBA : IIOP ( Internet Inter-ORB Protocol ). • Le protocole IIOP est indépendant du langage de programmation, du système d'exploitation et de la machine utilisée. Un client Java pourra utiliser un serveur C++

  21. Normalisation des communications • Protocoles d’interopérabilité entre ORBs conformes à CORBA 2 • GIOP : General Inter-ORB Protocol • Messages : request, reply, cancelrequest, … • nécessite un protocole de transport fiable, orienté connexion • IIOP (Internet IOP) : instanciation de GIOP sur TCP • Autres implantations de GIOP au-dessus de HTTP, RPC DCE, RPC Sun • Composants du protocole • CDR : Common Data Representation • Format de données d’encodage des données • IOR : Interoperable Object References (références d’objets)

  22. Les services C.O.R.B.A. • Pour accélérer et faciliter le développement d'applications avec C.O.R.B.A., l'O.M.G a spécifiée un ensemble de services. • A l'heure actuelle, plus de 17 services ont été définis. • Les services sont vendus séparément du bus CORBA. • Seul quelques services sont actuellement disponibles sur le marché.

  23. L'annuaire C.O.R.B.A. • L'annuaire C.O.R.B.A. est un service. • Il s'agit d'un serveur qui enregistre des associations nom / référence d'objet. • Un serveur peut enregistrer ses objets dans l'annuaire. • Un client peut récupérer l'accès à un objet en consultant l'annuaire.

  24. Client Serveur Applications utilisateurs Vue du modèle O.M.A. Services Objets de domaines Médecine Electronique Annuaire Transaction Le bus C.O.R.B.A. Administration Impression Utilitaires communs

  25. Une première applicationavec C.O.R.B.A.

  26. Opérations à réaliser • Décrire les services offerts des objets CORBA • Développer les objets CORBA • Développer le serveur • Développer le client

  27. Décrire les services offerts • Le développement d'une application CORBA commence par l'énumération des services offerts par chaque objet corba. • Une même description IDL peut contenir plusieurs descriptions d'objets. • Une description IDL s'effectue au sein d'un fichier texte comportant par convention l'extension « .idl » • Chaque objet offre une interface qui contient une liste d'opérations qui seront par la suite offertes aux applications clientes.

  28. Premières règles sur l'IDL • Une interface est une énumération d'opérations et de définitions de types de données. interface Exemple { // contenu de l'interface }; • Une interface supporte l'héritage multiple. interface AutreExemple : Exemple1, Exemple2 { // contenu de l'interface }; Pas de majuscule Se termine par un point virgule

  29. Décrire une opération • Les opérations décrites dans une interface respectent le format suivant : type_de_retour nom_de_l'operation ( liste_des_paramètres ) ; C.O.R.B.A. offre plusieurs types de données : - les types de bases - les types complexes La liste des paramètres peut être vide.

  30. Les types de bases • Les types de bases de CORBA sont : • boolean • octet • short ( ushort ) • long ( ulong ) • longlong ( ulonglong ) • float • double • long double • char • wchar • string • wstring

  31. Les paramètres d'une opération • La description d'un paramètre comporte trois parties : • le modificateur • le type de l'argument ( type de base ou type complexe ) • le nom de l'argument • Le modificateur spécifie le sens d'échange du paramètre : • in : du client vers l'objet CORBA • out : en retour, de l'objet CORBA le client • inout : équivalent à un passage par adresse.

  32. Un exemple de description IDL • L'exemple suivant décrit un objet qui offre une interface appelée « Premier ». Cette interface comporte une opération dénommée « affiche » qui entraîne l'affichage d'un message sur le serveur ( message passé en tant que paramètre ). interface Premier { void affiche ( in string message ) ; };

  33. jdk1.4 POA BOA Compilation d'une description IDL • La description doit être compilée afin de générer les amorces ( souche et squelette ) requises pour l'établissement de la communication inter-processus. • Exemple de compilation IDL : idlj –fall –v Premier.idl • A l'issu de la compilation, plusieurs fichier sont créés : • PremierPOA.java : il s'agit du squelette, • _PremierStub.java : il s'agit de la souche, • Premier.java : il s'agit de l'interface • PremierOperations.java : il s'agit des opérations de l'interface

  34. Concept de « mapping » • Une description IDL est traduite vers un langage de programmation. • Les règles de traduction sont appelées « mapping » et font partie de la spécification CORBA. • Grâce au mapping, deux fournisseurs d'ORBs offriront le même modèle de programmation. portabilité des applications

  35. IDL boolean octet short ushort long ulong long long ulong long Java boolean byte short int long Correspondance des types de bases IDL float double long double char wchar Java float double char char IDL string wstring Java String String

  36. Développer les objets CORBA • Pour développer un objet CORBA plusieurs critères sont à prendre à compte : • le type de l'adaptateur d'objet utilisé, • l'approche de développement. • Deux adaptateurs d'objets sont disponibles : • le B.O.A. ( Basic Object Adapter ) • le P.O.A. ( Portable Object Adapter ) • Deux approches existent : • l'approche par héritage : ici l'implantation de l'objet doit hériter du squelette ( c'est à dire de la classe Java correspondant au squelette qui à été générée par le compilateur ). • l'approche par délégation (prochaine partie).

  37. POA BOA L’approche par héritage org.omg.PortableServer.Servant API de CORBA Généré à partir de l'IDL PremierPOA PremierOperations Implantation de l'objet A développer par le programmeur

  38. Développement de notre premier objet CORBA public class PremierImpl extends PremierPOA { public void affiche( String message ) { System.out.println( message ); } } L'implantation hérite du squelette. La seule obligation est de ne pas oublier l'héritage du squelette. Ensuite, il faut tout simplement fournir le code des opérations décrites dans l'interface IDL. !

  39. Développer le serveur • Les étapes à respecter sont les suivantes : • initialiser l'ORB • initialiser l'adaptateur d'objets • créer l'objet CORBA • enregistrer l'objet CORBA • exporter la référence de l'objet CORBA • attendre les invocations clientes

  40. Initialiser l'ORB • Pour cela, on fait appel à la fonction statique « init » de la classe « org.omg.CORBA.ORB ». • Deux formes de cette fonction sont disponibles : • org.omg.CORBA.ORB.init( ) • org.omg.CORBA.ORB.init( String [] args, java.util.Properties prop ) public static void main( String [ ] args ) { org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init( args, null ); // … }

  41. POA BOA Initialiser l'adaptateur d'objets • Une application serveur contient au minimum un POA (elle peut en avoir plusieurs) appelé le RootPOA • Le(s) POA(s) sont gérés par le POA Manager • Une application serveur doit • Récupérer une référence d’objet RootPOA POA rootpoa = POAHelper.narrow(orb.resolve_initial_references («RootPOA»)); et • Activer le POA Manager rootpoa.the_POAManager().activate();

  42. SERVEUR Requêtes client ORB (orb) POAManager POA POA POA* Servant Servant Servant Servant Servant Servant Servant Servant *RootPOA (rootpoa) POAManager & POA

  43. Créer et enregistrer l'objet CORBA • Pour créer l'objet CORBA, il suffit de créer une instance de la classe d'implantation de l'objet ( PremierImpl ). Dans la terminologie POA, cet objet s’appelle un servant PremierImpl premier = new PremierImpl(); • Enregistrer un servant revient à lui associer une référence : org.omg.CORBA.Object ref = rootpoa.servant_to_reference(premier );

  44. Echanger une référence d'objet • Chaque objet CORBA dispose d'une identité ( la référence d'objet ). • Pour qu'un client puisse appeler un objet CORBA, celui-ci doit en connaître la référence de l'objet. • C'est pourquoi l'objet CORBA doit échanger avec le client sa référence d'objet. • Pour cela, on utilise deux opérations particulières de la classe « org.omg.CORBA.ORB » : • object_to_string : cette opération transforme une référence d'objet en une chaîne de caractères. • string_to_object : cette opération transforme une chaîne de caractères en une référence d'objet.

  45. 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(); } } }

  46. Développer le client • Les étapes à suivre sont les suivantes : • Initialiser l'ORB, • Récupérer la référence de l'objet à utiliser, • Convertir la référence vers le type de l'objet à utiliser, • Utiliser l'objet.

  47. Conversion de références d'objets object_to_string org.omg.CORBA.Object Premier string_to_object Conversion org.omg.CORBA.Object La conversion consiste à utiliser une fonction spécifique appelée « narrow ».

  48. Les classes helpers • Pour chaque élément décrit en IDL, le compilateur génère une classe supplémentaire appelée classe helper. • Cette classe porte le nom de l'élément IDL avec pour suffixe "Helper". • Les classes helpers associées aux interfaces IDL comportent une opération de conversion ( narrow ). public class PremierHelper { public static Premier narrow( org.omg.CORBA.Object obj ) { //… } //... }

  49. Le code du client public class Client { public static void main( String [ ] args ) { org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init( args, null ); try { java.io.FileInputStream file = new java.io.FileInputStream("ObjectID"); java.io.InputStreamReader input = new java.io.InputStreamReader( file ); java.io.BufferedReader reader = new java.io.BufferedReader(input); String ref = reader.readLine(); file.close(); org.omg.CORBA.Object obj = orb.string_to_object(ref) ; Premier premier = PremierHelper.narrow( obj ); premier.affiche("Bonjour du client…"); } catch ( java.lang.Exception ex ) { ex.printStackTrace(); } } }

  50. Exécuter l'application • Suivre les étapes suivantes : • lancer le serveur, • copier le fichier contenant la référence d'objet sur le poste client, • lancer le client.

More Related