Persistent Search

Request that the server keep a search operation open and send changes to the client. See A Simple LDAP Change Notification Mechanism.

Using the Persistent Search Client

Connection conn = DefaultConnectionFactory.getConnection("ldap://directory.ldaptive.org");
try {
conn.open();
// only return changed entries, return the entry change control
PersistentSearchClient client = new PersistentSearchClient(conn, EnumSet.allOf(PersistentSearchChangeType.class), true, true);
SearchRequest request = SearchRequest.newObjectScopeSearchRequest("dc=ldaptive,dc=org");
BlockingQueue<PersistentSearchItem> results = client.execute(request);
while (true) {
PersistentSearchItem item = results.take(); // blocks until result is received
if (item.isEntry()) {
EntryChangeNotificationControl nc = item.getEntry().getEntryChangeNotificationControl();
LdapEntry entry = item.getEntry().getSearchEntry();
// process this entry with the entry change control data
} else if (item.isResponse()) {
// response received
break;
} else if (item.isAsyncRequest()) {
// request has begun
AsyncRequest ar = item.getAsyncRequest();
} else if (item.isException()) {
// an error has occurred
throw item.getException();
}
}
} finally {
conn.close();
}

Provider Support

JNDI JLDAP Apache LDAP UnboundID OpenDJ
Functionality exists in the provider API and has been confirmed
Functionality does not exist in the provider API
Functionality exists in the provider API, but did not work in our test environment
? Functionality exists in the provider API, but has not been integrated into the ldaptive provider