El ejemplo atributos ilustra c�mo un ejemplar de la clase DirContext, Drink es almacenado y recuperado desde el directorio. Cuando se buscan los atributos del objeto Drink desde el directorio, Context.lookup() convierte estos atributos en un ejemplar de Drink.
Drink d2 = (Drink) ctx.lookup("cn=favDrink");
Esto sucede por.
- El proveedor de servicio usado (el LDAP de Sun) invoca a DirectoryManager.getObjectInstance() y suministra al m�todo los datos (un DirContext) que el proveedor lee desde el directorio de la entrada "cn=favDrink".
- El programa cliente identifica la
factor�a de objetos (DrinkFactory)
para usarla cuando crea el contexto inicial.
// Add property so that object factory can be found env.put(Context.OBJECT_FACTORIES, "DrinkFactory");
- DrinkFactory.getObjectInstance() devuelve un ejemplar de Drink.
DrinkFactory.getObjectInstance() primero verifica que el objeto est� pensado para su factor�a. Hace esto chequeando que el objeto es un DirContext y que contiene un atributo "drinkType". Si esta verificaci�n falla, el m�todo devuelve null. De otra forma, obtiene el valor del atributo "drinkType" (en este caso, "water") y lo usa para crear un ejemplar de Drink.
Aqu� tenemos la definici�n de DrinkFactory.getObjectInstance().
public Object getObjectInstance(Object obj, Name name, Context ctx,
Hashtable env, Attributes inAttrs) throws Exception {
if (obj instanceof DirContext) {
try {
Attribute dt;
if (inAttrs != null && (dt=inAttrs.get("drinktype")) != null) {
String drinkType = (String)dt.get();
return new Drink(drinkType);
}
} catch (NamingException e) {
// Debug
System.err.println(e);
e.printStackTrace();
}
}
// Return null to indicate that other factories should be tried
return null;
}