En savoir plus sur le nommage

Slides:



Advertisements
Présentations similaires
LES NOMBRES PREMIERS ET COMPOSÉS
Advertisements

[number 1-100].
Qualité du Premier Billot. 2 3 Défauts reliés à labattage.
1. Résumé 2 Présentation du créateur 3 Présentation du projet 4.
Introspection et Réflexion Manipulation dynamique de code Java.
Quelques Infos sur LDAP
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
Invocation de Méthode à des Objets distants Exemple : CORBA Common Object Request Broker Architecture Mise en pratique avec Orbacus en JAVA.
Module SI4 Applications réparties
Module SI4 Applications réparties
© 2006, Occello Audrey, PolytechNice Module SI2 Applications réparties Service de nommage & JNDI Extraits de Mireille Blay-Fornarino, Anne-Marie.
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.
Les numéros
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.

Stéphane Frenot - Département Télécommunication - SID - II - EjbServ 227 EJB Session.
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 211 Le client EJB.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV J2EE / JNDI Module Java Expert.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Session Module Java Expert.
Plan de formation Chapitre 1 : Présentation de SAP
Plan de formation Chapitre 1 : Présentation de SAP
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
2 1. Vos droits en tant quusagers 3 1. Vos droits en tant quusagers (suite) 4.
User management pour les entreprises et les organisations Auteur / section: Gestion des accès.
PARTENARIAT ÉDUCATIF GRUNDTVIG PARTENARIAT ÉDUCATIF GRUNDTVIG REPERES COHESION CULTURELLE ET EXPANSION DES IDEES SUR LE TERRITOIRE EUROPEEN.
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Développement d’applications web
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.
Java Remote Method Invocation (RMI)
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
Configuration de Windows Server 2008 Active Directory
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES NOMBRES PREMIERS ET COMPOSÉS
1 INETOP
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.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
Programmation concurrente
Tournoi de Flyball Bouin-Plumoison 2008 Tournoi de Flyball
Notre calendrier français MARS 2014
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Java, les objets : tout de suite ! Rassembler, grouper les objets
Proxy et plus Cnam Paris jean-michel Douin, douin au cnam point fr
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
LA GESTION COLLABORATIVE DE PROJETS Grâce aux outils du Web /03/2011 Académie de Créteil - Nadine DUDRAGNE 1.
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
Mise en place d'une forêt (Aspects pratiques).
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
4 - Annuaires Les Annuaires d ’Entreprises Offres et solutions
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Objectifs À la fin de ce cours, vous serez capables de :
CALENDRIER-PLAYBOY 2020.
LES PILES ET FILES.
Les Chiffres Prêts?
Créer des packages.
Tutorat en bio-informatique
Cours du 5 novembre.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
JNDI, dernière mise à jour : vendredi 29 septembre 2006 © - groupe de recherche
Transcription de la présentation:

En savoir plus sur le nommage

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

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)

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

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

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")

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)

Service providers

L'interface Context

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

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.

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

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

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;

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"       );         Context.PROVIDER_URL,         "file://tmp"       Context context = new InitialContext(hashtableEnvironment);

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)

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

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

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

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

Directory Service Naming + attributs

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

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

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

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…)

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*) search(Name stringName, String stringRFC2254Filter, SearchControls searchcontrols)

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

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);

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

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

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

Noms composés L'interface lookup a 2 signatures : String ou Name 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

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

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

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

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; }}

URL LDAP Ldap supporte les URLS de la forme : ldap://host:port/dn?attributes?scope?filter?extensions 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");

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

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