h2. Java and LDAP Most developers will, at some point, face the tricky task to communicate with a *LDAP* server. *LDAP* seems to be a very simple technology, but when you get deep into it, you realize that many aspects are not well known, and not so easy to deal with. Java is most certainly the number one language used in the enterprise, for around 10 years now. Some even call it the new *Cobol* ! Those two facts make it necessary to be able to communicate with a *LDAP* server in *Java*. This is whereƦ a convenient *API* is useful, and this is why we decided to provide this *API*. Of course, there are alternatives, like *JNDI*. We truly believe that those alternative are not helping users to cope with the complexity of *LDAP*, at least they are not giving a hand to users. For instance, *JNDI* semantics are far away from *LDAP semantics. Let's see how different this is: * _Bind_ : used in *LDAP* to authenticate a user, and to create an entry in *JNDI*. * _Unbind_ : close the *LDAP* session in *LDAP*, delete an entry in *JNDI*. * _Compare_ : this *LDAP* operation is mapped to a _Search_ in *JNDI*. * Various properties have to be set in *JNDI* in order to connect or tweak the _Search_ operation, which is not convenient. * _Attributes_ is case sensitive by default in *JNDI*, and they are not schema-aware. * _Name_ in *JNDI* are not able to do a valid comparison in *JNDI*. * _NamingEnumeration_ have to be explicitly closed in *JNDI*, as they are not closed when you disconnect, leading to some resource leaks. Some of these problems are also true for the existing *LDAP API*'s. All in all, writing applications including some *LDAP* operations in *Java* is just a painful task for most developers. Our objective is to provide a better *API*, that will help them be more efficient with their *LDAP* interaction.