El Java Naming and Directory Interface ( JNDI ) es una aplicación Java API para un servicio de directorio que permite a los clientes de software de Java para descubrir y buscar datos y recursos (en forma de Java objetos ) a través de un nombre. Como todas las API de Java que interactúan con sistemas host, JNDI es independiente de la implementación subyacente. Además, especifica una interfaz de proveedor de servicios (SPI) que permite que las implementaciones de servicios de directorio se conecten al marco. [1] La información buscada a través de JNDI puede ser proporcionada por un servidor, un archivo plano o una base de datos; la elección depende de la implementación utilizada.
Los usos típicos de JNDI incluyen:
- conectar una aplicación Java a un servicio de directorio externo (como una base de datos de direcciones o un servidor LDAP )
- Permitir que un Servlet de Java busque información de configuración proporcionada por el contenedor web de alojamiento [2]
Fondo
Las API Java RMI y Java EE utilizan la API JNDI para buscar objetos en una red. [3]
La API proporciona:
- un mecanismo para vincular un objeto a un nombre
- una interfaz de búsqueda de directorios que permite consultas generales
- una interfaz de eventos que permite a los clientes determinar cuándo se han modificado las entradas del directorio
- Extensiones LDAP para admitir las capacidades adicionales de un servicio LDAP
La parte SPI permite la compatibilidad con prácticamente cualquier tipo de servicio de nombres o directorio, que incluye:
- LDAP
- DNS
- NIS
- Servicio de nombres CORBA
- sistema de archivos
Sun Microsystems publicó por primera vez la especificación JNDI el 10 de marzo de 1997. [4] A partir de 2006[actualizar], la versión actual es JNDI 1.2.
Búsqueda básica
JNDI (Java Naming and Directory Interface) organiza sus nombres en una jerarquía. Un nombre puede ser cualquier cadena como "com.example.ejb.MyBean". Un nombre también puede ser un objeto que implementa la Name
interfaz; sin embargo, una cadena es la forma más común de nombrar un objeto. Un nombre está vinculado a un objeto en el directorio almacenando el objeto o una referencia al objeto en el servicio de directorio identificado por el nombre.
La API JNDI define un contexto que especifica dónde buscar un objeto. El contexto inicial se suele utilizar como punto de partida.
En el caso más simple, se debe crear un contexto inicial utilizando la implementación específica y los parámetros adicionales requeridos por la implementación. El contexto inicial se utilizará para buscar un nombre. El contexto inicial es análogo a la raíz o la parte superior de un árbol de directorios para un sistema de archivos. A continuación se muestra un ejemplo de creación de un contexto inicial:
Hashtable contextArgs = new Hashtable < String , String > ();// Primero debes especificar la fábrica de contexto. // Así es como puede elegir entre la implementación de jboss // frente a una implementación de Sun u otros proveedores. contextArgs . put ( Context . INITIAL_CONTEXT_FACTORY , "com.jndiprovider.TheirContextFactory" );// El siguiente argumento es la URL que especifica dónde está el almacén de datos: contextArgs . put ( Context . PROVIDER_URL , "jndiprovider-database" );// (Es posible que también deba proporcionar credenciales de seguridad)// A continuación, crea el contexto inicial Context myCurrentContext = new InitialContext ( contextArgs );
Luego, se usa un contexto para buscar nombres previamente vinculados en ese contexto. Por ejemplo:
MyBean myBean = ( MyBean ) myCurrentContext . lookup ( "com.midominio.MyBean" );
La alternativa al código anterior es la siguiente:
El objeto Context también se puede configurar agregando el archivo jndi.properties en classpath que contiene el nombre de clase de la fábrica de contexto inicial y la URL del proveedor. El código anterior se reducirá como se muestra a continuación:
// solo necesita crear un objeto de contexto inicial, intentará leer el archivo jndi.properties desde la ruta de clase. Contexto myCurrentContext = new InitialContext ();
Luego, se usa un contexto para buscar nombres previamente vinculados en ese contexto. Por ejemplo:
MyBean myBean = ( MyBean ) myCurrentContext . lookup ( "com.midominio.MyBean" );
buscando
Los atributos se pueden adjuntar a entradas especiales llamadas directorios. Los directorios permiten buscar objetos por sus atributos asociados. Los directorios son un tipo de contexto; restringen el espacio de nombres de forma muy similar a como lo hace una estructura de directorios en un sistema de archivos. [5]
Ver también
Referencias
- ^ "Java SE - Tecnologías principales - Interfaz de directorio y nombres de Java (JNDI)" . www.oracle.com . Consultado el 17 de diciembre de 2016 .
- ^ "CÓMO HACER LOS Recursos JNDI" . Guía del usuario de Apache Tomcat 7 . Fundación de software Apache . Consultado el 21 de enero de 2014 .
- ^ "Proveedor de servicios de registro JNDI / RMI" . docs.oracle.com . Consultado el 17 de diciembre de 2016 .
- ^ "SUN MICROSYSTEMS, INC. PRESENTA LA API DE INTERFAZ DE DIRECTORIO Y NOMBRADO JAVA" . sun.com . 1997-03-10. Archivado desde el original el 8 de septiembre de 2004.
- ^ "Filtros de búsqueda" . docs.oracle.com . Consultado el 17 de diciembre de 2016 .