Previous | Next | Trail Map | Java Objects and the Directory | Object Factories

Custom Object Example

The custom object example (in the Java Objects and the Directory trail) illustrates how an instance of a user-defined class Person is stored and subsequently looked up from the directory. When the Person object's attributes are looked up from the directory, the Context.lookup() (in the API reference documentation) method turns these attributes into an instance of Person.
Person john2 = (Person) ctx.lookup("cn=John Smith");
This was made possible because of the following.
  1. The service provider being used (Sun's LDAP provider) invoked DirectoryManager.getObjectInstance() (in the API reference documentation) and supplied to the method the object (an LDAP context object) and attributes that the provider read from the directory for the entry "cn=John Smith".
  2. The client program identified the object factory (PersonObjectFactory) to use by using an application resource file that named PersonObjectFactory as one of the object factories to try.
  3. PersonObjectFactory.getObjectInstance() returned an instance of Person.
PersonObjectFactory.getObjectInstance() first verifies that the object is intended for its factory. It does this by checking that the "objectclass" attribute has a value of "person". If this verification fails, then the method returns null. Otherwise, it constructs an instance of Person by supplying the constructor values obtained from the entry's other attributes, such as the "surname" and "commonname" attributes.

The definition of PersonObjectFactory.getObjectInstance() is as follows.

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;
}

Object Factories: End of Lesson

What's next? Now you can:


Previous | Next | Trail Map | Java Objects and the Directory | Object Factories