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

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO