En esta página: Un Entorno de Contexto Podemos usar ficheros de recursos de aplicación, parámetros de entorno, propiedades de sistema, y parámetros de applets para especificar propiedades de entorno pero, ¿qué pasa si usamos más de uno de estos mecanismos a la vez? Inicialización Cuando usamos cualquiera de los constructores de las siguientes clases, podemos suministrar un parámetro Hashtable que contenga propiedades de entorno: InitialContext, InitialDirContext, y InitialLdapContext. El entorno del contexto inicial es inicializado desde las dos siguientes fuentes, en el orden especificado.
Por eso el entorno, efectivamente, es la unión de los parámetros de entorno y los ficheros de recursos de aplicación, con la regla adicional de que algunas propiedades estándars se podrían obtener desde parámetros de un applet o desee propiedades del sistema. Si una de las siguientes propiedades se encuentra en alguno de estos dos recursos o en más de un fichero de recursos de aplicación, todos los valores de las propieades se concatenan en una sóla lista separada por dos puntos. Para otras propiedades, se usa el primer valor encontrado. java.naming.factory.object java.naming.factory.state java.naming.factory.control java.naming.factory.url.pkgs Cuando se llama al constructor, el JNDI construye un entorno de acuerdo a esas reglas y pasa el resultado al proveedor de servicios subyancente. Cuando se llama a los métosos que obtienen objetos del contexto inicial derivados de dicho contexto, como Context.lookup(), se hereda el entorno del contexto padre. Observa que posiblemente no todas las propiedades de entorno se apliquen a un contexto. Sin embargo, el contexto siempre está obligado a grabarlas y pasarlas a cualquier contexto derivado. Obtener un Entorno de Contexto Para obtener un entorno de contexto, usamos getEnvironment(). Aquí tenemos un ejemplo. // 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); // See what environment properties you have System.out.println(ctx.getEnvironment()); Cuando ejecutamos este fichero con el siguiente fichero de recursos de aplicación de nuestro classpath. java.naming.factory.object=com.sun.jndi.ldap.AttrsToCorba:com.wiz.from.Person java.naming.factory.state=com.sun.jndi.ldap.CorbaToAttrs:com.wiz.from.Person java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory java.naming.provider.url=ldap://localhost:389/o=jnditutorial com.sun.jndi.ldap.netscape.schemaBugs=true obtenemos los siguientes resultados. 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 De esta salida podemos observar lo siguiente.
Los usuarios muchas veces actualizan erróneamente el resultado de getEnvironment() y luego esperan que el entorno del contexto se actualice adecuadamente. Dependiendo de la implementación del proveedor, actualizar los resultados de getEnvironment() podría no tener efecto. De echo, deberíamos pensar que el resultado de getEnvironment() es un objeto de sólo lectura inmutable, y no intentar actualizarlo. Pueder ir a la próxima sección para ver más instrucciones sobre como actualizar un entorno de contexto.
|