El ejemplo de objeto personalizado ilustra c�mo un ejemplar de una clase definida por el usuario, Person es almacenado y recuperado desde el directorio. Cuando se buscan los atributos de un objeto Person desde el directorio, el m�todo Context.lookup() convierte estos atributos en un ejemplar de Person.
Person john2 = (Person) ctx.lookup("cn=John Smith");
Esto es posible porque.
- El proveedor de servicio utilizado (LDAP de Sun) llama a DirectoryManager.getObjectInstance() y suministra al m�todo el objeto (un objeto contexto LDAP) y los atributos que el proveedor lee desde el directorio de la entrada "cn=John Smith".
- El programa cliente identifica la factor�a de objetos (PersonObjectFactory) usando un fichero de recursos de aplicaci�n llamado PersonObjectFactory como una de las factor�as de objetos a probar.
- PersonObjectFactory.getObjectInstance() devuelve un ejemplar de Person.
PersonObjectFactory.getObjectInstance() primero verifica que el objeto est� pensado para su factor�a. Lo hace chequeando que el atributo "objectclass" tiene un valor de "person". Si esta verificaci�n falla, el m�todo devuelve null. De otro modo, construye un ejemplar de Person suministrandole al constructor los valores obtenidos de las otras entradas de atriutos, como "surname" y "commonname".
Aqu� tenemos la definici�n de PersonObjectFactory.getObjectInstance().
public Object getObjectInstance(
Object obj, Name name, Context ctx, Hashtable env, Attributes attrs)
throws Exception {
// Only interested in Attributes with "person" objectclass
// System.out.println("object factory: " + attrs);
Attribute oc = (attrs != null ? attrs.get("objectclass") : null);
if (oc != null && oc.contains("person")) {
Attribute attr;
String passwd = null;
// Extract the password
attr = attrs.get("userPassword");
if (attr != null) {
passwd = new String((byte[])attr.get());
}
Person per = new Person(
(String)attrs.get("sn").get(),
(String)attrs.get("cn").get(),
passwd,
(attr=attrs.get("telephoneNumber")) != null ? (String)attr.get() : null,
(attr=attrs.get("seealso")) != null ? (String)attr.get() : null,
(attr=attrs.get("description")) != null ? (String)attr.get() : null);
return per;
}
return null;
}