<!--

Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved.
Portions copyright 1999 Netscape Communications Corporation. All
Rights Reserved.

The contents of this document are subject to the terms of the
Creative Commons Attribution-ShareAlike 2.5 license or any later
version (the "License"). You may not use this document except in
compliance with the License.

See the License for the specific language governing
permissions and limitations under the License. You can obtain
a copy of the License at
http://creativecommons.org/licenses/by-sa/2.5/legalcode.

-->
<chapter id="best-practices-choose"><title>Choosing a Client
SDK</title>
<highlights>
<para>This chapter discusses software development kits to help you select
the appropriate directory SDK for your particular situation.</para>
<itemizedlist>
<para>This chapter covers the following topics:</para>
<listitem><para><olink targetptr="choose-jndi">Java Naming and Directory Interface
</olink></para></listitem>
<listitem><para><olink targetptr="choose-ljdk">Directory SDK for Java</olink></para>
</listitem>
<listitem><para><olink targetptr="choose-cdsk">Directory SDK for C</olink></para>
</listitem>
<listitem><para><olink targetptr="choose-solaris-libldap">Operating System libldap Library</olink></para></listitem>
<listitem><para><olink targetptr="choose-other">Support for Other Programming
Languages</olink></para></listitem>
</itemizedlist>
</highlights>
<sect1 id="choose-jndi"><title>Java Naming and Directory Interface</title>
<indexterm>
<primary>Java Naming and Directory Interface</primary>
</indexterm><indexterm>
<primary>JNDI</primary>
<see>Java Naming and Directory Interface</see></indexterm>
<para>Java Naming and Directory Interface (JNDI) technology supports directory
access through LDAP and DSML v2 from <trademark>Java</trademark> applications,
and is part of the Java platform. With JNDI, you can build powerful, portable,
directory-enabled applications that do not depend on classes outside the Java
platform.</para>
<para>JNDI provides an abstract model that lets you access not only directories,
but also naming services in general, including DNS, RMI, COS, and file systems.</para>
<para>For information about JNDI, see <ulink
url="http://java.sun.com/products/jndi/" type="url"></ulink>. The <citetitle>JNDI
Tutorial</citetitle> contains descriptions and examples of how to use JNDI.
The tutorial is at <ulink url="http://java.sun.com/products/jndi/tutorial/"
type="url"></ulink>.</para></sect1>
<sect1 id="choose-cdsk"><title>&DirectorySDKForC;</title>
<para>&DirectorySDKForC; lets you access LDAP directories from C and C++
applications. &DirectorySDKForC; applications depend on &DirectorySDKForC; libraries,
which are available on a wide range of platforms.</para>
<para>&DirectorySDKForC; was the subject of Internet-Draft work but never
became a standard API. &DirectorySDKForC; closely follows LDAP v3, providing
support for core LDAP operations and for LDAP v3 extensions and widely used
controls. &DirectorySDKForC; offers a rich API to the C and C++ developer
familiar with the LDAP model. &cnDirectoryServer; relies on &DirectorySDKForC;.
</para>
<para>This document demonstrates how to use &DirectorySDKForC;. &DirectorySDKForC; code
is published in open source form as part of the Mozilla Directory SDK project.</para>
</sect1>
<sect1 id="choose-ljdk"><title>&DirectorySDKForJava;</title>
<para>&DirectorySDKForJava; lets you access LDAP directories from Java
applications, but it is not part of the Java platform.</para>
<para>Although not a standard API, &DirectorySDKForJava; closely follows
LDAP v3 idioms. &DirectorySDKForJava; provides a rich set of interfaces
to the Java developer familiar with the LDAP model.</para>
<para>This document demonstrates how to use &DirectorySDKForJava;. &DirectorySDKForJava; code
is published in open source form as part of the Mozilla Directory SDK project.</para>
</sect1>
<sect1 id="choose-solaris-libldap"><title>Operating System <filename>libldap</filename> Library
</title>
<indexterm>
<primary>libraries</primary>
<secondary><filename>libldap</filename></secondary>
</indexterm><indexterm>
<primary><filename>libldap</filename></primary>
</indexterm>
<para>The native LDAP library on <trademark>Solaris</trademark> systems provides
essentially the same API as &DirectorySDKForC;. Many &DirectorySDKForC; need
only be recompiled to work with <filename>libldap</filename>.</para>
<para>The LDAP library is sometimes not compatible with <filename>libldap</filename> on
many GNU/Linux distributions. Many GNU/Linux distributions provide OpenLDAP
support by default.</para></sect1>
<sect1 id="choose-other"><title>Support for Other Programming Languages</title>
<para>Support for directory access is available in a number of contexts where
you do not choose to use the C or Java languages.</para>
<para>For example, Perl has the PerLDAP module and the Net::LDAP collection
of modules. Python has the <literal>python-ldap</literal> package. PHP can
be compiled with LDAP support. Ruby has the Ruby/LDAP extension module. In
many cases, you can choose the language that fits the task and find that LDAP
support is available.</para></sect1>
</chapter>
