2011-02-28 19 views
22

JNDI es como un mapa de esteroides ¿verdad? Utilizo una clave para encontrar referencias a objetos. Además, ¿qué es InitialContext? Parece que no entiendo la idea.Comprender JNDI

+5

dunno acerca de los esteroides, que siempre es más lento que un mapa implementado trivialmente y permite solamente de cadenas o nombres de teclas. Si me preguntas: es una versión paralizada de Map – bestsss

Respuesta

32

Conceptualmente, JNDI es como System.getProperties() con esteroides.

System.getProperties() le permite pasar los parámetros String a su código desde la línea de comandos. De forma similar, JNDI le permite configurar objetos arbitrarios fuera de su código (por ejemplo, en archivos de configuración del servidor de aplicaciones) y luego usarlos en su código.

En otras palabras, es una implementación de Service Locator pattern: su código obtiene los servicios configurados por el entorno del registro centeral.

Como suele ser con los localizadores de servicios, su código debe tener un punto de entrada para acceder al localizador de servicios. InitialContext es este punto de entrada: crea InitialContext y luego obtiene los servicios requeridos de JNDI con lookup().

9

código de let's talk, la clase que carga el jndi es un singleton, usted le proporcionará la clave de sus recursos de jndi. A continuación, estoy cargando un origen de datos (datasource = "JDBC/dummy").

try { 
    Context initCtx = new InitialContext(); 
    Context envCtx = (Context) initCtx.lookup("jndicontext"); 
    ds = (DataSource) envCtx.lookup("JDBC/dummy"); 
} catch (Exception e) { 
    log.error(e); 
} 

El contexto inicial me devuelve el recurso como un objeto. Podría haber cargado un frijol de la misma manera.

Connection conn = ds.getConnection(); 

¿Pero cuál es el punto? Solo almacena objetos para un entorno específico sin considerar su tipo. Y luego cambiar su información sobre la marcha. Notarás que no estoy escribiendo ningún nombre de usuario/contraseña.

En este ejemplo, dependiendo del entorno actual: - En producción, devuelve una conexión a una base de datos. - En el entorno de integración, devuelve una conexión a otra base de datos - En desarrollo, crea otra implementación de la clase (simulacros) y utiliza archivos xml como fuente de datos.

Saludos