Module SI4 Applications réparties Questions Réponses Extraits de Mireille Blay-Fornarino, Audrey Occello et Didier Donsez
JNDI ?
JNDI en quelques mots Services de nommages connus : rmiregistry, Corba naming Services dannuaires connus : LDAP, DNS Des fonctionnalités communes Principe : Fournir une API (java) uniforme à des services de nommage ou dannuaire Utilisation de pilotes SPI dynamiquement chargeables –LDAP, DNS, NIS, NDS, RMI, CORBA, … et FileSystems
Différences Serveur de Noms et Annuaire ?
Unicité des noms EPU SI ELECBIO MAM pinna arthurestelle clémen t arthur
Association dattributs EPU SI ELECBIO MAM pinna arthurestelle clémen t arthur Password login Password login Password login Password login Password login
Exemples Serveur de Noms et Annuaire ?
Service providers (SPI) SPI est linterface permettant dattaquer différents providers de manière uniforme. Les providers « compatibles » doivent fournir un ensemble de classes implémentant javax.naming.spi.
Configuration JNDI ?
Configuration de JNDI : ContextFactory & Provider Deux façons de configurer ces propriétés : –Paramétrer le contexte initial : Hashtable env = new Hashtable(); env.put("java.naming.factory.initial",...); env.put("java.naming.provider.url",...); javax.naming.Context ct = new InitialContext(env); –Passer en paramètre de ligne de commande de Java : java -Djava.naming.factory.initial=value -Djava.naming.provider.url=value Server
ContextFactory : exemples FileSystem : com.sun.jndi.fscontext.FSContextFactory Lightweight Directory Access Protocol (LDAP) : com.sun.jndi.ldap.LdapCtxFactory CORBA services (COS) naming service : com.sun.jndi.cosnaming.CNCtxFactory Java Remote Method Invocation (RMI) Registry : com.sun.jndi.rmi.registry.RegistryContextFactory NIS : com.sun.jndi.nis.NISCtxFactory NDS : com.novell.naming.service.nds.NdsInitialContextFactory
Providers et formats daccès : exemples FileSystem : file://directory_path Lightweight Directory Access Protocol (LDAP) : ldap://host:port CORBA services (COS) naming service : corbaloc::host:port/NameService Java Remote Method Invocation (RMI) Registry : rmi://host:port/ NIS : nis://servername/domain NDS : nds://ndsTreeName
IIOP ? 2 Corba sont ils toujours interopérables ?
Protocoles : GIOP, IIOP GIOP (General Inter-ORB Protocol) spécifie un standard de communications entre ORBs IIOP (Internet Inter-ORB Protocol) est l'implémentation la + populaire du protocole GIOP au dessus de TCP/IP
(O.R.B.) composant c++ TCP/IP network (O.R.B.) composant java IIOP (O.R.B.) composant cobol BD IIOP Communication inter-ORB IIOP (O.R.B.) composant BD composant (O.R.B.) DCE network DCE-CIOP (O.R.B.) Bridge (O.R.B.) IIOP DCE-CIOP Java-RMI ? ?
RMI et Corba interopérables ? Différences RMI et Corba ?
Protocoles : JRMP JRMP (Java Remote Method Protocol) est le protocole utilisé par Java RMI
Pourquoi JNDI ?
JNDI Enregistrement de lobjet distant via JNDI –InitialContext.rebind("obj_ref", obj); Obtenir un objet distant toujours via JNDI –InitialContext IC = new InitialContext(env); –Object obj = IC.lookup("obj_ref"); –MyObject myobj = (MyObject)PortableRemoteObject.narrow(obj,MyObje ct.class); Lancement du service de nommage choisi : (rmiregistry, CosNaming, …)
RMI IIOP ?
Souches identiques ?
Procédure de compilation : rmic -iiop Implementation File (MyObjectImpl.class) rmic -iiop _MyObject_Stub.class_MyObject_Tie.class Coté clientCoté serveur Interface File (MyObject.class) rmic -iiop _MyObject_Stub.class Coté client
Influence sur la communication RMI Corba? IDL vs interface ?
Quel sous ensemble de JAVA RMI peut être utilise pour faire du CORBA –Passage par valeur : un équivalent à la sérialisation Java –rmic -idl Intégration Java-RMI/CORBA
Implémentation RMI de lobjet Client CORBA + Serveur RMI Client CORBA Stub CORBA ORB Squelette RMI ORB Interface RMI de lobjet 1) rmic -iiop IDL CORBA de lobjet 2) rmic -idl 3) jidl Protocole IIOP
Client RMI + Serveur CORBA Implémentation CORBA de lobjet Client RMI Stub RMI ORB Squelette CORBA ORB Interface RMI de lobjet IDL CORBA de lobjet 1) rmic -idl Protocole IIOP 2) jidl 3) rmic -iiop
Serveur RMI ou Serveur Corba?
Client RMI + Serveur CORBA Implémentation CORBA de lobjet Client RMI Stub RMI ORB Squelette CORBA ORB Interface RMI de lobjet IDL CORBA de lobjet 1) rmic -idl Protocole IIOP Étape 1 pas naturelle ! Ne marche que pour lintégration de nouvelles applications 2) jidl 3) rmic -iiop
Mise en œuvre
Compatibilité IIOP : Différences de développement coté serveur (1/2) 1. Clause dimportation –javax.rmi.PortableRemoteObject au lieu de java.rmi.UnicastRemoteObject –javax.naming.InitialContext au lieu de java.rmi.Naming 2. Définition de lobjet distant –pas de différence au niveau de linterface de lobjet –au niveau de limplémentation : public class MyObjectImpl extends PortableRemoteObject implements MyObject 3. Enregistrement de lobjet distant via JNDI –InitialContext.rebind("obj_ref", obj); 4. Génération des souches compatibles IIOP : rmic -iiop
Compatibilité IIOP : Différences de développement coté serveur (2/2) 5. Lancement du service de nommage choisi : (rmiregistry, CosNaming, …) 6. Dans le cas de linteropérabilité avec CORBA, une étape supplémentaire : génération de lIDL avec rmic -idl Pour générer les bonnes souches CORBA
Compatibilité IIOP : Différences de développement coté client 1. Clause dimportation (idem serveur) –javax.rmi.PortableRemoteObject; –javax.naming.InitialContext; 2. Obtenir un objet distant toujours via JNDI –InitialContext IC = new InitialContext(env); –Object obj = IC.lookup("obj_ref"); –MyObject myobj = (MyObject)PortableRemoteObject.narrow(obj,MyObject.class); 3. Génération des souches compatibles IIOP : rmic -iiop
Conclusion Interopérabilité CORBA/Java RMI peu courante mais –Première approche d'unification : CORBA/Java RMI contre Micro$oft => effort pour faire face aux solutions tout Microsoft –des utilisations plus fréquentes depuis l'apparition des EJB Importance de linteropérabilité face à la prolifération des langages, des middlewares,... Maturation des technologies émergence des middlewares orientés composants : ccm,.net Réalité différente dans les entreprises : solutions tout XML nécessité de traduire de A vers XML puis de XML vers B même mécanismes sous-jacents (langage intermédiaire, conversion des données,...) Pourquoi réinventer la roue ?
Quelques références... Complément de cours : JNDI2.ppt Le site de Sun sur RMI-IIOP : Un article sur linteropérabilité RMI/CORBA : Tutorial JNDI
Message Oriented Middleware Pourquoi ?
Plan Pourquoi un nouveau type de middleware? Quelle lignée logicielle ? Historique JMS : Java Message Server Limplémentation Joram Lavenir pour ce type de middleware
Pourquoi un nouveau type de middleware? Quelles sont les contraintes RPC derrière RMI ?
Intention Quelles sont les contraintes RPC derrière RMI ? communication synchrone Client-Serveur le serveur est prédominant dans la communication On souhaite ne pas être bloqué pendant une communication (asynchrone) ne pas connaître toujours au préalable ceux avec qui on communique
Exemples dapplications non adaptées?
Exemple ladministration de réseaux Gestion à distance de machines, serveurs, hubs, etc Notification des événements en cas de panne –Intégration de modules hétérogènes distribués –Indépendance (asynchronisme) –Fiabilité
Quelle lignée logicielle ? Historique Ce que vous connaissez déjà
Quelle lignée logicielle ? Historique Communication par message au niveau socket : communication udp et multicast Connexions faibles entre objets : le design Pattern Observer Observable Programmation Java : interface graphique et gestion dévénements (listeners) Et en Corba : le service dévénements
Communication par message : Envoi de datagrammes application opération Client Serveur req1 rep1 reqn repn
Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr
Observer Observable ?
Motivation Un effet de bord fréquent de la partition dun système en une collection de classes coopérantes est la nécessité de maintenir la consistance entre les objets reliés entre eux. On ne veut pas obtenir la consistance en liant étroitement les classes, parce que cela aurait comme effet de réduire leur réutilisabilité.
Moyen Définir une dépendance de 1 à n entre des objets telle que lorsque létat dun objet change, tous ses dépendants sont informés et mis à jour automatiquement
Quand lappliquer Lorsquune abstraction possède deux aspects dont lun dépend de lautre. –Lencapsulation de ces aspects dans des objets séparés permet de les varier et de les réutiliser indépendemment. –Exemple : Modèle-Vue-Contrôleur Lorsquune modification à un objet exige la modification des autres, et que lon ne sait pas a priori combien dobjets devront être modifiés. Lorsquun objet devrait être capable dinformer les autres objets sans faire dhypothèses sur ce que sont ces objets,
Besoin dévénements Le pattern Observer décrit –comment établir les relations entre les objets dépendants. Les objets-clés sont –la source Peut avoir nimporte quel nombre dobservateurs dépendants Tous les observateurs sont informés lorsque létat de la source change – lobservateur. Chaque observateur demande à la source son état afin de se synchroniser
Structure
Bénéfices Utilisation indépendante des sources et des observateurs. –On peut réutiliser les sources sans réutiliser les observateurs et vice-versa. –On peut ajouter des observateurs sans modifier la source et les autres observateurs. Support pour la communication broadcast –La source ne se préoccupe pas du nombre dobservateurs.
Implémentations Java du pattern Une classe et une interface : class Observable {... } et interface Observer Un objet Observable doit être une instance de la classe qui dérive de la classe Observable Un objet observer doit être instance dune classe qui implémente linterface Observer void update(Observable o, Object arg); Des listeners
Le service dévénement Corba
Emetteur Récepteur Destination message Emetteur et récepteur connaissent seulement la destination Plusieurs émetteurs et récepteurs sur la Même destination Persistance du message (reçu ou non reçu) Format du message libre Acheminement par un bus de message
Le service de notification d'événements Corba La plupart des requêtes CORBA se traduisent par lexécution synchrone dune opération (le client connaît la référence de lobjet auquel la requête sadresse et le client ainsi que lobjet doivent être tous deux actifs) et sinon? Le service d'Evénements ou Event service permet de découpler la communication entre objets. Mode de communication découplé : lorsque le client et lobjet ne se connaissent pas; lorsque le client et lobjet ne sont pas actifs simultanément.
Communication événementielle principes de fonctionnement concepts de base : événements, réactions (traitements associés à loccurrence dun événement) principe dattachement : association dynamique entre un nom dévénement et une réaction communication anonyme : indépendance entre lémetteur et les consommateurs dun événement
Un canal dévènements Producteur Consommateur Canal Flot des évènements
Un canal dévènements : notification Producteur Consommateur Canal Producteur actif / Consommateur réactif Le canal diffuse les évènements Push PushSupplier PushConsumer void push(in any data) raises(Disconnected);
Un canal dévènements : demande Producteur Consommateur Canal Producteur réactif / Consommateur actif Le canal procure les évènements Pull() demande PullSupplier { //demande de production dun événement any pull() raises(Disconnected); // présence dun événement any try_pull(out boolean has_event) raises(Disconnected);
Un canal dévènements : file dévènements Producteur Consommateur Canal Producteur actif / Consommateur actif Le canal gère des files dévènements Push() Pull()
Un canal dévènements : collecte dévènements Producteur Consommateur Canal Producteur réactif / Consommateur réactif Le canal est une entité active voire intelligente Pull() Push()