Especificar Propiedades de Entorno
Podemos especificar propiedades de entorno para el JNDI usando el
parámetro de entorno del constructor de InitialContext
y ficheros de recursos de aplicación. También se
podrían especificar varias propiedades de entorno JNDI usando propiedades
del sistema y parámetros de applet, como se describe
en secciones posteriores.
Ficheros de Recursos de Aplicación
Para simplificar la tarea de configurar el entorno necesario para una
aplicación JNDI, podríamos distribuir ficheros
de recursos de aplicación junto con los componentes de la aplicación
y los proveedores de servicios. Un fichero de recursos de aplicación tiene el
nombre jndi.properties. Contiene una lista de parejas
clave/valor presentadas en el formato de fichero de propiedades (ver java.util.Properties).
La clave es el nombre de la propiedad (por ejemplo, java.naming.factory.object)
y el valor es un string en el formato definido para esa propiedad.
Aquí tenemos un ejemplo de un fichero de recursos de aplicación.
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
Observamos que no se aplican restricciones sobre los tipos de propiedades de
entorno que podemos tener en este fichero.
El JNDI lee automáticamente el ficheros de recursos de aplicación desde los
classpaths de todos los componentes y desde JAVA_HOME/lib/jndi.properties,
donde JAVA_HOME es el directorio que contiene nuestro JRE (Java
Runtime Environment). El JNDI pone las propiedades de estos ficheros a
disposición de los proveedores de servicios y de otros componentes que
necesiten utilizarlas. Por lo tanto estos ficheros deben considerarse como
abiertos a todo el mundo y no deberían contener información sensible, como
passwords, etc.
|
Nota:
Excepto para JAVA_HOME/lib/jndi.properties, los
ficheros de recursos de aplicación sólo se soportan cuando se usa la Plataforma
Java 2. Si usamos el JDK
1.1, sólo podremos ver JAVA_HOME/lib/jndi.properties.
|
Por ejemplo, abajo tenemos un programa que lista un contexto sin especificar ninguna propiedad de entorno en el constructor de InitialContext.
InitialContext ctx = new InitialContext();
NamingEnumeration enum = ctx.list("");
Si ejecutamos este programa con el fichero jndi.properties
mostrado anteriormente, listará los contenidos de la entrada o=jnditutorial
en el servidor LDAP especificado.
El uso de ficheros de recursos de aplicación para especificar cualquier
propiedad de entorno JNDI permite configurar al JNDI con una programación
mínima. Usando el fichero JAVA_HOME/lib/jndi.properties,
también podemos configurar el JNDI para todas las aplicaciones y applets JNDI
que usen el mismo interprete Java.
Si usamos ficheros de recursos de aplicación, debemos recordar conceder a
nuestro applet o aplicación los permisos para leer todos los ficheros de
recursos de aplicación.
Propiedades del Sistema
Una propiedad del sistema es una pareja clave/valor que el entorno de
ejecución java define para describir al usuario, en entorno del sistema y el
sistema java. El entorno de ejecución define y usa un conjunto de propiedades
del sistema por defecto. Se pueden poner otras propiedades a disposicion de un
programa Java mediante la opción -D de la línea de comandos
del intérprete java. Por ejemplo, ejecutando el intérprete de la siguiente
forma.
# java -Dmyenviron=abc Main
se añade la propiedad myenviron con el valor abc
a la lista de propiedades del sistema visible para el programa Main.
La clase java.lang.System contiene métodos estáticos para leer
y actualizar propiedades del sistema. La habilidad de leer o actualizar
cualquier propiedad del sistema está controlado por la política de seguridad
del sistema de ejecución Java.
El JNDI lee las siguientes propiedades estándars JNDI desde las propiedades
del sistema.
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
Cuando configuramos propiedades del sistema, estas propiedades de entorno
afectan a los contextos de todas las aplicaciones o applets (si el applet tiene
permisos para leer dichas propiedades).
Usando el mismo programa del ejemplo de fichero de recursos de aplicación
anterior, especificando la factoría de contexto inicial a usar dando el
contexto inicial a utilizar en la línea de comandos. Aquí tenemos dos
ejemplos.
# java -Djava.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory \
-Djava.naming.provider.url=ldap://localhost:389/o=jnditutorial \
List
# java -Djava.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory \
-Djava.naming.provider.url=file:/tmp \
List
El primer ejemplo usa LDAP, y el segundo usa el sistema de ficheros.
Usar las propiedades del sistema para especificar propiedades de entorno
estándar JNDI permite configurar el JNDI con una programación mínima. Sin
embargo, probablemente sólo es conveniente usarlas desde scripts. Esto es por
que los ítems con nombres de propiedades largos deben especificarse sobre la
línea de comandos. También, los applets generalmente no tienen permiso para
leer propiedades del sistema arbitrarias y debe concedersele explícitamente el
permiso para hacerlo.
Parámetros de Applet
Podemos pasarle parámetros a un applet usando una sencilla pareja
clave/valor. Estas se especifican en el fichero HTML que referencia al applet.
El cómo se especifican dependen del contexto del applet. Por ejemplo, si el
applet es referenciado desde una etiqueta applet,
especificaremos los parámetros usando la etiqueta param. Aquí
tenemos un ejemplo.
<param
name=java.naming.factory.initial
value=com.sun.jndi.ldap.LdapCtxFactory>
<param
name=java.naming.provider.url
value=ldap://localhost:389/o=jnditutorial>
Si el applet es referenciado desde el Java
Plug-in, especificaremos sus parámetros usando parejas de clave/valor.
Aquí tenemos un ejemplo.
java.naming.provider.url="ldap://localhost:389/o=jnditutorial"
java.naming.factory.initial="com.sun.jndi.ldap.LdapCtxFactory"
Para que el JNDI acceda a los parámetros de un applet, debemos configurar la
propiedad de entorno Context.APPLET
("java.naming.applet"). El JNDI lee las siguientes
propiedades estándars del JNDI desde los parámetros del applet.
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
Aquí tenemos un ejemplo que añade una
propiedad ("java.naming.applet") al entorno.
// Put this applet instance into the environment
Hashtable env = new Hashtable();
env.put(Context.APPLET, this);
// Pass the environment to the initial context constructor
Context ctx = new InitialContext(env);
// List the objects
NamingEnumeration enum = ctx.list(target);
while (enum.hasMore()) {
out.println(enum.next());
}
ctx.close();
El JNDI obtiene las propiedades de entorno necesarias desde los parámetros del
applet (mostrados anteriormente).
Este uso de los parámetros de applets para especificar propiedades de
entorno JNDI estándars permite configurar al JNDI de la misma forma que
un applet realiza normalmente la configuración de otros subsistemas o
componentes. Las propiedades del sistema y los ficheros de recursos de
aplicación no son buenos mecanismos para que los applets dependan de ellos.
Porque los applets normalmente no pueden leer propiedades del sistema o ficheros
arbitrarios (incluyendo jndi.properties).