From fdb3fa313407639240f75ec566865cea25bc039b Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 11 Jul 2016 12:01:16 +0000
Subject: [PATCH] Partial OPENDJ-2625 Convert all code that uses JNDI to use the SDK instead

---
 opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java |   77 +++++++++++++-------------------------
 1 files changed, 27 insertions(+), 50 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java
index 9de7170..57acac7 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java
@@ -16,6 +16,7 @@
  */
 package org.opends.admin.ads;
 
+import java.io.IOException;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
@@ -25,19 +26,19 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.naming.NameNotFoundException;
-import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
 import javax.naming.ldap.LdapName;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.EntryNotFoundException;
+import org.forgerock.opendj.ldap.requests.Requests;
+import org.forgerock.opendj.ldap.requests.SearchRequest;
+import org.forgerock.opendj.ldap.responses.SearchResultEntry;
+import org.forgerock.opendj.ldif.ConnectionEntryReader;
 import org.opends.admin.ads.ADSContext.ServerProperty;
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.admin.ads.util.PreferredConnection;
 import org.opends.admin.ads.util.ServerLoader;
@@ -45,6 +46,8 @@
 
 import static com.forgerock.opendj.cli.Utils.*;
 
+import static org.forgerock.opendj.ldap.SearchScope.*;
+import static org.opends.admin.ads.util.ConnectionUtils.*;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -195,10 +198,10 @@
           {
             updateReplicas(server, candidateReplicas, updatedReplicas);
           }
-          catch (NamingException ne)
+          catch (NamingException | IOException e)
           {
             server.setLastException(new TopologyCacheException(
-                TopologyCacheException.Type.GENERIC_READING_SERVER, ne));
+                TopologyCacheException.Type.GENERIC_READING_SERVER, e));
           }
           replicasToUpdate.removeAll(updatedReplicas);
         }
@@ -430,33 +433,23 @@
   private void updateReplicas(ServerDescriptor replicationServer,
                               Collection<ReplicaDescriptor> candidateReplicas,
                               Collection<ReplicaDescriptor> updatedReplicas)
-      throws NamingException
+      throws NamingException, IOException
   {
-    SearchControls ctls = new SearchControls();
-    ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-    ctls.setReturningAttributes(
-        new String[]
-        {
-          "approx-older-change-not-synchronized-millis", "missing-changes",
-          "domain-name", "server-id"
-        });
-
-    NamingEnumeration<SearchResult> monitorEntries = null;
     ServerLoader loader = getServerLoader(replicationServer.getAdsProperties());
-    try (ConnectionWrapper conn = loader.createConnectionWrapper())
+    SearchRequest request=Requests.newSearchRequest("cn=monitor", WHOLE_SUBTREE, "(missing-changes=*)",
+        "approx-older-change-not-synchronized-millis", "missing-changes", "domain-name", "server-id");
+    try (ConnectionWrapper conn = loader.createConnectionWrapper();
+        ConnectionEntryReader entryReader = conn.getConnection().search(request))
     {
-      monitorEntries = conn.getLdapContext().search(
-          new LdapName("cn=monitor"), "(missing-changes=*)", ctls);
-
-      while (monitorEntries.hasMore())
+      while (entryReader.hasNext())
       {
-        SearchResult sr = monitorEntries.next();
+        SearchResultEntry sr = entryReader.readEntry();
 
-        String dn = ConnectionUtils.getFirstValue(sr, "domain-name");
+        String dn = firstValueAsString(sr, "domain-name");
         int replicaId = -1;
         try
         {
-          String sid = ConnectionUtils.getFirstValue(sr, "server-id");
+          Integer sid = asInteger(sr, "server-id");
           if (sid == null)
           {
             // This is not a replica, but a replication server. Skip it
@@ -466,8 +459,7 @@
         }
         catch (Throwable t)
         {
-          logger.warn(LocalizableMessage.raw("Unexpected error reading replica ID: " + t,
-              t));
+          logger.warn(LocalizableMessage.raw("Unexpected error reading replica ID: " + t, t));
         }
 
         for (ReplicaDescriptor replica : candidateReplicas)
@@ -484,34 +476,19 @@
         }
       }
     }
-    catch (NameNotFoundException nse)
+    catch (EntryNotFoundException e)
     {
     }
-    finally
-    {
-      if (monitorEntries != null)
-      {
-        try
-        {
-          monitorEntries.close();
-        }
-        catch (Throwable t)
-        {
-          logger.warn(LocalizableMessage.raw(
-              "Unexpected error closing enumeration on monitor entries" + t, t));
-        }
-      }
-    }
   }
 
-  private void setMissingChanges(ReplicaDescriptor replica, SearchResult sr) throws NamingException
+  private void setMissingChanges(ReplicaDescriptor replica, SearchResultEntry sr) throws NamingException
   {
-    String s = ConnectionUtils.getFirstValue(sr, "missing-changes");
-    if (s != null)
+    Integer value = asInteger(sr, "missing-changes");
+    if (value != null)
     {
       try
       {
-        replica.setMissingChanges(Integer.valueOf(s));
+        replica.setMissingChanges(value);
       }
       catch (Throwable t)
       {
@@ -521,9 +498,9 @@
     }
   }
 
-  private void setAgeOfOldestMissingChange(ReplicaDescriptor replica, SearchResult sr) throws NamingException
+  private void setAgeOfOldestMissingChange(ReplicaDescriptor replica, SearchResultEntry sr) throws NamingException
   {
-    String s = ConnectionUtils.getFirstValue(sr, "approx-older-change-not-synchronized-millis");
+    String s = firstValueAsString(sr, "approx-older-change-not-synchronized-millis");
     if (s != null)
     {
       try

--
Gitblit v1.10.0