La interfaz de nombres y directorios de Java (Java Naming and Directory Interface , JNDI ) es una API de Java para un servicio de directorio que permite a los clientes de software Java descubrir y buscar datos y recursos (en forma de objetos Java ) 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 (Service Provider Interface, 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 suministrada 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 Java busque información de configuración proporcionada por el contenedor web de alojamiento [2]
Fondo
Las API de 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 realizar 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 admitir prácticamente cualquier tipo de servicio de nombres o directorio, incluidos:
- LDAP
- Sistema de nombres de dominio
- 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 Nameinterfaz; sin embargo, una cadena es la forma más común de nombrar un objeto. Un nombre se vincula 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 utiliza normalmente 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:
Contexto de tabla hashArgs = new Hashtable < String , String > ();
// Primero debe especificar la fábrica de contexto.
// Así es como elige entre una implementación de jboss
vs. 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 tengas que proporcionar credenciales de seguridad)
// A continuación, crea el contexto inicial
Context myCurrentContext = new InitialContext ( contextArgs );
Luego se utiliza 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 la ruta de clases que contiene el nombre de la clase de 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 utiliza un contexto para buscar nombres previamente vinculados en ese contexto. Por ejemplo:
MyBean myBean = ( MyBean ) myCurrentContext .lookup ( "com.midominio.MyBean" ) ;
Búsqueda
Los atributos pueden estar asociados 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 directorio en un sistema de archivos. [5]
Véase también
Referencias
- ^ "Java SE - Tecnologías básicas - Interfaz de nombres y directorios de Java (JNDI)". www.oracle.com . Consultado el 17 de diciembre de 2016 .
- ^ "JNDI Resources HOW-TO". Guía del usuario de Apache Tomcat 7. Apache Software Foundation . 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 INTERFAZ API DE NOMBRAMIENTO Y DIRECTORIO DE JAVA". sun.com . 1997-03-10. Archivado desde el original el 2004-09-08.
- ^ "Filtros de búsqueda". docs.oracle.com . Consultado el 17 de diciembre de 2016 .
Enlaces externos
- Página JNDI de Java SE 7
- Página JNDI de Java SE 8
- Documentación de referencia de Java SE 8 JNDI javax.naming
- El tutorial de JNDI