From 476ab6a2f8e1c5f60321626a27f7d82a008243af Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Fri, 17 Aug 2007 00:24:18 +0000
Subject: [PATCH] Provide a new EmbeddedUtils.initializeForClientUse() method that can be used to initialize the proper internal structures so that OpenDS code can be more easily used for client-side applications that could benefit from the code but don't want or need to be running in the same JVM as the server.

---
 opends/src/server/org/opends/server/core/DirectoryServer.java |  181 ++++++++++++++++++++++++---------------------
 1 files changed, 97 insertions(+), 84 deletions(-)

diff --git a/opends/src/server/org/opends/server/core/DirectoryServer.java b/opends/src/server/org/opends/server/core/DirectoryServer.java
index dd50131..f844056 100644
--- a/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -347,6 +347,9 @@
   // Indicates whether the server has been bootstrapped.
   private boolean isBootstrapped;
 
+  // Indicates whether the server has been bootstrapped for client use.
+  private boolean isClientBootstrapped;
+
   // Indicates whether the server is currently online.
   private boolean isRunning;
 
@@ -723,6 +726,7 @@
   {
     environmentConfig        = config;
     isBootstrapped           = false;
+    isClientBootstrapped     = false;
     isRunning                = false;
     shuttingDown             = false;
     lockdownMode             = false;
@@ -825,94 +829,103 @@
    */
   public static void bootstrapClient()
   {
-    // Set default values for variables that may be needed during schema
-    // processing.
-    directoryServer.syntaxEnforcementPolicy = AcceptRejectWarn.REJECT;
+    synchronized (directoryServer)
+    {
+      if (directoryServer.isClientBootstrapped)
+      {
+        return;
+      }
 
 
-    // Create the server schema and initialize and register a minimal set of
-    // matching rules and attribute syntaxes.
-    directoryServer.schema = new Schema();
-    directoryServer.bootstrapMatchingRules();
-    directoryServer.bootstrapAttributeSyntaxes();
+      // Set default values for variables that may be needed during schema
+      // processing.
+      directoryServer.syntaxEnforcementPolicy = AcceptRejectWarn.REJECT;
 
 
-    // Perform any additional initialization that might be necessary before
-    // loading the configuration.
-    directoryServer.alertHandlers = new CopyOnWriteArrayList<AlertHandler>();
-    directoryServer.passwordStorageSchemes =
-         new ConcurrentHashMap<String,PasswordStorageScheme>();
-    directoryServer.passwordGenerators =
-         new ConcurrentHashMap<DN,PasswordGenerator>();
-    directoryServer.authPasswordStorageSchemes =
-         new ConcurrentHashMap<String,PasswordStorageScheme>();
-    directoryServer.passwordValidators =
-         new ConcurrentHashMap<DN,
-              PasswordValidator<? extends PasswordValidatorCfg>>();
-    directoryServer.accountStatusNotificationHandlers =
-         new ConcurrentHashMap<DN,AccountStatusNotificationHandler>();
-    directoryServer.rootDNs = new CopyOnWriteArraySet<DN>();
-    directoryServer.alternateRootBindDNs = new ConcurrentHashMap<DN,DN>();
-    directoryServer.keyManagerProviders =
-         new ConcurrentHashMap<DN,KeyManagerProvider>();
-    directoryServer.trustManagerProviders =
-         new ConcurrentHashMap<DN,TrustManagerProvider>();
-    directoryServer.rotationPolicies =
-         new ConcurrentHashMap<DN, RotationPolicy>();
-    directoryServer.retentionPolicies =
-         new ConcurrentHashMap<DN, RetentionPolicy>();
-    directoryServer.certificateMappers =
-         new ConcurrentHashMap<DN,CertificateMapper>();
-    directoryServer.passwordPolicies =
-         new ConcurrentHashMap<DN,PasswordPolicyConfig>();
-    directoryServer.defaultPasswordPolicyDN = null;
-    directoryServer.defaultPasswordPolicyConfig = null;
-    directoryServer.monitorProviders =
-         new ConcurrentHashMap<String,
-                               MonitorProvider<? extends MonitorProviderCfg>>();
-    directoryServer.backends = new TreeMap<String,Backend>();
-    directoryServer.offlineBackendsStateIDs =
-         new ConcurrentHashMap<String,Long>();
-    directoryServer.backendInitializationListeners =
-         new CopyOnWriteArraySet<BackendInitializationListener>();
-    directoryServer.baseDNs = new TreeMap<DN,Backend>();
-    directoryServer.publicNamingContexts = new TreeMap<DN,Backend>();
-    directoryServer.privateNamingContexts = new TreeMap<DN,Backend>();
-    directoryServer.changeNotificationListeners =
-         new CopyOnWriteArrayList<ChangeNotificationListener>();
-    directoryServer.persistentSearches =
-         new CopyOnWriteArrayList<PersistentSearch>();
-    directoryServer.shutdownListeners =
-         new CopyOnWriteArrayList<ServerShutdownListener>();
-    directoryServer.synchronizationProviders =
-         new CopyOnWriteArrayList<SynchronizationProvider
-                                 <SynchronizationProviderCfg>>();
-    directoryServer.supportedControls = new TreeSet<String>();
-    directoryServer.supportedFeatures = new TreeSet<String>();
-    directoryServer.virtualAttributes =
-         new CopyOnWriteArrayList<VirtualAttributeRule>();
-    directoryServer.connectionHandlers =
-         new CopyOnWriteArrayList<ConnectionHandler>();
-    directoryServer.identityMappers =
-         new ConcurrentHashMap<DN,IdentityMapper>();
-    directoryServer.extendedOperationHandlers =
-         new ConcurrentHashMap<String,ExtendedOperationHandler>();
-    directoryServer.saslMechanismHandlers =
-         new ConcurrentHashMap<String,SASLMechanismHandler>();
-    directoryServer.authenticatedUsers = new AuthenticatedUsers();
-    directoryServer.offlineSchemaChanges = new LinkedList<Modification>();
-    directoryServer.backupTaskListeners =
-         new CopyOnWriteArrayList<BackupTaskListener>();
-    directoryServer.restoreTaskListeners =
-         new CopyOnWriteArrayList<RestoreTaskListener>();
-    directoryServer.exportTaskListeners =
-         new CopyOnWriteArrayList<ExportTaskListener>();
-    directoryServer.importTaskListeners =
-         new CopyOnWriteArrayList<ImportTaskListener>();
-    directoryServer.allowedTasks = new LinkedHashSet<String>(0);
-    directoryServer.disabledPrivileges = new LinkedHashSet<Privilege>(0);
-    directoryServer.returnBindErrorMessages = false;
-    directoryServer.idleTimeLimit = 0L;
+      // Create the server schema and initialize and register a minimal set of
+      // matching rules and attribute syntaxes.
+      directoryServer.schema = new Schema();
+      directoryServer.bootstrapMatchingRules();
+      directoryServer.bootstrapAttributeSyntaxes();
+
+
+      // Perform any additional initialization that might be necessary before
+      // loading the configuration.
+      directoryServer.alertHandlers = new CopyOnWriteArrayList<AlertHandler>();
+      directoryServer.passwordStorageSchemes =
+           new ConcurrentHashMap<String,PasswordStorageScheme>();
+      directoryServer.passwordGenerators =
+           new ConcurrentHashMap<DN,PasswordGenerator>();
+      directoryServer.authPasswordStorageSchemes =
+           new ConcurrentHashMap<String,PasswordStorageScheme>();
+      directoryServer.passwordValidators =
+           new ConcurrentHashMap<DN,
+                PasswordValidator<? extends PasswordValidatorCfg>>();
+      directoryServer.accountStatusNotificationHandlers =
+           new ConcurrentHashMap<DN,AccountStatusNotificationHandler>();
+      directoryServer.rootDNs = new CopyOnWriteArraySet<DN>();
+      directoryServer.alternateRootBindDNs = new ConcurrentHashMap<DN,DN>();
+      directoryServer.keyManagerProviders =
+           new ConcurrentHashMap<DN,KeyManagerProvider>();
+      directoryServer.trustManagerProviders =
+           new ConcurrentHashMap<DN,TrustManagerProvider>();
+      directoryServer.rotationPolicies =
+           new ConcurrentHashMap<DN, RotationPolicy>();
+      directoryServer.retentionPolicies =
+           new ConcurrentHashMap<DN, RetentionPolicy>();
+      directoryServer.certificateMappers =
+           new ConcurrentHashMap<DN,CertificateMapper>();
+      directoryServer.passwordPolicies =
+           new ConcurrentHashMap<DN,PasswordPolicyConfig>();
+      directoryServer.defaultPasswordPolicyDN = null;
+      directoryServer.defaultPasswordPolicyConfig = null;
+      directoryServer.monitorProviders =
+           new ConcurrentHashMap<String,
+                    MonitorProvider<? extends MonitorProviderCfg>>();
+      directoryServer.backends = new TreeMap<String,Backend>();
+      directoryServer.offlineBackendsStateIDs =
+           new ConcurrentHashMap<String,Long>();
+      directoryServer.backendInitializationListeners =
+           new CopyOnWriteArraySet<BackendInitializationListener>();
+      directoryServer.baseDNs = new TreeMap<DN,Backend>();
+      directoryServer.publicNamingContexts = new TreeMap<DN,Backend>();
+      directoryServer.privateNamingContexts = new TreeMap<DN,Backend>();
+      directoryServer.changeNotificationListeners =
+           new CopyOnWriteArrayList<ChangeNotificationListener>();
+      directoryServer.persistentSearches =
+           new CopyOnWriteArrayList<PersistentSearch>();
+      directoryServer.shutdownListeners =
+           new CopyOnWriteArrayList<ServerShutdownListener>();
+      directoryServer.synchronizationProviders =
+           new CopyOnWriteArrayList<SynchronizationProvider
+                                   <SynchronizationProviderCfg>>();
+      directoryServer.supportedControls = new TreeSet<String>();
+      directoryServer.supportedFeatures = new TreeSet<String>();
+      directoryServer.virtualAttributes =
+           new CopyOnWriteArrayList<VirtualAttributeRule>();
+      directoryServer.connectionHandlers =
+           new CopyOnWriteArrayList<ConnectionHandler>();
+      directoryServer.identityMappers =
+           new ConcurrentHashMap<DN,IdentityMapper>();
+      directoryServer.extendedOperationHandlers =
+           new ConcurrentHashMap<String,ExtendedOperationHandler>();
+      directoryServer.saslMechanismHandlers =
+           new ConcurrentHashMap<String,SASLMechanismHandler>();
+      directoryServer.authenticatedUsers = new AuthenticatedUsers();
+      directoryServer.offlineSchemaChanges = new LinkedList<Modification>();
+      directoryServer.backupTaskListeners =
+           new CopyOnWriteArrayList<BackupTaskListener>();
+      directoryServer.restoreTaskListeners =
+           new CopyOnWriteArrayList<RestoreTaskListener>();
+      directoryServer.exportTaskListeners =
+           new CopyOnWriteArrayList<ExportTaskListener>();
+      directoryServer.importTaskListeners =
+           new CopyOnWriteArrayList<ImportTaskListener>();
+      directoryServer.allowedTasks = new LinkedHashSet<String>(0);
+      directoryServer.disabledPrivileges = new LinkedHashSet<Privilege>(0);
+      directoryServer.returnBindErrorMessages = false;
+      directoryServer.idleTimeLimit = 0L;
+    }
   }
 
 

--
Gitblit v1.10.0