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.
|