La lección Preparaciones
describe como configurar un
contexto
incial para acceder a servicios de nombres/directorios mediante
el JNDI. Por ejemplo, para usar el proveedor LDAP de Sun, usamos un código que se
parecería a este:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=jnditutorial");
Context ctx = new InitialContext(env);
// ... do something useful with ctx
La clase
InitialContext es sólo una clase envoltura que
accede a la implementación del contexto real -- el ejemplar
Context creado por la clase
factoría de contexto inicial nombrada por la propiedad de entornoContext.INITIAL_CONTEXT_FACTORY
("java.naming.factory.initial"). La clase factoría debe
implementar el interface InitialContextFactory. En el ejemplo anterior, la
clase factoría de contexto inicial era
com.sun.jndi.ldap.LdapCtxFactory.
Para que una implementación de contexto sea accesible desde el contexto incial, un proveedor
de servicio debe proporcionar una clase que implemente el interface
InitialContextFactory. Aquí tenemos un ejemplo de una factoría de contexto
inicial para el ejemplo del espacio de nombres
en forma de árbol:
public class InitCtxFactory implements InitialContextFactory {
public Context getInitialContext(Hashtable env) {
return new HierCtx(env);
}
}
Este ejemplo es muy simple. Llama al constructor de HierCtx
y devuelve un contexto vacío. En una implementación real, la factoraía de contexto incial
debe crear un ejemplar de Context para alcanzar todas las otras
apartes del espacio de nombres del servicio de nombres/directorio subyacente. Una
implementación real normalmente también usaría la propiedad de entorno Context.PROVIDER_URL (
"java.naming.provider.url") para inicializar el contexto inicial. Por ejemplo,
en el proveedor LDAP de Sun, la propiedad Context.PROVIDER_URL
indica la dirección y el puerto de la máquina del servidor de directorio, así como el DN
(nombre distinguido) de la raíz del contexto de nombres a utilizar. En el ejemplo anterior, la
dirección de la máquina y el puerto eran localhost y
389 y el DN era "o=jnditutorial".