1.3 - The Apache LDAP API rational

Once we start to think about creating a new LDAP API, the first thing that comes to mind is that it could be a duplication of effort : there are already many libraries offering almost everything needed to write LDAP code. Some of them are :

  • JNDI : the default JDK API
  • Netscape LdapSdk
  • OpenLDAP JLdap

So what makes the development of a new LDAP JAVA API a valid effort, and not another version of NIH syndrom ?

There are many reasons why we decided to start to work on such an API, and we will expose them in this chapter.

history

The Apache Directory Server project was first built on top of JNDI, but many of the internal LDAP structure were developed internally, just because JNDI was not designed specifically for LDAP, so it was not convenient for us to use those structure. Step by step, all of the LDAP objects (Attribute, Entry, DN, ...) were implemented again.

At some point, we needed to communicate with another LDAP server without having to go through JNDI, so we developed our own LdapConnection class. This was the last step toward a full Java API.

Strange enough, at the very same time in 2007, the Sun people working on OpenDS contacted us to know if we would agree to work on what would have become the next version of JNDI (Resurrecting The Java LDAP Centric API. Sadly, this effort soon staled, as it seemed that JNDI2 was not anymore an urgency for Sun. We decided to go on but the pace was slow.

We started again to work on this API with the OpenDS team in 2009, and did a presentation during the 2009 LdapCon (Towards a common LDAP API for the Java Platform). The story repeated itself with Oracle buying Sun in 2010, after months of valuable collaboration with Sun.

At least, we get some kind of convergence in many aspects of the API. We agreed on some of the key features the new LDAP API should offer :

  • A complete coverage of the LDAP protocol
  • A schema aware API
  • An easy to use API
  • An API taking advantage of the new Java construction (generics, ellipsis, NIO)

Result

The newly defined API fulfill all those aspects.

We also wanted to make this API available for the masses. The Apache Software Foundation value quality and community over code, which means we think that the code is the result of a collaborative work, our users being a part of this collaboration. Every bug a user find, it's an opportunity to provide a better version of the API.

At he end, we are proud to deliver an API which is used in the Apache Directory Server, but also in the Ldap Browser.