mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

jvergara
29.26.2008 430d063aee2d08f8226131875ff23bc7652adc41
Modify some code to create unmodifiable collections only once in the life cycle of the descriptor objects.

Extends the ConfigReaders and ControlPanelInfo so that they can be inherited by other classes.
8 files modified
281 ■■■■■ changed files
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java 27 ●●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java 69 ●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java 15 ●●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/VLVIndexDescriptor.java 7 ●●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java 2 ●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java 71 ●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java 58 ●●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigReader.java 32 ●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
@@ -28,9 +28,7 @@
package org.opends.guitools.controlpanel.datamodel;
import java.util.Collections;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import org.opends.admin.ads.ADSContext;
@@ -41,10 +39,9 @@
public class BackendDescriptor
{
  private String backendID;
  private SortedSet<BaseDNDescriptor> baseDns = new TreeSet<BaseDNDescriptor>();
  private SortedSet<IndexDescriptor> indexes = new TreeSet<IndexDescriptor>();
  private SortedSet<VLVIndexDescriptor> vlvIndexes =
    new TreeSet<VLVIndexDescriptor>();
  private SortedSet<BaseDNDescriptor> baseDns;
  private SortedSet<IndexDescriptor> indexes;
  private SortedSet<VLVIndexDescriptor> vlvIndexes;
  private int entries;
  private boolean isConfigBackend;
  private boolean isEnabled;
@@ -97,15 +94,15 @@
   * @param type the type of the backend.
   */
  public BackendDescriptor(String backendID,
      Set<BaseDNDescriptor> baseDns,
      Set<IndexDescriptor> indexes,
      Set<VLVIndexDescriptor> vlvIndexes,
      SortedSet<BaseDNDescriptor> baseDns,
      SortedSet<IndexDescriptor> indexes,
      SortedSet<VLVIndexDescriptor> vlvIndexes,
      int entries, boolean isEnabled, Type type)
  {
    this.backendID = backendID;
    this.baseDns.addAll(baseDns);
    this.indexes.addAll(indexes);
    this.vlvIndexes.addAll(vlvIndexes);
    this.baseDns = Collections.unmodifiableSortedSet(baseDns);
    this.indexes = Collections.unmodifiableSortedSet(indexes);
    this.vlvIndexes = Collections.unmodifiableSortedSet(vlvIndexes);
    this.entries = entries;
    isConfigBackend = isConfigBackend(backendID);
    this.type = type;
@@ -129,7 +126,7 @@
   */
  public SortedSet<BaseDNDescriptor> getBaseDns()
  {
    return Collections.unmodifiableSortedSet(baseDns);
    return baseDns;
  }
  /**
@@ -138,7 +135,7 @@
   */
  public SortedSet<VLVIndexDescriptor> getVLVIndexes()
  {
    return Collections.unmodifiableSortedSet(vlvIndexes);
    return vlvIndexes;
  }
@@ -148,7 +145,7 @@
   */
  public SortedSet<IndexDescriptor> getIndexes()
  {
    return Collections.unmodifiableSortedSet(indexes);
    return indexes;
  }
  /**
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
@@ -110,7 +110,11 @@
  private static ControlPanelInfo instance;
  private ControlPanelInfo()
  /**
   * Default constructor.
   *
   */
  protected ControlPanelInfo()
  {
  }
@@ -370,12 +374,55 @@
  }
  /**
   * Returns an empty new server descriptor instance.
   * @return an empty new server descriptor instance.
   */
  protected ServerDescriptor createNewServerDescriptorInstance()
  {
    return new ServerDescriptor();
  }
  /**
   * Returns a reader that will read the configuration from a file.
   * @return a reader that will read the configuration from a file.
   */
  protected ConfigFromFile createNewConfigFromFileReader()
  {
    return new ConfigFromFile();
  }
  /**
   * Returns a reader that will read the configuration from a dir context.
   * @return a reader that will read the configuration from a dir context.
   */
  protected ConfigFromDirContext createNewConfigFromDirContextReader()
  {
    return new ConfigFromDirContext();
  }
  /**
   * Updates the contents of the server descriptor with the provider reader.
   * @param reader the configuration reader.
   * @param desc the server descriptor.
   */
  protected void updateServerDescriptor(ConfigReader reader,
      ServerDescriptor desc)
  {
    desc.setExceptions(reader.getExceptions());
    desc.setAdministrativeUsers(reader.getAdministrativeUsers());
    desc.setBackends(reader.getBackends());
    desc.setConnectionHandlers(reader.getConnectionHandlers());
    desc.setAdminConnector(reader.getAdminConnector());
    desc.setSchema(reader.getSchema());
    desc.setSchemaEnabled(reader.isSchemaEnabled());
  }
  /**
   * Regenerates the last found ServerDescriptor object.
   *
   */
  public synchronized void regenerateDescriptor()
  {
    ServerDescriptor desc = new ServerDescriptor();
    ServerDescriptor desc = createNewServerDescriptorInstance();
    InitialLdapContext ctx = getDirContext();
    desc.setInstallPath(Utilities.getServerRootDirectory());
    boolean windowsServiceEnabled = false;
@@ -442,7 +489,7 @@
          userDataCtx = null;
        }
      }
      reader = new ConfigFromFile();
      reader = createNewConfigFromFileReader();
      ((ConfigFromFile)reader).readConfiguration();
      desc.setAuthenticated(false);
    }
@@ -453,12 +500,12 @@
      desc.setStatus(ServerDescriptor.ServerStatus.STARTED);
      if (ctx == null)
      {
        reader = new ConfigFromFile();
        reader = createNewConfigFromFileReader();
        ((ConfigFromFile)reader).readConfiguration();
      }
      else
      {
        reader = new ConfigFromDirContext();
        reader = createNewConfigFromDirContextReader();
        ((ConfigFromDirContext)reader).readConfiguration(ctx);
        if (reader.getExceptions().size() > 0)
        {
@@ -479,7 +526,7 @@
          if (!connectionWorks)
          {
            // Try with offline info
            reader = new ConfigFromFile();
            reader = createNewConfigFromFileReader();
            ((ConfigFromFile)reader).readConfiguration();
            try
            {
@@ -518,16 +565,10 @@
    {
      desc.setStatus(ServerDescriptor.ServerStatus.STOPPED);
      desc.setAuthenticated(false);
      reader = new ConfigFromFile();
      reader = createNewConfigFromFileReader();
      ((ConfigFromFile)reader).readConfiguration();
    }
    desc.setExceptions(reader.getExceptions());
    desc.setAdministrativeUsers(reader.getAdministrativeUsers());
    desc.setBackends(reader.getBackends());
    desc.setConnectionHandlers(reader.getConnectionHandlers());
    desc.setAdminConnector(reader.getAdminConnector());
    desc.setSchema(reader.getSchema());
    desc.setSchemaEnabled(reader.isSchemaEnabled());
    updateServerDescriptor(reader, desc);
    if ((serverDesc == null) || !serverDesc.equals(desc))
    {
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java
@@ -119,7 +119,7 @@
   */
  public Set<DN> getAdministrativeUsers()
  {
    return Collections.unmodifiableSet(administrativeUsers);
    return administrativeUsers;
  }
  /**
@@ -128,8 +128,7 @@
   */
  public void setAdministrativeUsers(Set<DN> administrativeUsers)
  {
    this.administrativeUsers.clear();
    this.administrativeUsers.addAll(administrativeUsers);
    this.administrativeUsers = Collections.unmodifiableSet(administrativeUsers);
  }
  /**
@@ -377,7 +376,7 @@
   */
  public Set<BackendDescriptor> getBackends()
  {
    return Collections.unmodifiableSet(backends);
    return backends;
  }
  /**
@@ -386,8 +385,7 @@
   */
  public void setBackends(Set<BackendDescriptor> backends)
  {
    this.backends.clear();
    this.backends.addAll(backends);
    this.backends = Collections.unmodifiableSet(backends);
  }
  /**
@@ -396,7 +394,7 @@
   */
  public Set<ConnectionHandlerDescriptor> getConnectionHandlers()
  {
    return Collections.unmodifiableSet(listeners);
    return listeners;
  }
  /**
@@ -405,8 +403,7 @@
   */
  public void setConnectionHandlers(Set<ConnectionHandlerDescriptor> listeners)
  {
    this.listeners.clear();
    this.listeners.addAll(listeners);
    this.listeners = Collections.unmodifiableSet(listeners);
  }
  /**
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/VLVIndexDescriptor.java
@@ -27,7 +27,6 @@
package org.opends.guitools.controlpanel.datamodel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -43,7 +42,7 @@
  private DN baseDN;
  private Scope scope;
  private String filter;
  private List<VLVSortOrder> sortOrder = new ArrayList<VLVSortOrder>();
  private List<VLVSortOrder> sortOrder = Collections.emptyList();
  private int maxBlockSize;
  private int hashCode;
@@ -65,7 +64,7 @@
    this.baseDN = baseDN;
    this.scope = scope;
    this.filter = filter;
    this.sortOrder.addAll(sortOrder);
    this.sortOrder = Collections.unmodifiableList(sortOrder);
    this.maxBlockSize = maxBlockSize;
    recalculateHashCode();
@@ -126,7 +125,7 @@
   */
  public List<VLVSortOrder> getSortOrder()
  {
    return Collections.unmodifiableList(sortOrder);
    return sortOrder;
  }
  /**
opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
@@ -1846,7 +1846,7 @@
   * @return the login dialog that is displayed when the method authenticate
   * is called.
   */
  GenericDialog getLoginDialog()
  protected GenericDialog getLoginDialog()
  {
    if (loginDialog == null)
    {
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -30,6 +30,8 @@
import static org.opends.messages.AdminToolMessages.*;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -79,7 +81,11 @@
   */
  public void readConfiguration(InitialLdapContext ctx)
  {
    exceptions.clear();
    List<OpenDsException> ex = new ArrayList<OpenDsException>();
    Set<ConnectionHandlerDescriptor> ls =
      new HashSet<ConnectionHandlerDescriptor>();
    Set<BackendDescriptor> bs = new HashSet<BackendDescriptor>();
    Set<DN> as = new HashSet<DN>();
    try
    {
@@ -88,7 +94,6 @@
          JNDIDirContextAdaptor.adapt(ctx));
      RootCfgClient root = mCtx.getRootConfiguration();
      listeners.clear();
      try
      {
        AdministrationConnectorCfgClient adminConnector =
@@ -97,7 +102,7 @@
      }
      catch (OpenDsException oe)
      {
        exceptions.add(oe);
        ex.add(oe);
      }
      String[] connectionHandlers = root.listConnectionHandlers();
      for (int i=0; i<connectionHandlers.length; i++)
@@ -106,17 +111,16 @@
        {
          ConnectionHandlerCfgClient connectionHandler =
            root.getConnectionHandler(connectionHandlers[i]);
          listeners.add(getConnectionHandler(connectionHandler,
          ls.add(getConnectionHandler(connectionHandler,
              connectionHandlers[i]));
        }
        catch (OpenDsException oe)
        {
          exceptions.add(oe);
          ex.add(oe);
        }
      }
      isSchemaEnabled = root.getGlobalConfiguration().isCheckSchema();
      backends.clear();
      String[] backendNames = root.listBackends();
      for (int i=0; i<backendNames.length; i++)
      {
@@ -152,7 +156,7 @@
            }
            catch (OpenDsException oe)
            {
              exceptions.add(oe);
              ex.add(oe);
            }
            indexes.add(
                new IndexDescriptor("dn2id", null, null,
@@ -180,7 +184,7 @@
            }
            catch (OpenDsException oe)
            {
              exceptions.add(oe);
              ex.add(oe);
            }
          }
          else if (backend instanceof LDIFBackendCfgClient)
@@ -221,11 +225,11 @@
          {
            baseDN.setBackend(desc);
          }
          backends.add(desc);
          bs.add(desc);
        }
        catch (OpenDsException oe)
        {
          exceptions.add(oe);
          ex.add(oe);
        }
      }
@@ -237,7 +241,7 @@
      }
      catch (OpenDsException oe)
      {
        exceptions.add(oe);
        ex.add(oe);
      }
@@ -274,7 +278,7 @@
                    protocol,
                    ConnectionHandlerDescriptor.State.ENABLED,
                    "Multimaster Synchronization");
              listeners.add(connHandler);
              ls.add(connHandler);
            }
          }
          String[] domains = sync.listReplicationDomains();
@@ -285,7 +289,7 @@
              ReplicationDomainCfgClient domain =
                sync.getReplicationDomain(domains[i]);
              DN dn = domain.getBaseDN();
              for (BackendDescriptor backend : backends)
              for (BackendDescriptor backend : bs)
              {
                for (BaseDNDescriptor baseDN : backend.getBaseDns())
                {
@@ -301,7 +305,7 @@
        }
        catch (OpenDsException oe)
        {
          exceptions.add(oe);
          ex.add(oe);
        }
      }
@@ -310,22 +314,21 @@
      {
        RootDNCfgClient rootDN = root.getRootDN();
        String[] rootUsers = rootDN.listRootDNUsers();
        administrativeUsers.clear();
        if (rootUsers != null)
        {
          for (int i=0; i < rootUsers.length; i++)
          {
            RootDNUserCfgClient rootUser = rootDN.getRootDNUser(rootUsers[i]);
            administrativeUsers.addAll(rootUser.getAlternateBindDN());
            as.addAll(rootUser.getAlternateBindDN());
          }
        }
      }
      catch (OpenDsException oe)
      {
        exceptions.add(oe);
        ex.add(oe);
      }
      updateMonitorInformation(ctx);
      updateMonitorInformation(ctx, bs, ex);
      try
      {
@@ -333,18 +336,28 @@
      }
      catch (OpenDsException oe)
      {
        exceptions.add(oe);
        ex.add(oe);
      }
    }
    catch (final Throwable t)
    {
      OnlineUpdateException ex = new OnlineUpdateException(
      OnlineUpdateException oupe = new OnlineUpdateException(
          ERR_READING_CONFIG_LDAP.get(t.toString()), t);
      exceptions.add(ex);
      ex.add(oupe);
    }
    for (OpenDsException oe : ex)
    {
      LOG.log(Level.WARNING, "Error reading configuration: "+oe, oe);
    }
    exceptions = Collections.unmodifiableList(ex);
    administrativeUsers = Collections.unmodifiableSet(as);
    listeners = Collections.unmodifiableSet(ls);
    backends = Collections.unmodifiableSet(bs);
  }
  private void updateMonitorInformation(InitialLdapContext ctx)
  private void updateMonitorInformation(InitialLdapContext ctx,
      Set<BackendDescriptor> bs,
      List<OpenDsException> ex)
  {
    // Read monitoring information: since it is computed, it is faster
    // to get everything in just one request.
@@ -391,7 +404,7 @@
        if ((dn != null)  && (replicaId != null))
        {
          for (BackendDescriptor backend : backends)
          for (BackendDescriptor backend : bs)
          {
            for (BaseDNDescriptor baseDN : backend.getBaseDns())
            {
@@ -430,7 +443,7 @@
          if ((backendID != null) && ((entryCount != null) ||
              (baseDnEntries != null)))
          {
            for (BackendDescriptor backend : backends)
            for (BackendDescriptor backend : bs)
            {
              if (backend.getBackendID().equalsIgnoreCase(backendID))
              {
@@ -475,15 +488,9 @@
    }
    catch (NamingException ne)
    {
      OnlineUpdateException ex = new OnlineUpdateException(
      OnlineUpdateException oue = new OnlineUpdateException(
          ERR_READING_CONFIG_LDAP.get(ne.getMessage().toString()), ne);
      exceptions.add(ex);
    }
    for (OpenDsException oe : exceptions)
    {
      LOG.log(Level.WARNING, "Error reading configuration: "+oe, oe);
      ex.add(oue);
    }
  }
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java
@@ -30,8 +30,11 @@
import static org.opends.messages.AdminToolMessages.*;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.logging.Level;
@@ -98,15 +101,17 @@
   */
  public void readConfiguration()
  {
    exceptions.clear();
    List<OpenDsException> ex = new ArrayList<OpenDsException>();
    Set<ConnectionHandlerDescriptor> ls =
      new HashSet<ConnectionHandlerDescriptor>();
    Set<BackendDescriptor> bs = new HashSet<BackendDescriptor>();
    Set<DN> as = new HashSet<DN>();
    try
    {
      DirectoryServer.getInstance().initializeConfiguration();
      // Get the Directory Server configuration handler and use it.ad
      RootCfg root =
        ServerManagementContext.getInstance().getRootConfiguration();
      listeners.clear();
      try
      {
        AdministrationConnectorCfg adminConnector =
@@ -115,7 +120,7 @@
      }
      catch (ConfigException ce)
      {
        exceptions.add(ce);
        ex.add(ce);
      }
      String[] connectionHandlers = root.listConnectionHandlers();
      for (int i=0; i<connectionHandlers.length; i++)
@@ -124,17 +129,16 @@
        {
          ConnectionHandlerCfg connectionHandler =
            root.getConnectionHandler(connectionHandlers[i]);
          listeners.add(getConnectionHandler(connectionHandler,
          ls.add(getConnectionHandler(connectionHandler,
              connectionHandlers[i]));
        }
        catch (OpenDsException oe)
        {
          exceptions.add(oe);
          ex.add(oe);
        }
      }
      isSchemaEnabled = root.getGlobalConfiguration().isCheckSchema();
      backends.clear();
      String[] backendNames = root.listBackends();
      for (int i=0; i<backendNames.length; i++)
      {
@@ -170,7 +174,7 @@
            }
            catch (OpenDsException oe)
            {
              exceptions.add(oe);
              ex.add(oe);
            }
            indexes.add(new IndexDescriptor("dn2id", null, null,
                new TreeSet<IndexType>(), -1));
@@ -195,7 +199,7 @@
            }
            catch (OpenDsException oe)
            {
              exceptions.add(oe);
              ex.add(oe);
            }
          }
          else if (backend instanceof LDIFBackendCfg)
@@ -234,11 +238,11 @@
            index.setBackend(desc);
          }
          backends.add(desc);
          bs.add(desc);
        }
        catch (OpenDsException oe)
        {
          exceptions.add(oe);
          ex.add(oe);
        }
      }
@@ -250,7 +254,7 @@
      }
      catch (OpenDsException oe)
      {
        exceptions.add(oe);
        ex.add(oe);
      }
@@ -287,7 +291,7 @@
                    protocol,
                    ConnectionHandlerDescriptor.State.ENABLED,
                    "Multimaster Synchronization");
              listeners.add(connHandler);
              ls.add(connHandler);
            }
          }
          String[] domains = sync.listReplicationDomains();
@@ -298,7 +302,7 @@
              ReplicationDomainCfg domain =
                sync.getReplicationDomain(domains[i]);
              DN dn = domain.getBaseDN();
              for (BackendDescriptor backend : backends)
              for (BackendDescriptor backend : bs)
              {
                for (BaseDNDescriptor baseDN : backend.getBaseDns())
                {
@@ -313,7 +317,7 @@
        }
        catch (OpenDsException oe)
        {
          exceptions.add(oe);
          ex.add(oe);
        }
      }
@@ -322,19 +326,19 @@
      {
        RootDNCfg rootDN = root.getRootDN();
        String[] rootUsers = rootDN.listRootDNUsers();
        administrativeUsers.clear();
        as.clear();
        if (rootUsers != null)
        {
          for (int i=0; i < rootUsers.length; i++)
          {
            RootDNUserCfg rootUser = rootDN.getRootDNUser(rootUsers[i]);
            administrativeUsers.addAll(rootUser.getAlternateBindDN());
            as.addAll(rootUser.getAlternateBindDN());
          }
        }
      }
      catch (OpenDsException oe)
      {
        exceptions.add(oe);
        ex.add(oe);
      }
      try
@@ -343,33 +347,37 @@
      }
      catch (OpenDsException oe)
      {
        exceptions.add(oe);
        ex.add(oe);
      }
    }
    catch (OpenDsException oe)
    {
      exceptions.add(oe);
      ex.add(oe);
    }
    catch (final Throwable t)
    {
      LOG.log(Level.WARNING, "Error reading configuration: "+t, t);
      OfflineUpdateException ex = new OfflineUpdateException(
      OfflineUpdateException oue = new OfflineUpdateException(
          ERR_READING_CONFIG_LDAP.get(t.getMessage().toString()), t);
      exceptions.add(ex);
      ex.add(oue);
    }
    if (exceptions.size() > 0)
    if (ex.size() > 0)
    {
      if (environmentSettingException != null)
      {
        exceptions.add(0, environmentSettingException);
        ex.add(0, environmentSettingException);
      }
    }
    for (OpenDsException oe : exceptions)
    for (OpenDsException oe : ex)
    {
      LOG.log(Level.WARNING, "Error reading configuration: "+oe, oe);
    }
    exceptions = Collections.unmodifiableList(ex);
    administrativeUsers = Collections.unmodifiableSet(as);
    listeners = Collections.unmodifiableSet(ls);
    backends = Collections.unmodifiableSet(bs);
  }
  private ConnectionHandlerDescriptor getConnectionHandler(
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigReader.java
@@ -32,7 +32,6 @@
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -102,8 +101,7 @@
  /**
   * The exceptions that occurred reading the configuration.
   */
  protected ArrayList<OpenDsException> exceptions =
    new ArrayList<OpenDsException>();
  protected List<OpenDsException> exceptions = Collections.emptyList();
  /**
   * Whether the configuration has already been read or not.
@@ -113,8 +111,7 @@
  /**
   * The set of connection listeners.
   */
  protected HashSet<ConnectionHandlerDescriptor> listeners =
    new HashSet<ConnectionHandlerDescriptor>();
  protected Set<ConnectionHandlerDescriptor> listeners = Collections.emptySet();
  /**
   * The administration connector.
@@ -124,13 +121,12 @@
  /**
   * The set of backend descriptors.
   */
  protected HashSet<BackendDescriptor> backends =
    new HashSet<BackendDescriptor>();
  protected Set<BackendDescriptor> backends = Collections.emptySet();
  /**
   * The set of administrative users.
   */
  protected HashSet<DN> administrativeUsers = new HashSet<DN>();
  protected Set<DN> administrativeUsers = Collections.emptySet();
  /**
   * The replication serve port (-1 if the replication server port is not
@@ -159,30 +155,33 @@
  protected Schema schema;
  /**
   * Returns the Administrative User DNs found in the config.ldif.
   * Returns the Administrative User DNs found in the config.ldif.  The set
   * must be unmodifiable (the inheriting classes must take care of this).
   * @return the Administrative User DNs found in the config.ldif.
   */
  public Set<DN> getAdministrativeUsers()
  {
    return Collections.unmodifiableSet(administrativeUsers);
    return administrativeUsers;
  }
  /**
   * Returns the backend descriptors found in the config.ldif.
   * Returns the backend descriptors found in the config.ldif.  The set
   * must be unmodifiable (the inheriting classes must take care of this).
   * @return the backend descriptors found in the config.ldif.
   */
  public Set<BackendDescriptor> getBackends()
  {
    return Collections.unmodifiableSet(backends);
    return backends;
  }
  /**
   * Returns the listener descriptors found in the config.ldif.
   * Returns the listener descriptors found in the config.ldif.  The set
   * must be unmodifiable (the inheriting classes must take care of this).
   * @return the listeners descriptors found in the config.ldif.
   */
  public Set<ConnectionHandlerDescriptor> getConnectionHandlers()
  {
    return Collections.unmodifiableSet(listeners);
    return listeners;
  }
  /**
@@ -196,13 +195,14 @@
  /**
   * Returns the list of exceptions that were encountered reading the
   * configuration.
   * configuration.  The list must be unmodifiable (the inheriting classes must
   * take care of this).
   * @return the list of exceptions that were encountered reading the
   * configuration.
   */
  public List<OpenDsException> getExceptions()
  {
    return Collections.unmodifiableList(exceptions);
    return exceptions;
  }
  /**