Using ActiveDirectoryLdapDnsProvider

Attention
Contrary to previous statements, this library must reside in the system classpath for this provider to work properly and requires at least Java 8u272, Java 11.0.9, or Java 12+. It is a multi-release JAR because of changing interfaces between Java releases.

Usage Examples

No configuration is necessary, it will be autodiscovered through Java's ServiceLoader. For the ease of use for these examples use my DirContextSource, but you can go with plain JNDI if you prefer.

With Java

In few lines you have a usable DirContextSource:

import net.sf.michaelo.dirctxsrc.DirContextSource;
import javax.naming.directory.DirContext;
[…]
DirContextSource.Builder builder = new DirContextSource.Builder("ldap://domain-name");
// Set the Active Directory site
builder.additionalProperty("net.sf.michaelo.activedirectory.site", "debln-01");
// Make it fail fast
builder.additionalProperty("dns.com.sun.jndi.dns.timeout.initial", "200")
       .additionalProperty("dns.com.sun.jndi.dns.timeout.retries", "2");
DirContextSource contextSource = builder.build();
// try and catch block omitted for the sake of brevity,
// handle NamingException appropriately
DirContext context = contextSource.getDirContext();
// Perform operations
context.close();
[…]

With a Servlet Container (Apache Tomcat)

Navigate in your server.xml to /Server/GlobalNamingResources and add the following element:

[…]
<GlobalNamingResources>
  <!-- Add this -->
  <Resource name="ldap/name" type="net.sf.michaelo.dirctxsrc.DirContextSource"
    factory="net.sf.michaelo.dirctxsrc.DirContextSourceFactory"
    urls="ldap://domain-name"
    additionalProperties="net.sf.michaelo.activedirectory.site=debln-01;dns.com.sun.jndi.dns.timeout.initial=200;dns.com.sun.jndi.dns.timeout.retries=2" />
</GlobalNamingResources>
[…]

This resource still needs to be linked to your application. Open or create your app's context.xml and add:

<Context>
[…]
  <!-- Add this -->
  <ResourceLink global="ldap/name" name="ldap/localName"
    type="net.sf.michaelo.dirctxsrc.DirContextSource" />
[…]
</Context>

Now you have successfully linked a global resource to your webapp. It is now ready to use.