En savoir plus sur le nommage - PowerPoint PPT Presentation

1 / 41
About This Presentation
Title:

En savoir plus sur le nommage

Description:

En savoir plus sur le nommage – PowerPoint PPT presentation

Number of Views:46
Avg rating:3.0/5.0
Slides: 42
Provided by: RemiV
Category:
Tags: java | nommage | plus | savoir | sur

less

Transcript and Presenter's Notes

Title: En savoir plus sur le nommage


1
En savoir plus sur le nommage
2
Annuaire service de nommage
java.rmi.Naming
bind rebind unbind lookup
Client
rmi URL
java.rmi.naming
RMI Registry
RMI Remote Object
3
RMI URL
  • Même syntaxe que http mais préfixe rmi
  • rmi//mymachine.com/monObjet
  • Inconvénient perte de la transparence
  • gt utilisation de JNDI (Java Naming Directory
    Interface)

4
JNDI Nommage et directory
Lien (bind)
  • C/monRépertoire/monFichier

Nom
Contexte
Créé le 12 mars 2002 Taille 12 M
Attributs
5
Conventions de nommage
  • LDAP (Light Directory Access Protocol)
  • "cnTodd Sundsted, oComFrame, cUS" nomme la
    personne "cnTodd Sundsted"
  • Note c country, o organization
  • DNS
  • carabosse.essi.fr
  • gt Abstraction JNDI

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

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

8
Service providers
9
L'interface Context
10
Contexte
  • Le contexte permet une isolation des noms, par
    exemple pour plusieurs applications gt évite les
    collisions
  • Structure hiérarchique comme un répertoire

11
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.

12
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

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

14
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

15
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.RefFSContextFactor
    y"
  •       )
  •       hashtableEnvironment.put(
  •         Context.PROVIDER_URL,
  •         "file//tmp"
  •       )
  •       Context context new InitialContext(hashtab
    leEnvironment)

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

17
Enumération de tous les objets
  •   NamingEnumeration namingEnumeration
    context.listBindings("")
  •         while (namingEnumeration.hasMore())
  •           Binding binding (Binding)namingEnumera
    tion.next()
  •           System.out.println(
  •             binding.getName() " "
  •             binding.getObject()
  •           )
  •         

18
Recherche d'un objet particulier
  •  Object object context.lookup(unNom)
  •           System.out.println(
  •             unNom " "
  •             object
  •           )

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

20
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

21
Directory Service
22
Directory Service
  • Naming attributs

23
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

24
GetAttributes
  • 2 formes possibles
  • Attributes
  • getAttributes(
  •    String stringName
  • )
  • Attributes
  • getAttributes(
  •    String stringName,
  •    String rgstringAttributeNames
  • )

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

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

27
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
  • (cnBabs Jensen)
  • (!(cnTim Howes))
  • ((objectClassPerson)((snJensen)(cnBab
    s J)))
  • (ounivofmich)
  • NamingEnumeration
  • search(Name stringName, String stringRFC2254Filter
    , SearchControls searchcontrols)

28
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

29
Un exemple
  • String filter "(objectclassInetorgperson)"
  • SearchControls controls new SearchControls()
  • controls.setSearchScope(SearchControls.SUBTREE_SCO
    PE)
  • controls.setReturningObjFlag(false)
  • controls.setReturningAttributes(attrIds)
  • try
  • NamingEnumeration enumDev
  • initCtx.search("oupeople", filter, sc)

30
Classes à connaître
Renvoient une NamingEnumeration de ...
31
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.next
    Element()))

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

33
Autres fonctionnalités
34
Noms composés
  • Object obj1 ctx.lookup("cnTed Geisel,
    ouPeople, oJNDITutorial")
  • CompositeName cname new CompositeName(
  • "cnTed Geisel, ouPeople, oJNDITutorial")
  • Object obj2 ctx.lookup(cname)
  • L'interface lookup a 2 signatures String ou Name

35
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

36
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("cnRemoteHello", h)
  • Une fois que l'objet est stocké dans le
    Directory, une autre application peut l'utiliser
  • Hello h2 (Hello)ctx.lookup("cnRemoteHello")
  • NB cf. javax.rmi.Naming.bind, lookup

37
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

38
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.get
    Name()))
  • RefAddr addr ref.get("fruit")
  • if (addr ! null)
  • return new Fruit((String)addr.getContent())
  • return null

39
URL LDAP
  • Ldap supporte les URLS de la forme
  • ldap//hostport/dn?attributes?scope?filter?extens
    ions
  • Le nom d'hôte par défaut est localhost
  • Le port par défaut est 389
  • Exemple
  • Object obj new InitialContext().lookup(
  • "ldap//localhost389/cnhomedir,cnJon20Ruiz
    ,ouPeople,ojnditutorial")

40
alias
  • Il est possible de définir des alias
  • ctx.search("ouStaff", "(cnJ)", null)
  • Propriété d'environnement
  • java.naming.ldap.derefAliases
  • always
  • never
  • finding
  • searching

41
Autres idées
  • Espaces de nommages
  • Fédérations de serveur , referrals (alias de
    serveurs)
  • Sécurité, authentification, SSL
  • Liens avec JINI, EJB ...
Write a Comment
User Comments (0)
About PowerShow.com