Java Naming and Directory Interface
# Java Naming and Directory Interface

JNDI est une API Java de connexion à des annuaires, notamment des annuaires LDAP.

## Présentation

JNDI signifie Java Naming and Directory Interface, cette API permet :

* d’accéder à différents services de nommage ou de répertoire de façon uniforme ;
* d'organiser et rechercher des informations ou des objets par nommage (java naming and directory interface) ;
* de faire des opérations sur des annuaires (java naming and directory interface) tels que :
   * LDAP : un annuaire léger
   * X500 : normes d'annuaires lourdes à mettre en œuvre
   * NIS : annuaire obsolète

## Usages

### Java EE

JNDI est très utilisée dans l'univers des serveurs d'applications Java et fait partie de l'ensemble des APIs Java EE où il permet de lier un nom (par exemple 'base/sql/login') à une information.

JNDI utilise principalement les packages :

* javax.naming.*
* javax.naming.directory.*

## Concepts

Un service de nommage permet d'associer un nom à un objet. Cette association est nommée binding. Un ensemble d'associations nom/objet est nommé un contexte.

Ce contexte est utilisé lors de l'accès à un élément contenu dans le service.

Il existe deux types de contexte :

* Contexte racine
* Sous contexte

Un sous-contexte est un contexte relatif à un contexte racine.

Par exemple, c:\ est un contexte racine dans un système de fichiers de type Windows. Le répertoire windows est un sous contexte du contexte racine (C:\windows) qui est dans ce cas nommé sous répertoire.

Dans DNS, com est un contexte racine et test est un sous contexte (test.com)

## Utilisation

Pour pouvoir utiliser un service de nommage, il faut tout d'abord obtenir un contexte racine qui va encapsuler la connexion au service.

À partir de ce contexte, il est possible de réaliser plusieurs opérations :

* bind : associer un objet avec un nom
* rebind : modifier une association
* unbind : supprimer une association
* lookup : obtenir un objet à partir de son nom
* list : obtenir une liste des associations

Toutes les opérations possèdent deux versions surchargées attendant respectivement :

* Un objet de type Name : cet objet encapsule une séquence ordonnée de un ou plusieurs éléments (l'intérêt de cette classe est de permettre la manipulation individuelle de chaque élément).
* Une chaîne de caractères : elle contient la séquence

## LDAP

Les concepts JNDI et LDAP diffèrent beaucoup et les noms des méthodes disponibles peuvent entrainer des confusions.

