El ejemplo referencia ilustra c�mo un ejemplar de una clase Referenceable, Fruit es almacenado y recuperado desde el directorio. Cuando se busca una referencia en el directorio, Context.lookup() convierte los datos le�dos del directorio en un ejemplar de Fruit.
Fruit f2 = (Fruit) ctx.lookup("cn=favorite");
Esto sucede debido a lo siguiente.
- El proveedor de servicio que se est� usando (LDAP de Sun) llam� a DirectoryManager.getObjectInstance() y suministra al m�todo los datos (una referencia) que el proveedor lee desde el directorio para la entrada� "cn=favorite".
- La referencia identifica FruitFactory como el nombre de la clase de la factor�a de objetos.
- FruitFactory.getObjectInstance() devuelve un ejemplar de Fruit.
FruitFactory.getObjectInstance() es simple. Primero verifica que puede hacer algo con los datos. Es decir, chequea que el dato es una Reference que contiene una direcci�n del tipo "fruit" y que la referencia es para objetos de la clase Fruit. Si esta verificaci�n falla, la factor�a devuelve null para que otras factor�as, si las hay, puedan intentarlo. Si tiene �xito, se usa el contenido de la direcci�n (en este caso "orange") para crear un nuevo ejemplar de Fruit, que luego es devuelto.
Aqu� tenemos la definici�n de FruitFactory.getObjectInstance().
public Object getObjectInstance(Object obj, Name name, Context ctx,
Hashtable env) throws Exception {
if (obj instanceof Reference) {
Reference ref = (Reference)obj;
if (ref.getClassName().equals(Fruit.class.getClassName())) {
RefAddr addr = ref.get("fruit");
if (addr != null) {
return new Fruit((String)addr.getContent());
}
}
}
return null;
}