o added a setter in DNFactory for schema manager
o update init method of DirectoryService to set the schema manager of DNFactory
o fixed the failing test
git-svn-id: https://svn.apache.org/repos/asf/directory/apacheds/branches/apacheds-dnfactory-experiment@981867 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/directory/server/core/DNFactory.java b/core/src/main/java/org/apache/directory/server/core/DNFactory.java
index eb71564..dea3efe 100644
--- a/core/src/main/java/org/apache/directory/server/core/DNFactory.java
+++ b/core/src/main/java/org/apache/directory/server/core/DNFactory.java
@@ -45,6 +45,8 @@
private static final Logger LOG = LoggerFactory.getLogger( DNFactory.class );
+ private static SchemaManager schemaManager;
+
// stat counters
private static int hitCount = 0;
private static int missCount = 0;
@@ -74,37 +76,40 @@
return DN.EMPTY_DN;
}
- DN cachedDN = DN_CACHE.get( dn );
-
- if ( cachedDN == null )
+ synchronized ( dn )
{
- LOG.debug( "DN {} not found in the cache, creating", dn );
-
- cachedDN = new DN( dn, schemaManager );
-
- DN_CACHE.put( dn, cachedDN );
- missCount++;
- }
- else
- {
- if ( !cachedDN.isNormalized() && ( schemaManager != null ) )
+ DN cachedDN = DN_CACHE.get( dn );
+
+ if ( cachedDN == null )
{
- cachedDN.normalize( schemaManager.getNormalizerMapping() );
+ LOG.debug( "DN {} not found in the cache, creating", dn );
+
+ cachedDN = new DN( dn, schemaManager );
+
+ DN_CACHE.put( dn, cachedDN );
+ missCount++;
}
-
- hitCount++;
- }
-
- LOG.debug( "DN {} found in the cache", dn );
+ else
+ {
+ if ( !cachedDN.isNormalized() && ( schemaManager != null ) )
+ {
+ cachedDN.normalize( schemaManager.getNormalizerMapping() );
+ }
+
+ hitCount++;
+ }
+
+ LOG.debug( "DN {} found in the cache", dn );
// System.out.println( "DN cache hit - " + hitCount + ", miss - " + missCount + " and is normalized = "
// + cachedDN.isNormalized() );
- return cachedDN;
+ return cachedDN;
+ }
}
public static DN create( String... upRdns ) throws LdapInvalidDnException
{
- return create( null, upRdns );
+ return create( schemaManager, upRdns );
}
@@ -124,7 +129,7 @@
public static DN create( DN dn ) throws LdapInvalidDnException
{
- return create( dn.getName(), null );
+ return create( dn.getName(), schemaManager );
}
@@ -136,7 +141,13 @@
public static DN create( String dn ) throws LdapInvalidDnException
{
- return create( dn, null );
+ return create( dn, schemaManager );
}
+
+ public static void setSchemaManager( SchemaManager schemaManager )
+ {
+ DNFactory.schemaManager = schemaManager;
+ }
+
}
diff --git a/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java b/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
index 55c579a..c4f01e3 100644
--- a/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
+++ b/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
@@ -1413,6 +1413,8 @@
LOG.debug( "---> Initializing the DefaultDirectoryService " );
}
+ DNFactory.setSchemaManager( schemaManager );
+
// triggers partition to load schema fully from schema partition
schemaService.initialize();
schemaService.getSchemaPartition().initialize();
diff --git a/core/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java b/core/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
index 23eabc3..6268681 100644
--- a/core/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
+++ b/core/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
@@ -91,7 +91,9 @@
{
fail( "Schema load failed : " + LdapExceptionUtils.printErrors( schemaManager.getErrors() ) );
}
-
+
+ DNFactory.setSchemaManager( schemaManager );
+
ncn = new ConcreteNameComponentNormalizer( schemaManager );
visitor = new FilterNormalizingVisitor( ncn, schemaManager );