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:


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.

  1. Parámetro de entorno del constructor. Si la propiedad es una de.
    java.naming.factory.initial
    java.naming.factory.object
    java.naming.factory.state
    java.naming.factory.control
    java.naming.factory.url.pkgs
    java.naming.provider.url
    java.naming.dns.url	
    

    y no ocurre en el parámetro entorno, se obtiene desde los parámetros del applet, y si no está presente allí, desde las propiedades del sistema.

  2. Todos los ficheros de recursos de aplicación (jndi.properties).

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.

  • Las propiedades que sólo se encuentran en una fuente --"foo" desde el parámetro de entorno, y "com.sun.jndi.ldap.netscape.schemaBugs" desde el fichero de recursos de aplicación-- están en el entorno resultante.
  • Las propiedades listas-de-factorías (es decir, "java.naming.factory.object") que ocurren en ambas fuentes se mezclan, con las de los parámetros de entorno en primera posición de las listas.
  • Todas las demás propiedades (es decir, "java.naming.factory.initial") que ocurren en ámbas fuentes toman sus valores del parámetro de entorno.

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.


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