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:


Objetos con Atributos

Si el objeto que estamos intentato unir no es Serializable ni Referenceable, todavía podemos unirlo si tiene atributos, la unión de estas uniones con objetos DirContext es una característica soportada por el proveedor de servicios. El proveedor de servicios LDAP de Sun soporta esta característica.

Interoperabilidad

Unir objetos DirContext es especialmente útil para interoperabilidad con aplicaciones no-Java. Un objeto está representado por un conjunto de atributos, que pueden ser leídos desde el directorio y usados por aplicaciones no-Java. Los mismos atributos también pueden ser leídos e interpretados por un proveedor de servicios JNDI, que, en conjunción con una factoría de objetos, los convierte en un objeto Java.

Por ejemplo, un objeto podría tener, como algunos de sus valores de atributos, URLs que el servicio JNDI podría usar para generar un ejemplar de un objeto Java que la aplicación podría usar. La misma URL podría también ser utilizada por aplicaciones no-Java.

Unir un Objeto Usando sus Atributos

El siguiente ejemplo muestra una clase Drink que implementa el interface DirContext. Este ejemplo no usa la mayoría de los métodos de DirContext y sólo lanza una OperationNotSupportedException.

public class Drink implements DirContext {
    String type;
    Attributes myAttrs;
    
    public Drink(String d) {
	type = d;
	myAttrs = new BasicAttributes(true);  // Case ignore
	Attribute oc = new BasicAttribute("objectclass");
	oc.add("extensibleObject");
	oc.add("top");

	myAttrs.put(oc);
	myAttrs.put("drinkType", d);
    }
    
    public Attributes getAttributes(String name) throws NamingException {
	if (! name.equals("")) {
	    throw new NameNotFoundException();
	}
	return (Attributes)myAttrs.clone();
    }

    public String toString() {
	return type;
    }
...
}

La clase Drink contiene los atributos "objectclass" y "drinkType". El atributo "objectclass" contiene dos valores: "top" y "extensibleObject".

El atributo "drinkType" se selecciona usando el string pasado a su constructor. Por ejemplo, si el ejemplar se creó usando new Drink("water"), entonces su atributo "drinkType" tendrá el valor "water".

El siguiente ejemplo crea un ejemplar de Drink y llama a Context.bind() para añadirlo al directorio.

// Create the object to be bound
Drink dr = new Drink("water");

// Perform the bind
ctx.bind("cn=favDrink", dr);

Cuando el objeto es unido, sus atributos se extraen y se almacenan en el directorio.

Cuando posteriormente se busca el objeto en el directorio, se usará su correspondiente factoría de objetos para devolver un ejemplar del objeto. La factoría de objetos está identificada por la propiedad de entono Context.OBJECT_FACTORIES cuando se creó el contexto inicial para leer el objeto. Los detalles de la conversión se describen en la lección Factorías de Objetos.

Hashtable env = ...;
// Add property so that the object factory can be found
env.put(Context.OBJECT_FACTORIES, "DrinkFactory");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

// Read back the object
Drink dr2 = (Drink) ctx.lookup("cn=favDrink");
System.out.println(dr2);

Esto produce la siguiente salida, "water", producida por Drink.toString():

# java DirObj
water

Desde la perspectiva de la aplicación que usa el JNDI, sólo está tratando con bind() y lookup(). El proveedor de servicios tiene cuidado de obtener los atributos del objeto y convertirlos desde/a el propio objeto real.

Observa que sólo podemos almacenar un objeto DirContext en el directorio si el proveedor de servicios lo soporta.


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