Programación en castellano
Inicio > Tutoriales > Lenguajes orientados a objeto > J2EE > Sistema de Nombrado en Java (JNDI) [Parte I]
-Tutoriales

Sistema de Nombrado en Java (JNDI) [Parte I]


Operaciones Híbridas de Nombrado y Directorio

La lección Conceptos de nombrado explicó cómo podemos usar bind(), rebind(), y createSubcontext() en el interface Context para crear uniones y subcontextos. El interface DirContext contiene versiones sobrecargadas de estos métodos que aceptan atributos.

Podemos usar estos métodos de DirContext para asociar atributos con el objeto en el momento en que la unión o el subcontexto son añadidos al espacio de nombres. Por ejemplo, podríamos crear un objeto Persona y unirlo al espacio de nombres y en ese mismo momento asociarle atributos sobre ese objeto Persona.

Antes de continuar: Los ejemplos de esta lección requieren que hagamos adiciones al esquema. Podemos desactivar el chequeo de esquemas del servidor LDAP o añadirle al servidor el esquema que acompaña a este tutorial. Estas dos tareas son típicas de un administrador de servidor de directorios. Puedes ver la lección Preparaciones.

. Crear un Contexto que tiene Atributos

Para crear un contexto que tiene atributos, le suministramos a DirContext.createSubcontext() el nombre del contexto que queremos crear y sus atributos.

// Create attributes to be associated with the new context
Attributes attrs = new BasicAttributes(true); // case-ignore
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("extensibleObject");
attrs.put(objclass);

// Create the context
Context result = ctx.createSubcontext("cn=Fruits", attrs);

Este ejemplo crea un nuevo contexto llamado "cn=Fruits" que tiene un atributo "objectclass" con dos valores, "top" y "extensibleObject", en el contexto ctx.

Si listamos el contexto ctx, veremos que ahora contiene una entrada para "cn=Fruits".

# java Create
ou=Groups: javax.naming.directory.DirContext
ou=People: javax.naming.directory.DirContext
cn=Fruits: javax.naming.directory.DirContext

. Añadir una Unión que Tiene Atributos

Se usa DirContext.bind() para añadir una unión que tiene atributos a un contexto. Acepta como argumentos el nombre del objeto, el objeto a unir y un conjunto de atributos.

// Create the object to be bound
Fruit fruit = new Fruit("orange");

// Create attributes to be associated with the object
Attributes attrs = new BasicAttributes(true); // case-ignore
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("extensibleObject");
attrs.put(objclass);
attrs.put("color", "orange");
attrs.put("flavor", "sweet");

// Perform bind
ctx.bind("cn=favorite, cn=Fruits", fruit, attrs);

Este ejemplo crea un objeto de la clase Fruit y lo une al nombre "cn=favorite" dentro del contexto "cn=Fruits", relativo a ctx. Esta unión tiene tres atributos: "objectclass", "color", y "flavor"). Si después buscamos el nombre "cn=favorite, cn=Fruits" en ctx, obtendremos el objeto fruit. Si obtenemos los atributos de "cn=favorite, cn=Fruits", obtendríamos aquellos atributos con los que se creó el objeto. Aquí tenemos un ejemplo de la salida.

# java Bind
orange
attribute: flavor
value: sweet
attribute: color
value: orange
attribute: objectclass
value: top
value: extensibleObject
value: javaObject
value: javaNamingReference
attribute: javaclassname
value: Fruit
attribute: javafactory
value: FruitFactory
attribute: javareferenceaddress
value: #0#fruit#orange
attribute: cn
value: favorite

Los atributos extras y los valores de los atributos mostrados aquí se usan para almacenar información sobre el objeto (fruit). Estos atributos extras se explican en más detalle en la sección Objetos Java y el Directorio.

Si ejecutaramos este ejemplo dos veces, la segunda vez fallaría y obtendríamos una NameAlreadyBoundException.

Esto es porque, el nombre "cn=favorite" ya está unido en el contexto "cn=Fruits". Para que el segundo intento tenga éxito, deberíamos usar rebind().

. Reemplaar Uniones que tienen Atributos

Se usa DirContext.rebind() para añadir o reemplazar una unión y sus atributos. Acepta los mismos argumentos que bind(). Sin embargo, la semántica de rebind() requiere que el nombre ya esté unido, entonces los desune y lo vuelve a unir al objeto dado con sus atributos.

// Create the object to be bound
Fruit fruit = new Fruit("lemon");

// Create attributes to be associated with the object
Attributes attrs = new BasicAttributes(true); // case-ignore
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("extensibleObject");
attrs.put(objclass);
attrs.put("color", "yellow");
attrs.put("flavor", "sour");

// Perform bind
ctx.rebind("cn=favorite, cn=Fruits", fruit, attrs);

Cuando ejecutamos este ejemplo, reemplaza la unión que se creó con el ejemplo bind().

# java Rebind
lemon
attribute: flavor
value: sour
attribute: color
value: yellow
attribute: objectclass
value: top
value: extensibleObject
value: javaObject
value: javaNamingReference
attribute: javaclassname
value: Fruit
attribute: javafactory
value: FruitFactory
attribute: javareferenceaddress
value: #0#fruit#lemon
attribute: cn
value: favorite
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados