El Contexto Inicial
Antes de realizar cualquier operación de servicio de nombres o de directorio,
ncesitamos adquirir un contexto
inicial--el punto de arranque dentro del espacio de nombres. Esto es
porque todos los métodos sobre servicios de nombres o directorios se realizan
en relación a algún contexto. Para obtener un contexto inicial tenemos que
seguir estos pasos.
- Seleccionar el proveedor de servicios correspondiente al sevicio al que
queremos acceder.
- Especificar la configuración que necesite el contexto inicial.
- Llamar al constructor InitialContext.
Seleccionar el Proveedor de Servicio para el Contexto Incial
Podemos especificar el proveedor de servicio a utilizar para el contexto inicial
creando un conjunto de propiedades de entorno (una Hashtable) y
añadirle el nombre de la clase del proveedor de servicio.
Por ejemplo, si estamos usando el proveedor de sevicios LDAP de Sun
Microsystems, nuestro código se debería parecer a esto.
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
Para especificar el proveedor de servicio del sistema de fichero proporcionado
por Sun Microsystems, deberíamos escribir un código como éste.
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
También podemos usar propiedades de sistema para especificar el
proveedor de servicos a utilizar.
Suministrar la Infomación que Necesita el Contexto Inicial
Clientes de diferentes directorios podrían necesitar distinta información para
contactar con el directorio. Por ejemplo, podríamos necesitar conocer en qué
máquina se está ejecutando el servidor y qué información es necesaria para
identificar al usuario para el directorio. Dicha información es pasada al
proveedor de servicio mediante propiedades de entorno. El JNDI especifica
algunas propiedades de entorno genéricas que el proveedor de servicio puede
utilizar. La documentación de nuestro proveedor de servicio nos dará detalles
sobre la información requerida por estas propiedades.
Por ejemplo, supongamos que el programa está usando el proveedor de
servicios LDAP. Este proveedor requiere que el programa especifica la
localización del servidor LDAP, así como información de entidad del usuario.
Para proporcionar esta información, podriamos escribir un código como éste.
env.put(Context.PROVIDER_URL, "ldap://ldap.wiz.com:389");
env.put(Context.SECURITY_PRINCIPAL, "joeuser");
env.put(Context.SECURITY_CREDENTIALS, "joepassword");
Este tutorial usa los proveedores de servicios del sistema de ficheros y LDAP de
Sun Microsystems. Para los ejemplos que usan el sistema de ficheros,
suministramos la URL del proveedor la URL correspondiente al path que dimos en
el programa Setup. Por ejemplo, si
usamos el directorio /tmp/tutorial en el programa Setup,
nuestro código se podría parecer a esto.
env.put(Context.PROVIDER_URL, "file:/tmp/tutorial/");
Los ejemplos que usan LDAP asumen que el servidor ha sido instalado en el puerto
389 de la máquina local con el nombre de raíz distinguido de "o=JNDITutorial"
y no se requiere autentificación para actualizar este directorio. Incluyen el
siguiente codigo para configurar el entorno.
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
Si estamos usando un directorio que se configura de forma diferente,
necesitaremos configurar de la forma adecuada estas propiedades de entorno.. Por
ejemplo, si el directorio se está ejecutando en otra máquina, necesitaremos
reemplazar "localhost" con el nombre de esa máquina.
Crear el Contexto Inicial
Ahora estámos listos para crear el contexto incial. Para hacer esto, pasamos al
constructor de InitialContext
las propiedades de entorno que hemos creado anteriormente.
Context ctx = new InitialContext(env);
Ahora que tenemos una referencia a un objeto Context, podemos empezar a acceder al servicio de nombres.
Para realizar operaciones de directorio, necesitamos usar un InitialDirContext.
Para hacer esto usamos uno de sus constructores.
DirContext ctx = new InitialDirContext(env);
Esta sentencia devuelve una referencia a un objeto DirContext
para realizar operaciones de directorio.