You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2010/08/31 00:13:57 UTC

svn commit: r991007 - in /directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core: DNFactory.java DefaultDirectoryService.java

Author: kayyagari
Date: Mon Aug 30 22:13:57 2010
New Revision: 991007

URL: http://svn.apache.org/viewvc?rev=991007&view=rev
Log:
o updated DN factory to use ehcache
o changed the DN factory initialization order

Modified:
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DNFactory.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DNFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DNFactory.java?rev=991007&r1=991006&r2=991007&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DNFactory.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DNFactory.java Mon Aug 30 22:13:57 2010
@@ -21,8 +21,8 @@
 package org.apache.directory.server.core;
 
 
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.Element;
 
 import org.apache.directory.shared.ldap.exception.LdapInvalidDnException;
 import org.apache.directory.shared.ldap.name.DN;
@@ -39,14 +39,18 @@ import org.slf4j.LoggerFactory;
 public class DNFactory
 {
 
-    /** a map of <DN-upName, DN> tuples */
-    // NOTE: currently a map is used, will eventually be replaced with ehCache if thie experiment succeeds
-    private static final Map<String, DN> DN_CACHE = new ConcurrentHashMap<String, DN>();
+    /** a cache for DNs */
+    // this cache instance will be initialized only when DNFactory gets initialized by
+    // directory service. Other classes(like tests) can still use this factory but no cache is maintained
+    // FIXME this decision needs to be evaluated
+    private static Cache DN_CACHE;
 
     private static final Logger LOG = LoggerFactory.getLogger( DNFactory.class );
 
     private static SchemaManager schemaManager;
 
+    private static boolean enableStats = false;
+
     // stat counters
     private static int hitCount = 0;
     private static int missCount = 0;
@@ -71,12 +75,24 @@ public class DNFactory
             return null;
         }
 
-        if( dn.trim().length() == 0 )
+        if ( dn.trim().length() == 0 )
         {
             return DN.EMPTY_DN;
         }
 
-        DN cachedDN = DN_CACHE.get( dn );
+        DN cachedDN = null;
+
+        // read the explanation at the above DN_CACHE variable declaration
+        // for the reason for performing this check
+        if( DN_CACHE != null )
+        {
+            Element dnCacheEntry = DN_CACHE.get( dn );
+            
+            if ( dnCacheEntry != null )
+            {
+                cachedDN = ( DN ) dnCacheEntry.getValue();
+            }
+        }
 
         if ( cachedDN == null )
         {
@@ -84,8 +100,15 @@ public class DNFactory
 
             cachedDN = new DN( dn, schemaManager );
 
-            DN_CACHE.put( dn, cachedDN );
-            missCount++;
+            if( DN_CACHE != null )
+            {
+                DN_CACHE.put( new Element( dn, cachedDN ) );
+            }
+
+            if ( enableStats )
+            {
+                missCount++;
+            }
         }
         else
         {
@@ -94,13 +117,21 @@ public class DNFactory
                 cachedDN.normalize( schemaManager );
             }
 
-            hitCount++;
+            if ( enableStats )
+            {
+                hitCount++;
+            }
         }
 
         LOG.debug( "DN {} found in the cache", dn );
-//        System.out.println( "DN '" + cachedDN + "' found in the cache and isNormalized " + cachedDN.isNormalized() );
-//        System.out.println( "DN cache hit - " + hitCount + ", miss - " + missCount + " and is normalized = "
-//            + cachedDN.isNormalized() );
+        
+        if ( enableStats )
+        {
+            //System.out.println( "DN '" + cachedDN + "' found in the cache and isNormalized " + cachedDN.isNormalized() );
+            System.out.println( "DN cache hit - " + hitCount + ", miss - " + missCount + " and is normalized = "
+                + cachedDN.isNormalized() );
+        }
+        
         return cachedDN;
     }
 
@@ -148,4 +179,13 @@ public class DNFactory
         DNFactory.schemaManager = schemaManager;
     }
 
+    
+    /**
+     * this method will be called from the DefaultDirectoryService during startup
+     */
+    protected static void initialize( DirectoryService dirService )
+    {
+        schemaManager = dirService.getSchemaManager();
+        DN_CACHE = dirService.getCacheService().getCache( "dnCache" );
+    }
 }

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java?rev=991007&r1=991006&r2=991007&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java Mon Aug 30 22:13:57 2010
@@ -1420,7 +1420,10 @@ public class DefaultDirectoryService imp
             LOG.debug( "---> Initializing the DefaultDirectoryService " );
         }
 
-        DNFactory.setSchemaManager( schemaManager );
+        cacheService = new CacheService();
+        cacheService.initialize( this );
+
+        DNFactory.initialize( this );
 
         // triggers partition to load schema fully from schema partition
         schemaService.initialize();
@@ -1442,9 +1445,6 @@ public class DefaultDirectoryService imp
 
         firstStart = createBootstrapEntries();
         
-        cacheService = new CacheService();
-        cacheService.initialize( this );
-        
         interceptorChain = new InterceptorChain();
         interceptorChain.init( this );