From e877c67853fd9abae649ef36319da968b8523257 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 12 Feb 2016 17:34:26 +0000
Subject: [PATCH] Always call Schema.setDefaultSchema() when schemaNG changes

---
 opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java |   11 +++++++----
 opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java         |    4 ++++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java b/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
index 0cb1ed3..844d0e5 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
@@ -605,7 +605,7 @@
   private SASLConfigManager saslConfigManager;
 
   /** The schema for the Directory Server. */
-  private Schema schema;
+  private volatile Schema schema;
 
   /** The schema configuration manager for the Directory Server. */
   private SchemaConfigManager schemaConfigManager;
@@ -895,7 +895,7 @@
       // and register a minimal set of matching rules and attribute syntaxes.
       try
       {
-        directoryServer.schema = new Schema(org.forgerock.opendj.ldap.schema.Schema.getCoreSchema());
+        directoryServer.setSchema(new Schema(org.forgerock.opendj.ldap.schema.Schema.getCoreSchema()));
       }
       catch (DirectoryException unexpected)
       {
@@ -1593,7 +1593,7 @@
     // Create the schema configuration manager, and initialize the schema from
     // the configuration.
     schemaConfigManager = new SchemaConfigManager(serverContext);
-    schema = schemaConfigManager.getSchema();
+    setSchema(schemaConfigManager.getSchema());
 
     schemaConfigManager.initializeMatchingRules();
     schemaConfigManager.initializeAttributeSyntaxes();
@@ -2245,6 +2245,9 @@
   public static void setSchema(Schema schema)
   {
     directoryServer.schema = schema;
+    org.forgerock.opendj.ldap.schema.Schema.setDefaultSchema(schema != null
+        ? schema.getSchemaNG()
+        : org.forgerock.opendj.ldap.schema.Schema.getCoreSchema());
   }
 
   /**
@@ -6224,7 +6227,7 @@
     if (schema != null)
     {
       schema.destroy();
-      schema = null;
+      setSchema(null);
     }
   }
 
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java b/opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java
index 494be91..4138af0 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java
@@ -548,6 +548,10 @@
   private void setSchemaNG(org.forgerock.opendj.ldap.schema.Schema newSchemaNG)
   {
     schemaNG = newSchemaNG.asNonStrictSchema();
+    if (DirectoryServer.getSchema() == this)
+    {
+      org.forgerock.opendj.ldap.schema.Schema.setDefaultSchema(schemaNG);
+    }
   }
 
   private void updateSubordinateTypes(AttributeType attributeType)

--
Gitblit v1.10.0