Module SI4 Applications réparties Questions Réponses Extraits de Mireille Blay-Fornarino, Audrey Occello et Didier Donsez - 1 -
JNDI ? - 2 -
JNDI en quelques mots Services de nommages connus : rmiregistry, Corba naming Services d’annuaires connus : LDAP, DNS Des fonctionnalités communes Principe : Fournir une API (java) uniforme à des services de nommage ou d’annuaire Utilisation de pilotes SPI dynamiquement chargeables LDAP, DNS, NIS, NDS, RMI, CORBA, … et FileSystems - 3 -
Différences Serveur de Noms et Annuaire ? - 4 -
Unicité des noms pinna EPU BIO ELEC SI MAM arthur estelle arthur clément - 5 -
Association d’attributs EPU BIO ELEC SI MAM pinna arthur estelle arthur clément Email Password login Email Password login Email Password login Email Password login Email Password login - 6 -
Exemples Serveur de Noms et Annuaire ? - 7 -
Service providers (SPI) SPI est l’interface permettant d’attaquer différents providers de manière uniforme. Les providers « compatibles » doivent fournir un ensemble de classes implémentant javax.naming.spi. LDAP : Lightweight Directory Access Protocol = > Simplification de ISO X500. même convention de nommage mais basé sur TCP/IP (plutôt que les couches ISO) DNS : Domain Name System is an application-layer protocol that is part of the standard TCP/IP protocol suite. This protocol implements the DNS naming service, which is the naming service that is used on the Internet. One of the most common and important uses of DNS is connecting your network to the global Internet. To connect to the Internet, your network IP address must be registered with whomever is administering your parent domain. NIS : Network Information Service (formerly known as YP) is a distributed naming service. It is a mechanism for identifying and locating network objects and resources. It provides a uniform storage and retrieval method for network-wide information in a transport-protocol and media-independent fashion. NIS was developed independently of DNS and has a slightly different focus. Whereas DNS focuses on making communication simpler by using machine names instead of numerical IP addresses, NIS focuses on making network administration more manageable by providing centralized control over a variety of network information. NIS stores information not only about machine names and addresses, but also about users, the network itself, and network services. This collection of network information is referred to as the NIS namespace. NDS : Novell Directory Service is an industry-leading directory service. - 8 -
Configuration JNDI ? - 9 -
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 - 10 -
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 - 11 -
Providers et formats d’accè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 - 12 -
IIOP ? 2 Corba sont ils toujours interopérables ? - 13 -
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 - 14 -
Communication inter-ORB composant c++ (O.R.B.) composant java (O.R.B.) Bridge IIOP DCE-CIOP IIOP IIOP TCP/IP network (O.R.B.) composant cobol BD IIOP Java-RMI ? (O.R.B.) composant BD DCE network DCE-CIOP Les protocoles de la couche de transport ont la charge de transmettre des paquets de données d’un point à un autre. A l âge de l’Internet le protocole de transport probablement le plus utilisé est TCP/IP (Transmission Control Protocol/ Internet Protocol). La plupart des applications utilise ce protocole, y compris FTP (File Transfer Protocol), Telnet (Host Communication protocol) et HTTP (HyperText Transport Protocol). D’autres protocoles de transport peuvent être utilisés comme DCE (Distributed Computing Environment). - 15 - 13 13
RMI et Corba interopérables ? Différences RMI et Corba ? - 16 -
Protocoles : JRMP JRMP (Java Remote Method Protocol) est le protocole utilisé par Java RMI - 17 -
Pourquoi JNDI ? - 18 -
JNDI Enregistrement de l’objet 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, …) - 19 -
RMI IIOP ? - 20 -
- 21 -
Souches identiques ? - 22 -
Procédure de compilation : rmic -iiop Implementation File (MyObjectImpl.class) rmic -iiop Coté client Coté serveur _MyObject_Stub.class _MyObject_Tie.class Interface File (MyObject.class) rmic -iiop _MyObject_Stub.class Coté client - 23 -
Influence sur la communication RMI Corba? IDL vs interface ? - 24 -
Intégration Java-RMI/CORBA Quel sous ensemble de JAVA RMI peut être utilise pour faire du CORBA Passage par valeur : un équivalent à la sérialisation Java rmic -idl Objects Passable by Value CORBA's language-independent equivalent of Java's serializable enables many new features including the reverse Java-to-IDL mapping Java-to-IDL Mapping This mapping allows Java RMI objects to interoperate over the network as CORBA objects. They have CORBA object references, and emit the IIOP protocol. - 25 -
Client CORBA + Serveur RMI 2) rmic -idl IDL CORBA de l’objet Interface RMI de l’objet 3) jidl Implémentation RMI de l’objet Client CORBA 1) rmic -iiop Squelette RMI Stub CORBA By a CORBA client is a client program that was written by a CORBA programmer ignorant of RMI. Likewise, an RMI client, we mean a client program that was written by an RMI programmer who knows nothing about CORBA or IDL. Protocole IIOP ORB ORB - 26 -
Client RMI + Serveur CORBA 1) rmic -idl Interface RMI de l’objet IDL CORBA de l’objet 3) rmic -iiop 2) jidl Implémentation CORBA de l’objet Client RMI Squelette CORBA Stub RMI Protocole IIOP ORB ORB - 27 -
Serveur RMI ou Serveur Corba? - 28 -
Client RMI + Serveur CORBA 1) rmic -idl Interface RMI de l’objet IDL CORBA de l’objet 3) rmic -iiop 2) jidl Implémentation CORBA de l’objet Client RMI Squelette CORBA Stub RMI Protocole IIOP ORB ORB Étape 1 pas naturelle ! Ne marche que pour l’intégration de nouvelles applications - 29 -
Mise en œuvre - 30 -
Compatibilité IIOP : Différences de développement coté serveur (1/2) 1. Clause d’importation javax.rmi.PortableRemoteObject au lieu de java.rmi.UnicastRemoteObject javax.naming.InitialContext au lieu de java.rmi.Naming 2. Définition de l’objet distant pas de différence au niveau de l’interface de l’objet au niveau de l’implémentation : public class MyObjectImpl extends PortableRemoteObject implements MyObject 3. Enregistrement de l’objet distant via JNDI InitialContext.rebind("obj_ref", obj); 4. Génération des souches compatibles IIOP : rmic -iiop - 31 -
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 l’interopérabilité avec CORBA, une étape supplémentaire : génération de l’IDL avec rmic -idl Pour générer les bonnes souches CORBA - 32 -
Compatibilité IIOP : Différences de développement coté client 1. Clause d’importation (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 - 33 -
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 l’interopé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 ? - 34 -
Quelques références ... Complément de cours : http://www.essi.fr/~pinna/Sar/AppRep/CoursIIOP- JNDI2.ppt Le site de Sun sur RMI-IIOP : http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/ Un article sur l’interopérabilité RMI/CORBA : http://www.javaworld.com/jw-12-1999/jw-12-iiop.html Tutorial JNDI http://java.sun.com/products/jndi/tutorial/TOC.html - 35 -