Programación en castellano Añadir una dirección | Buscador | Cursos | Artículos | Foros | Formación

Sistema de Nombrado en Java (JNDI) [Parte I]
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Actualizar un Entorno de Contexto

Podemos cambiar el entorno de un contexto usando addToEnvironment() y removeFromEnvironment().

Aquí tenemos un ejemplo que crea un contexto inicial y obtiene un contexto derivado desde el contexto inicial (mediante lookup()).

Luego actualiza los entornos del contexto inicial y del contexto derivado.

// Initial environment with various properties
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "com.sun.jndi.fscontext.FSContextFactory");
env.put(Context.PROVIDER_URL, "file:/");
env.put(Context.OBJECT_FACTORIES, "foo.bar.ObjFactory");
env.put("foo", "bar");

// Call the constructor
Context ctx = new InitialContext(env);

// Get the child context
Context child = (Context)ctx.lookup("tmp");

// See what properties the initial context has
System.out.println(ctx.getEnvironment());

// Replace foo in the parent
ctx.addToEnvironment("foo", "baz");
	  
// Add a new property to the parent
ctx.addToEnvironment("com.wiz.jndi.wizProp", "wizards");

// Remove an attribute from the parent
ctx.removeFromEnvironment(Context.OBJECT_FACTORIES);

// Remote property from the child
child.removeFromEnvironment(Context.PROVIDER_URL);

// See what environment properties you have after updates
System.out.println(">>>>> Parent context: ");
System.out.println(ctx.getEnvironment());

// See what environment properties the child has after updates
System.out.println(">>>>> Child context: ");
System.out.println(child.getEnvironment());

Aquí tenemos la salida al ejecutar el ejemplo, observa que estas actualizaciones sólo afectan al ejemplar de Context en el que se realizan.

{
com.sun.jndi.ldap.netscape.schemaBugs=true, 
java.naming.factory.object=foo.bar.ObjFactory:com.sun.jndi.ldap.AttrsToCorba:com.wiz.from.Person, 
java.naming.factory.initial=com.sun.jndi.fscontext.FSContextFactory, 
foo=bar, 
java.naming.provider.url=file:/, 
java.naming.factory.state=com.sun.jndi.ldap.CorbaToAttrs:com.wiz.from.Person, 
java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
}

>>>>> Parent context.
{
com.sun.jndi.ldap.netscape.schemaBugs=true, 
com.wiz.jndi.wizProp=wizards, 
java.naming.factory.initial=com.sun.jndi.fscontext.FSContextFactory, 
foo=baz, 
java.naming.provider.url=file:/, 
java.naming.factory.state=com.sun.jndi.ldap.CorbaToAttrs:com.wiz.from.Person, 
java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
}

>>>>> Child context.
{
com.sun.jndi.ldap.netscape.schemaBugs=true, 
java.naming.factory.object=foo.bar.ObjFactory:com.sun.jndi.ldap.AttrsToCorba:com.wiz.from.Person, 
java.naming.factory.initial=com.sun.jndi.fscontext.FSContextFactory, 
foo=bar, 
java.naming.factory.state=com.sun.jndi.ldap.CorbaToAttrs:com.wiz.from.Person, 
java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
}

Ámbito de Cambios

Como se ha visto en el ejemplo anterior, cambiar la propieades de entorno de un contexto no afecta a ninguno de sus contexto derivados. Sin embargo, los contextos que se deriven en el futuro desde este contexto heredarán el entorno actualizado.

Valores por Defecto

Algunas propiedades de entorno tienen valores por defecto. Por ejemplo, una implementación podría ignorar las referencias por defecto a menos que la propiedad de entorno "java.naming.referral" se haya configurado a "throw" o "follow".

Cuando dicha propiedad es eliminada usando removeFromEnvironment(), el valor por defecto se convierte en el valor efectivo de la propiedad, aunque el valor real podría no mostrarse necesariamente cuando examinamos las propiedades de contexto usando getEnvironment().

Verificar la Actualización

Después de actualizar un entorno de contexto, podemos verificarlo inmediatamente usando getEnvironment(). Sin embargo, frecuentemente una propiedad de entorno representa una aspecto de comportamiento del contexto, por ejemplo, las credenciales a usar cuando se entra en el servidor. En dichos casos, no hay garantía de que que la propiedad haya sido actualizada y el contexto haya verificado las corrección y aplicabilidad de la propiedad. Esto es porque podría requerir interacción del servidor. La siguiente vez que el contexto necesite usar la propiedad, ocurrirá la verificación. En ese momento se podría indicar un fallo.

Por ejemplo, supongamos que hemos usado addToEnvironment() tres veces para actualizar las identidades, las credenciales y el tipo de autentificación de los clientes. Supongamos que hemos suministrado unas credenciales erróneas. La próxima vez que llamemos al método que requiere la autentificación en el conexto, el proveedor de servicio intentará autentificarse usando las propiedades actualizadas. Sin embargo, la autentificación fallará a causa de las credenciales erróneas y obtendremos una AuthenticationException.


Principio Página
© 1999-2002, Programación en castellano, s.l.
Contacto - Datos legales

ReD Internet: Hospedaje Web | envio sms gratis | Salvapantallas | Fondos de Escritorio, famosas | melodias moviles gratis| Gratis