Java Reference
In-Depth Information
contact.setFirstName(
getAttributeValue(attributes, "givenName"));
contact.setMail(getAttributeValue(attributes, "mail"));
contact.setUserId(
getAttributeValue(attributes, "uid"));
return contact;
}
private String getAttributeValue(
Attributes attributes, String attrID
) {
Attribute attribute = attributes.get(attrID);
try {
return (null==attribute?"":(String)attribute.get());
} catch (NamingException e) {
throw new DaoException(e);
}
}
The
Attributes
interface is part of the
JNDI
package that comes with Sun's
JDK
,
and is implemented by the
BasicAttributes
class, which is also part of that pack-
age. The
Contact
class is our bean that we want to map to our
LDAP
directory.
Finally, the
getAttributeValue()
method is a helper method that simplifies the
mapping process by handling null values and turning
JNDI
-specific exceptions
into
DaoException
s.
Just as with other
DAO
implementations, we need to make some decisions
about where and how we will get to our database. If you are working with a
J2EE
container that can provide you with a
JNDI
context, you might be tempted to use
it. If it meets your needs, there is no reason not to. However, there are some trade-
offs when doing this. Although this approach will simplify the code, it will make
testing more difficult. Depending on your requirements, this may be an accept-
able sacrifice.
In this example, we wanted to make things as testable as possible, so we used
constructor-based injection to configure the
DAO
class at runtime. Because the
i
BATIS
DAO
does not allow this, we also created a default constructor that uses the
two values we wanted as the defaults. In section 11.3, we look at using the Spring
framework for our
DAO
layer, which allows us to do this via configuration files, but
for now, let's use the default constructor method.
The second constructor takes two parameters for the two settings I hardcoded
into the default constructor. One of those was the determination of the
LDAP
DN
attribute for our contact bean. This attribute is analogous to the primary key of a








