Invocation de Méthode à des Objets distants Exemple : CORBA Common Object Request Broker Architecture Mise en pratique avec Orbacus en JAVA.

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Distance inter-locuteur
Xavier Blanc Web Services Xavier Blanc
Première expérience d’utilisation des Web Services dans SmartTools Didier Parigot Projet OASIS INRIA Sophia www-sop.inria.fr/oasis/SmartTools Journée.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Services communs CORBA
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
1 Plan de lenseignement Cours Introduction au réseau via les objets distants (Application à RMI) Ce que cache RMI : programmation socket – mode connecté
Module SI2 Applications réparties
ORB (1/2) ORB : Object Request Broker
Invocation de Méthode à des Objets distants Exemple : CORBA
Des sockets à RMI Programmation réseau versus programmation objet
Common Object Request Broker Architecture
Architecture CORBA réseau Objet Corba Application Serveur
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Module SI4 Applications réparties
Des sockets à RMI. Pourquoi ? Maturation de la technologie orientée objet –ADA, Modula –Smalltalk, C++, Java Maturation des communications Client- Serveur.
© 2006, Occello Audrey, PolytechNice Module SI2 Applications réparties Service de nommage & JNDI Extraits de Mireille Blay-Fornarino, Anne-Marie.
En savoir plus sur le nommage
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Object Management Architecture (OMA)
Approfondissement du langage
Algorithme et structure de données
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
JAV - TD 6 Structures de données JAVA
Laboratoire d’Informatique du Littoral
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert.
Introduction aux services WEB
Etude des Technologies du Web services
Programmation orientée objet
XML-Family Web Services Description Language W.S.D.L.
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Olivier DERUELLE Erwan FOUYER Maxime JOUIN Rodolphe LOUE
Java Remote Method Invocation (RMI)
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Interopérabilité JOnAS - CORBA
Structures de données IFT-2000
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
1 1 Corba avec Java et C Jean-Marc Vanel Transiciel - Sogeti.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
Chapitre 9 Les sous-programmes.
COURS DE PROGRAMMATION ORIENTEE OBJET :
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-10541
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
SGBD orientés Objet Standards : OMG et ODMG.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Présentation de CORBA et de IIOP
4 Introduction des objets. Les chaînes et tableaux
CORBA Un concept de l ’OMG Mathieu Estival Biomédical, 3°Année.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Créer des packages.
UML : un peu d’histoire H. Lounis.
1 Extension du modèle de composants CORBA avec accès concurrent à des données partagées Travail réalisé par : Landry BREUIL PFE, ISIMA Encadrants : Gabriel.
Tutorat en bio-informatique
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
France Télécom R&D Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document par son destinataire.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
Les Servlets Présentation Cycle de vie Principe de fonctionnement
PaCO++ André Ribes Réunion Hydrogrid Rennes 15/09/03.
Java Remote Method Invocation
Transcription de la présentation:

Invocation de Méthode à des Objets distants Exemple : CORBA Common Object Request Broker Architecture Mise en pratique avec Orbacus en JAVA

Le problème : Intégration des applications L Pas de consensus sur les langages de programmation L Pas de consensus sur les plate-formes de développement L Pas de consensus sur les systèmes dexploitation L Pas de consensus sur les protocoles réseau L Pas de consensus sur les formats des données manipulées par les applications è Recherche dun Consensus pour linteropérabilité Consensus pour linteropérabilité 1.1-histoire

3 CORBA Common Object Request Broker Architecture : CORBA Plate-forme client/serveur orientée objets Un standard pour linteropérabilité entre objets –Support pour différents langages –Support pour différentes plate-formes (interopérabilité) –Communications au travers du réseau –Des services (Distributed transactions, events,... ) –Guides et modèles de programmation 1.2 CORBA?

Historique Fondation de lOMG Publication de lOMA Publication CORBA 1.1 Adoption CORBA 2.0 Mapping IDL/C++ Publication CORBA Publication CORBA 1.2 CORBA 2.1 CORBA 2.3 CORBA CORBA? 2002 Minimum Corba RealTime Corba Corba Component Model

consortium international créé en 1989 but non lucratif regroupement de plus de 460 organismes constructeurs (SUN, HP, DEC, IBM,...) environnements systèmes (Microsoft, OSF, Novell,...) outils et langages (Iona, Object Design, Borland,...) produits et BD (Lotus, Oracle, Informix, O2,...) industriels (Boeing, Alcatel, Thomson,...) institutions et universités (INRIA, NASA, LIFL, W3C) I.3. OMG Object Management Group (OMG)

6 OMG en résumé OMA : pour l architecture logicielle MDA (Model Driven Architecture) CORBA : pour le « middleware » technique UML pour la modélisation UML = Unified Modeling language MOF pour la méta-modélisation MOF = Meta-Object Facility

Processus de développement

contrat IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets Le langage IDL: Un « esperanto » pour les objets Objets Corba

9 Spécification interface IDL (1/2) Un objet grid est un tableau contenant des valeurs. Les valeurs sont accessibles grâce aux opérateurs get et set qui peuvent être invoqués à distance. Processus client Processus serveur Appel de get et set sur l'objet grid distant objets grid

10 Spécification interface IDL (2/2) interface Grid { readonly attribute short height; readonly attribute short width; void set (in short n, in short m, in long value); long get(in short n, in short m); void copyIn(inout Grid g); };

Le langage IDL: Interface Definition Language + langage de spécification dinterfaces, supportant lhéritage multiple; 2indépendant de tout langage de programmation ou compilateur (langage pivot entre applications); + langage utilisé pour générer les stubs, les squelettes et pour définir les interfaces du Référentiel dinterface; 2la correspondance IDL-langage de programmation est fournie pour les langages C, C++, Java, Smalltalk, Ada, Cobol.

Exemple interface account { readonly attribute float balance; attribute string description; void credit (in float f); void debit (in float f); }; interface currentAccount : account { readonly attribute float overdraftLimit; }; interface bank { exception reject {string reason;}; account newAccount (in string name) raises (reject); currentAccount newCurrentAccount (in string name, in float limit) raises (reject); void deleteAccount (in account a); }; interface attribut opérations exception opérations

Eléments IDL + Une spécification IDL définit un ou plusieurs types, constantes, exceptions, interfaces, modules,... pragma constantes types de base au format binaire normalisé nouveaux types (typedef, enum, struct, union, array, sequence) exceptions types de méta-données (TypeCode, any)

Eléments IDL + Un module permet de limiter la validité des identificateurs + Interface : ensemble dopérations et de types =>classe C++ Syntaxe : Interface | [ ] { }; opération (synchrone ou asynchrone sans résultat) attribut (possibilité de lecture seule) Surcharge Interdite Réutilisation de spécifications existantes (#include)

module unService { typedef unsigned long EntierPositif; typedef sequence desEntiersPositifs; interface Premier { boolean est_premier ( in EntierPositif nombre); desEntiersPositifs nombres_premiers (in EntierPositif nombre); }; module monApplication { interface MonService { unService::EntierPositif prochainPremier(..); Exemple module définitions de type interface opérations

Exemple 3. IDL Description

Attribut IDL Définition dattribut interface account { readonly attribute float balance; attribute string description;... }; Equivaut à : float get_balance(); string get_description(); void set_description(in string s);

void op1 (in long input, out long output, inout long both); interface account; interface bank { account newAccount (in string name); void deleteAccount (in account old); }; Operations (1/2) + Paramètres nommés et associés à un mode + Opérations bloquantes par défaut ::= ( ) ClientuneBanque newAccount calcul retours 3. IDL Description

20 Pourquoi différents modes de passage de paramètres ? in : Données fournies par le client out : Données retournées par l objet inout : Données clientes modifiées par l objet Répartition Passage par copie

Opérations (2/2) oneway void notify (in string message); +Opération non bloquante + Pas de paramètre de type out, inout ou dexceptions + Valeur de retour : void + Pas d exceptions déclenchées. ClientuneBanque notify(«ok ») méthode finie 3. IDL Description

22 Exceptions exception reject {string reason;}; account newAccount (in string name) raises (reject); exception DateErronnee { String raison; }; Des exceptions CORBA standardisées UNKNOWNNO_PERMISSION BAD_PARAM NO_IMPLEMENT COM_FAILUREOBJECT_NOT_EXIST INV_OBJREF………. CORBA::Exception CORBA::UserException CORBA::SystemException 3. IDL Description Gestion explicite de la part du client

Définitions circulaires module Circulaire { interface B; interface A { void utiliséB(in B unB); } interface B { void utiliséA(in A unA); } 3. IDL Description

Héritage multiple interface A {... } interface B : A {... } interface C : A {... } interface D : B, C {...} A B C D 3. IDL Description

Types de base et autres types Types de base short long unsigned short unsigned long float double char boolean octet …... Types construits struct union enum Types génériques array sequence string MétaTypes any TypeCode Types de données dynamiques et auto-descriptifs 3. IDL Description

26 Type Any interface PileDeChaines { readonly attribut string sommet; void poser(in string valeur); string retirer(); }; interface PileGénérique { readonly attribut Any sommet; readonly attribut TypeCode typeDesValeurs; void poser(in Any valeur); Any retirer(); }; 3. IDL Description

27 Grid.java Exemple Compilation interface IDL vers Java Client _GridStub.java GridPOA.java Serveur Grid_Impl.java Client.java Serveur.java A écrire Généré 1- Exemple introductif Grid.idl Compilateur IDL/Java Répertoire grid I GridHelper.java GridHolder.java jidl … Grid.idl GridOperations.java

28 implantation du stub public class _GridStub ……. Grid – envoie de requêtes – invisible par le programmeur – instanciée automatiquement par GridHelper (narrow) – Utilise le DII pour assurer la portabilité du binaire implantation du squelette public abstract class GridPOA ………. GridOperations – reçoit et décode des requêtes – doit être héritée par limplantation 1- Exemple introductif Les classes Stubs et Squelettes

29 Implémentation du serveur (1) 1- Exemple introductif 1. Initialiser le bus CORBA –obtenir lobjet ORB 2. Initialiser ladaptateur dobjets –obtenir le POA 3. Créer les implantations dobjets 4. Enregistrer les implantations par ladaptateur 5. Diffuser leurs références –afficher une chaîne codifiant lIOR 6. Attendre des requêtes venant du bus 7. Destruction du Bus

30 Implémentation du client 1- Exemple introductif 1. Initialiser le bus (objet ORB) 2. Créer les souches des objets à utiliser 2.a. obtenir les références dobjet (IOR) 2.b. convertir vers les types nécessaires –narrow contrôle le typage à travers le réseau 3. Réaliser les traitements Rem. : éviter lopérateur bind (2.a + 2.b) –spécifique à chaque produit donc non portable

31 Le cycle de vie des objets Problème –actuellement, 1 grille = 1 serveur –pas de création/destruction dobjets à distance –seulement invocation dopérations Solution –notion de fabrique dobjets –exprimée en OMG-IDL Cest un canevas de conception : Design pattern –voir aussi le service LifeCycle Autres usages de la fabrique : - gestion de droits, load-balancing, polymophisme, …

32 Fabrique Grille creerGrille Limplantation de la fabrique

33 Limplantation de la fabrique Fabrique Grille detruireGrille

34 Interface IDL d une fabrique de Grilles module grilles {... interface Fabrique { Grid newGrid(in short width,in short height); };

35 Scénario d obtention de la référence du service de nommage Client ou Serveur ORB CosNaming:: NamingContext resolve_initial_references ("NameService"); conversion ajout,retrait,lecture,...

36 Notion de chemin daccès

37 Enregistrer un objet Opération pour publier un Objet – en général, opération réalisée par le serveur Scénario Type 1. Créer un objet 2. Construire un chemin d accès (Name) 3. Appeler l opération « bind » ou « rebind » avec le chemin et la référence de l objet void bind (in Name n, in Object obj) raises (NotFound, CannotProceed, InvalidName, AlreadyBound);

38 Retrouver un objet Opération réalisée par un client ou un serveur Scénario type : –construire un chemin d accès (Name) –appeler l opération « resolve » avec le chemin –convertir la référence obtenue dans le bon type Object resolve (in Name n) raises (NotFound, CannotProceed, InvalidName)

39 Création dune nouvelle grille et mise à disposition par le service Nommage –1. Initialiser le bus CORBA –2. Obtenir le service Nommage (NS) –3. Obtenir la fabrique depuis le NS –4. Créer un répertoire –5. Enregistrer le répertoire dans le NS Une application dadministration de la fabrique

40 Annuaire : service de nommage Client java.rmi.naming rmi URL RMI RegistryRMI Remote Object java.rmi.Naming bind rebind unbind lookup

41 RMI URL Même syntaxe que http mais préfixe rmi rmi://mymachine.com/monObjet Inconvénient : perte de la transparence => utilisation de JNDI (Java Naming Directory Interface)

42 JNDI : Nommage et directory C:/monRépertoire/monFichier Lien (bind) Nom Contexte Créé le 12 mars 2002 Taille : 12 M Attributs

43 Conventions de nommage LDAP (Light Directory Access Protocol) : "cn=Todd Sundsted, o=ComFrame, c=US" nomme la personne "cn=Todd Sundsted" Note : c = country, o = organization DNS : carabosse.essi.fr => Abstraction JNDI

44 Naming/Directory Un service de Naming permet de retrouver des objets à partir d'un nom ("pages blanches") Un service de Directory rajoute des fonctionnalités permettant d'associer des attributs aux points d'entrée, et de faire une recherche sur ces attributs ("pages jaunes")

45 Usage Les services de nommage sont utilisés : –Pour stocker des objets –Pour offrir un point d'accès aux applications réparties (RMI, Corba, EJB…) Ils servent également de référentiel d'entreprise pour accéder à des applications (machine/port), des bases de données, et même des informations de sécurité (gestion des accès au sein d'une entreprise) Mais aussi pour référencer des devices (imprimantes, etc.) (cf. Jini)

46 Service providers

L'interface Context

48 Contexte Le contexte permet une isolation des noms, par exemple pour plusieurs applications => évite les collisions Structure hiérarchique comme un répertoire

49 Interface Context void bind(String stringName, Object object) : Lie un nom à un objet. Le nom ne doit pas déjà être lié à un autre objet. Tous les contextes intermédiaires doivent exister. void rebind(String stringName, Object object) : Lie un nom à un objet. Si le nom est déjà lié, la liaison précédente est écrasée. Tous les contextes intermédiaires doivent exister. Object lookup(String stringName) : Renvoie l'objet pointé par le nom void unbind(String stringName) : Délie l'objet pointé par le nom.

50 Mais aussi void rename(String stringOldName, String stringNewName) : Modifie le nom auquel l'objet est lié. NamingEnumeration listBindings(String stringName) : Envoie une énumération contenant les noms liés au contexte passé en paramètre, ainsi que les objets liés à ces noms et leur classe NamingEnumeration list(String stringName) : Renvoie une énumération contenant les noms liés au contexte, ainsi que les noms de classes des objets liés à eux

51 Contextes Pas de contexte racine => InitialContext Possibilité de créer des sous-contextes public Context createSubcontext(String name) throws NamingException

52 Un exemple : d'abord les packages import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.Binding; import javax.naming.NamingEnumeration; import javax.naming.NamingException; // Pour les paramètres d'initialisation import java.util.Hashtable;

53 Création du contexte initial L'information d'environnement spécifie le provider JNDI par le nom de la factory. Dans ce cas : répertoire sous forme URL file://... Hashtable hashtableEnvironment = new Hashtable(); hashtableEnvironment.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory" ); hashtableEnvironment.put( Context.PROVIDER_URL, "file://tmp" ); Context context = new InitialContext(hashtableEnvironment);

54 Lien avec la sécurité private Context getInitialCtx() { // Set up our JNDI environment properties... Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX); env.put(Context.PROVIDER_URL, HOST); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, USER); env.put(Context.SECURITY_CREDENTIALS, PASSWORD); try { return new InitialDirContext(env); } catch(NamingException e)

55 Enumération de tous les objets NamingEnumeration namingEnumeration = context.listBindings(""); while (namingEnumeration.hasMore()) { Binding binding = (Binding)namingEnumeration.next(); System.out.println( binding.getName() + " " + binding.getObject() ); }

56 Recherche d'un objet particulier Object object = context.lookup(unNom); System.out.println( unNom + " " + object );

57 Utilisation de l'objet On reçoit un object, il faut par conséquent faire un "cast" pour pouvoir l'utiliser (MyClass) object.myMethode (….)

58 Résumé Comme dans RMI InitialContext bind, lookup On peut lister un contexte, créer un sous- contexte Utilisation d'une factory pour lier à une implémentation et initialiser les paramètres La sécurité est définie au niveau de l'environnement passé à la factory

Directory Service

60 Directory Service Naming + attributs

61 Les fonctions de base void bind( String stringName, Object object, Attributes attributes ) Même méthode que Context, mais avec un paramètre de plus : les attributs. Idem rebind, lookup Idem createSubcontext Créé à partir de InitialDirContext

62 GetAttributes 2 formes possibles Attributes getAttributes( String stringName ) Attributes getAttributes( String stringName, String [] rgstringAttributeNames )

63 modifyAttributes void modifyAttributes( String stringName, int nOperation, Attributes attributes ) Avec les opérations : ADD_ATTRIBUTE, REPLACE_ATTRIBUTE, et REMOVE_ATTRIBUTE

64 Search La forme la plus simple passe une liste d'attributs Il est possible d'utiliser des filtres selon la norme RFC 2254 Les contrôles permettent la mise en forme des résultats (par exemple tri ascendant, etc…)

65 Search : pour faire des requêtes NamingEnumeration search( String stringName, Attributes attributesToMatch ) On peut utiliser des filtres de recherche selon la spécification RFC 2254: (cn=Babs Jensen) (!(cn=Tim Howes)) (&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*))) (o=univ*of*mich*) NamingEnumeration search(Name stringName, String stringRFC2254Filter, SearchControls searchcontrols)

66 Search : contrôle de la recherche On peut utiliser des contrôles permettant : –De définir les attributs à renvoyer –De définir la portée de la recherche (récursive en arbre, locale…) –Le nombre maximum de réponses –Le temps maximum d'attente –De renvoyer ou non l'objet Java associé –De déréférencer ou non les liens

67 Un exemple String filter = "(objectclass=Inetorgperson)"; SearchControls controls = new SearchControls(); controls.setSearchScope(SearchControls.SUBTREE_SCOPE); controls.setReturningObjFlag(false); controls.setReturningAttributes(attrIds); try { NamingEnumeration enumDev = initCtx.search("ou=people", filter, sc);

68 Classes à connaître Renvoient une NamingEnumeration de...

69 Utilisation d'un SearchResult while (enumDev.hasMore()) { SearchResult sr = (SearchResult)enumDev.next(); Attributes attributes = sr.getAttributes(); NamingEnumeration ne = attributes.getAll(); while (ne.hasMore()) { Attribute attr = (Attribute) ne.next(); String attrID = attr.getID(); NamingEnumeration values = attr.getAll();... while (values.hasMore()) child.add( new DefaultMutableTreeNode(values.nextElement())); }

70 Résumé : Directory Mêmes méthodes que Context Créé à partir de InitialDirContext Rajoute la gestion des attributs Rajoute les fonctions de recherche

Autres fonctionnalités

72 Noms composés Object obj1 = ctx.lookup("cn=Ted Geisel, ou=People, o=JNDITutorial"); CompositeName cname = new CompositeName( "cn=Ted Geisel, ou=People, o=JNDITutorial"); Object obj2 = ctx.lookup(cname); L'interface lookup a 2 signatures : String ou Name

73 Stockage d'objets On peut stocker –Des objets serialisables –Des références et des objets référençables –Des objets avec des attributs –Des Remote Objects –Des objets Corba

74 Exemple : stockage d'un objet RMI // On initialise le Contexte // ctx = new javax.naming.InitialDirContext... Hello h = new HelloImpl(); // Bind the object to the directory ctx.bind("cn=RemoteHello", h); Une fois que l'objet est stocké dans le Directory, une autre application peut l'utiliser Hello h2 = (Hello)ctx.lookup("cn=RemoteHello"); NB: cf. javax.rmi.Naming.bind, lookup

75 Exemple : stockage d'une référence public class Fruit implements Referenceable { String fruit; public Fruit(String f) { fruit = f; } public Reference getReference() throws NamingException { return new Reference( Fruit.class.getName(), new StringRefAddr("fruit", fruit), FruitFactory.class.getName(), null); // Factory location }

76 Factory pour une référence public class FruitFactory implements ObjectFactory { public Object getObjectInstance(Object obj, Name name, Context ctx, Hashtable env) throws Exception { if (obj instanceof Reference) { Reference ref = (Reference)obj; if (ref.getClassName().equals(Fruit.class.getName())) { RefAddr addr = ref.get("fruit"); if (addr != null) { return new Fruit((String)addr.getContent()); }}} return null; }}

77 URL LDAP Ldap supporte les URLS de la forme : ldap://host:port/dn?attributes?scope?filter?exten sions Le nom d'hôte par défaut est localhost Le port par défaut est 389 Exemple : Object obj = new InitialContext().lookup( "ldap://localhost:389/cn=homedir,cn=Jon%20Ruiz, ou=People,o=jnditutorial");

78 alias Il est possible de définir des alias ctx.search("ou=Staff", "(cn=J*)", null); Propriété d'environnement java.naming.ldap.derefAliases –always –never –finding –searching

79 Autres idées Espaces de nommages Fédérations de serveur, referrals (~alias de serveurs) Sécurité, authentification, SSL Liens avec JINI, EJB...