¿Qué es el JNDI ?
¿Cuál es su uso básico?
Cuando se usa
¿Qué es el JNDI ?
¿Cuál es su uso básico?
Cuando se usa
Respuestas:
¿Qué es el JNDI?
Significa Java Naming and Directory Interface .
¿Cuál es su uso básico?
JNDI permite que las aplicaciones distribuidas busquen servicios de una manera abstracta e independiente de los recursos.
Cuando se usa
El caso de uso más común es configurar un grupo de conexión de base de datos en un servidor de aplicaciones Java EE. Cualquier aplicación que se implemente en ese servidor puede obtener acceso a las conexiones que necesita utilizando el nombre JNDI java:comp/env/FooBarPool
sin tener que conocer los detalles sobre la conexión.
Esto tiene varias ventajas:
devl->int->test->prod
entornos, puede usar el mismo nombre JNDI en cada entorno y ocultar la base de datos real que se está utilizando. Las aplicaciones no tienen que cambiar a medida que migran entre entornos.¿Qué es el JNDI?
Java Naming and Directory Interface TM (JNDI) es una interfaz de programación de aplicaciones (API) que proporciona funciones de nomenclatura y directorio a aplicaciones escritas usando el lenguaje de programación Java TM . Se define para ser independiente de cualquier implementación específica del servicio de directorio. Por lo tanto, se puede acceder a una variedad de directorios (nuevos, emergentes y ya implementados) de una manera común.
¿Cuál es su uso básico?
La mayor parte se trata en la respuesta anterior, pero me gustaría proporcionar arquitectura aquí para que lo anterior tenga más sentido.
Para usar el JNDI, debe tener las clases JNDI y uno o más proveedores de servicios. Java 2 SDK, v1.3 incluye tres proveedores de servicios para los siguientes servicios de nomenclatura / directorio:
Entonces, básicamente, crea objetos y los registra en los servicios de directorio en los que luego puede buscar y ejecutar operaciones.
JNDI en términos simples es básicamente una interfaz para poder obtener instancias de recursos internos / externos como
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
o cualquier otro tipo definido por un adaptador de recursos JCA. Proporciona una sintaxis para poder crear acceso ya sea interno o externo. es decir (comp / env en este caso significa donde componente / entorno, hay muchas otras sintaxis):
jndiContext.lookup("java:comp/env/persistence/customerDB");
java.lang.String
para obtener información de configuración.
Descripción general de JNDI
JNDI es una API especificada en tecnología Java que proporciona funciones de nomenclatura y directorio a aplicaciones escritas en el lenguaje de programación Java. Está diseñado especialmente para la plataforma Java utilizando el modelo de objetos de Java. Usando JNDI, las aplicaciones basadas en tecnología Java pueden almacenar y recuperar objetos Java de cualquier tipo. Además, JNDI proporciona métodos para realizar operaciones de directorio estándar, como asociar atributos con objetos y buscar objetos utilizando sus atributos.
JNDI también se define independientemente de cualquier implementación específica de nombres o servicios de directorio. Permite que las aplicaciones accedan a servicios de directorio y nombres diferentes, posiblemente múltiples, utilizando una API común. Se pueden conectar diferentes proveedores de servicios de nomenclatura y directorio detrás de esta API común. Esto permite que las aplicaciones basadas en tecnología Java aprovechen la información en una variedad de servicios de nomenclatura y directorio existentes, como LDAP, NDS, DNS y NIS (YP), además de permitir que las aplicaciones coexistan con software y sistemas heredados.
Utilizando JNDI como herramienta, puede crear nuevas aplicaciones potentes y portátiles que no solo aprovechan el modelo de objetos de Java, sino que también están bien integradas con el entorno en el que se implementan.
¿Qué es el JNDI?
JNDI significa Java Naming and Directory Interface. Viene de serie con J2EE.
¿Cuál es su uso básico?
Con esta API, puede acceder a muchos tipos de datos, como objetos, dispositivos, archivos de nombres y servicios de directorio, por ejemplo. EJB lo utiliza para buscar objetos remotos. JNDI está diseñado para proporcionar una interfaz común para acceder a servicios existentes como DNS, NDS, LDAP, CORBA y RMI.
Cuando se usa
Puede usar el JNDI para realizar operaciones de nomenclatura, incluidas operaciones de lectura y operaciones para actualizar el espacio de nombres. Las siguientes operaciones se describen aquí .
Un servicio de nombres asocia nombres con objetos y encuentra objetos basados en sus nombres (el registro RMI es un buen ejemplo de un servicio de nombres). JNDI proporciona una interfaz común para muchos servicios de nombres existentes, como LDAP, DNS.
Sin JNDI, la ubicación o la información de acceso de los recursos remotos tendría que estar codificada en las aplicaciones o estar disponible en una configuración. Mantener esta información es bastante tedioso y propenso a errores.
Tengo curiosidad por saber por qué los documentos oficiales son tan ignorados que elaboran los detalles meticulosamente ya.
Pero si desea comprender los casos, consulte la respuesta de duffymo .
Java Naming and Directory Interface TM (JNDI) es una interfaz de programación de aplicaciones (API) que proporciona funciones de nomenclatura y directorio a aplicaciones escritas usando el lenguaje de programación Java TM . Se define para ser independiente de cualquier implementación específica del servicio de directorio. Por lo tanto, se puede acceder a una variedad de directorios, nuevos, emergentes y ya implementados, de una manera común.
Y su arquitectura
Y normalmente cómo lo usas .
I am just curious why the official docs are so ignored which elaborate the details meticulously already
¿Tal vez porque no explican de manera suficiente que la gente común pueda entender?
Usaré un ejemplo para explicar cómo se puede usar JNDI para configurar la base de datos sin que ningún desarrollador de aplicaciones sepa el nombre de usuario y la contraseña de la base de datos.
1) Hemos configurado la fuente de datos en standalone-full.xml del servidor JBoss . Además, también podemos configurar los detalles del grupo.
<datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
<connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<driver>oracle</driver>
<security>
<user-name>usname</user-name>
<password>pass</password>
</security>
<security>
<security-domain>encryptedSecurityDomain</security-domain>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
<background-validation-millis>1</background-validation-millis>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</pool>
</statement>
</datasource>
Ahora, este nombre jndi y su objeto de origen de datos asociado estarán disponibles para nuestra aplicación.
2) Podemos recuperar este objeto fuente de datos usando la clase JndiDataSourceLookup.
Spring creará una instancia del bean de origen de datos, después de que proporcionemos el nombre jndi.
Ahora, podemos cambiar el tamaño del grupo, el nombre de usuario o la contraseña según nuestro entorno o requerimiento, pero no afectará la aplicación.
Nota : encryptedSecurityDomain, necesitamos configurarlo por separado en el servidor JBoss como
<security-domain name="encryptedSecurityDomain" cache-type="default">
<authentication>
<login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="<usernamefordb>"/>
<module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
</login-module>
</authentication>
</security-domain>
Este es uno de los casos de uso. Espero que aclare.
La mejor explicación para mí se da aquí.
¿Qué es JNDI?
Es una API para proporcionar acceso a un servicio de directorio, es decir, un nombre de asignación de servicio (cadenas) con objetos, referencias a objetos remotos o datos simples . Esto se llama enlace. El conjunto de enlaces se llama contexto . Las aplicaciones usan la interfaz JNDI para acceder a los recursos.
En pocas palabras, es como un hashmap con una clave de cadena y valores de objetos que representan recursos en la web.
¿Qué problemas resuelve JNDI?
Sin JNDI, la ubicación o la información de acceso de los recursos remotos tendría que estar codificada en las aplicaciones o estar disponible en una configuración. Mantener esta información es bastante tedioso y propenso a errores.
Si un recurso se ha reubicado en otro servidor, con otra dirección IP, por ejemplo, todas las aplicaciones que usan este recurso tendrían que actualizarse con esta nueva información. Con JNDI, esto no es necesario. Solo se debe actualizar el enlace de recursos correspondiente. Las aplicaciones aún pueden acceder a él con su nombre y la reubicación es transparente.