Encontrar objetos en un sistema de cierta complejidad puede ser un problema. ¿Dónde se ubican? ¿Cuales son sus características?. Necesitamos tener un sistema de nombrado que nos evite el problema de encontrarlo, sea cual sea su ubicación y la aplicación que lo utiliza.
El sistema de directorios y nombres de Java facilita el mantenimiento de aplicaciones, permitiendo a diversos programas localizar y recuperar objetos. En JNDI es un servicio de nombres, semejante a unas páginas amarillas. Lo primero es tener nombres que sirvan de referencia de los objetos. Algo semejante ocurre en el sistema DNS (Domain Name Service) donde se asocia un nombre, como www.proactiva-calidad.com, con una dirección IP. Los sistemas de nombres además implican cierta jerarquía de nombres, como ocurre en la forma de nombrar una clase en Java, donde hacemos referencia a los paquetes y subpaquetes en los que se encuentra: paquete.subpaquete.nombre_clase.
Cuando asociamos un nombre con un objeto hablamos de "unión (binding) del objeto". Un conjunto de uniones nombre-objeto es un contexto. Los contextos tienen también una relación jerárquica, como ocurre con el espacio de directorios y subdirectorios.
Un sistema de nombrado tiene un espacio de nombres, que no es más que el conjunto de todos los contextos de dicho sistema.
Es necesario ampliar el concepto de servicio de nombres para llegar al de servicio de directorio, donde se relacionan nombres de objeto con nombres de atributos, al igual que ocurre en unas páginas amarillas. De esta forma se enriquece el sistema de búsqueda, ya que no sólo buscamos por nombre de objeto (el nombre de una persona en las páginas amarillas), sino que además podemos buscar por un filtro. Un filtro de búsqueda es una consulta de objetos que tienen sus atributos asociados con ciertos valores. Por ejemplo, la búsqueda de personas en una guía telefónica que cumplan la condición de que su dirección es "Alcala 80".
Los directorios normalmente ordenan sus objetos en árboles. Por ejemplo, LDAP ordena todos sus objetos directorio en un árbol, llamado directory information tree (DIT). Con el DIT, un objeto organización, por ejemplo, podría contener objetos departamentos que a su vez podrían contener objetos personas. Cuando los objetos directorios se ordenan de esta forma, juegan el papel de contextos de nombres además del de contenedores de atributos.
Página de Sun dedicada a JNDI.La idea de JNDI implica universalidad y abstracción: es un API genérico, de tal forma que es necesario integrarlo con otros sistemas de nombres. Para ello la arquitectura JNDI incluye un interfaz de provisión de servicio (service provider interface, SPI), que sirve de intermediario con otros proveedores de servicios de nombres/directorios.

Estos proveedores de servicio hacen el trabajo de traducir las llamadas al API JNDI en llamadas reales sobre un servidor concreto de nombres o directorios.
Necesitamos las clases del proveedor de servicio que hayamos elegido. Desde la versión 1.4.1 el JDK cuenta con los siguientes proveedores de servicio de nombres:
Página de Sun sobre proveedores de servicio.Cuando usamos como proveedor de servicios el sistema de ficheros, no necesitamos configurar el servidor, ya que el propio sistema de ficheros actúa como servidor. Pero si usamos, por ejemplo, el proveedor de servicios LDAP, necesitamos configurar nuestro propio servidor o tener acceso a un servidor LDAP existente.
El JNDI está dividido en cinco paquetes:
Enlace a un útil artículo de Sun sobre JNDI.
Enlace a la traducción de un curso de Sun sobre JNDI.