You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2011/07/22 02:02:18 UTC

svn commit: r1149411 [1/6] - in /directory/apacheds/trunk: core-annotations/src/main/java/org/apache/directory/server/core/factory/ core-annotations/src/test/java/org/apache/directory/server/core/factory/ core-api/src/main/java/org/apache/directory/ser...

Author: elecharny
Date: Fri Jul 22 00:02:02 2011
New Revision: 1149411

URL: http://svn.apache.org/viewvc?rev=1149411&view=rev
Log:
Refactored the Partition hierarchy :
o merged the Store and partition iplementations
o redesigned the Partition initialization
o reviexed the DS initialization
o Partition now takes a SchemaManager when constructed
o the get/setSuffix methods have been renamed get/setSuffixDn
o Added some missing Javadoc

Removed:
    directory/apacheds/trunk/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlStore.java
Modified:
    directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/AvlPartitionFactory.java
    directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java
    directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DefaultDirectoryServiceFactory.java
    directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/JdbmPartitionFactory.java
    directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/LdifPartitionFactory.java
    directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/PartitionFactory.java
    directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java
    directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/AbstractPartition.java
    directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/Partition.java
    directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java
    directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java
    directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java
    directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaService.java
    directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java
    directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesIT.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/DefaultSchemaService.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
    directory/apacheds/trunk/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
    directory/apacheds/trunk/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/ServerEntrySerializer.java
    directory/apacheds/trunk/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
    directory/apacheds/trunk/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/tree/PartitionTreeTest.java
    directory/apacheds/trunk/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/AbstractLdifPartition.java
    directory/apacheds/trunk/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java
    directory/apacheds/trunk/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/SingleFileLdifPartition.java
    directory/apacheds/trunk/ldif-partition/src/test/java/org/apache/directory/server/core/partition/LdifPartitionTest.java
    directory/apacheds/trunk/ldif-partition/src/test/java/org/apache/directory/server/core/partition/SingleFileLdifPartitionTest.java
    directory/apacheds/trunk/server-annotations/src/test/java/org/apache/directory/server/factory/DirectoryServiceAnnotationTest.java
    directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/ConfigPartitionReader.java
    directory/apacheds/trunk/server-config/src/main/java/org/apache/directory/server/config/ReadOnlyConfigurationPartition.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/ChangePasswordConfigReaderTest.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/ConfigPartitionReaderTest.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/ConfigWriterTest.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/DhcpServerConfigReaderTest.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/DnsServerConfigReaderTest.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/HttpServerConfigReaderTest.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/KerberosServerConfigReaderTest.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/LdapServerConfigReaderTest.java
    directory/apacheds/trunk/server-config/src/test/java/org/apache/directory/server/config/NtpServerConfigReaderTest.java
    directory/apacheds/trunk/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java
    directory/apacheds/trunk/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java
    directory/apacheds/trunk/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java
    directory/apacheds/trunk/service/src/main/java/org/apache/directory/server/ApacheDsService.java
    directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/FrameworkRunner.java
    directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/FrameworkSuite.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/avl/AvlPartition.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/ServerEntryCursorAdaptor.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/xdbm/AbstractXdbmPartition.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultSearchEngine.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeCursor.java
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeEvaluator.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/AbstractStoreTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/StoreUtils.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlStoreTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/AndCursorTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/NestedFilterTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/NotCursorTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/OneLevelScopeTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/OrCursorTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/PresenceTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/SubstringTest.java
    directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/SubtreeScopeTest.java
    directory/apacheds/trunk/xdbm-tools/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/EntryNode.java
    directory/apacheds/trunk/xdbm-tools/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java

Modified: directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/AvlPartitionFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/AvlPartitionFactory.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/AvlPartitionFactory.java (original)
+++ directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/AvlPartitionFactory.java Fri Jul 22 00:02:02 2011
@@ -28,6 +28,7 @@ import org.apache.directory.server.xdbm.
 import org.apache.directory.server.xdbm.impl.avl.AvlIndex;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.name.Dn;
+import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 
 
 /**
@@ -41,14 +42,15 @@ public class AvlPartitionFactory impleme
     /**
      * {@inheritDoc}
      */
-    public AvlPartition createPartition( String id, String suffix, int cacheSize, File workingDirectory )
+    public AvlPartition createPartition( SchemaManager schemaManager, String id, String suffix, int cacheSize, File workingDirectory )
         throws Exception
     {
-        AvlPartition partition = new AvlPartition();
+        AvlPartition partition = new AvlPartition( schemaManager );
         partition.setId( id );
-        partition.setSuffix( new Dn( suffix ) );
+        partition.setSuffixDn( new Dn( suffix ) );
         partition.setCacheSize( 500 );
         partition.setPartitionPath( workingDirectory.toURI() );
+        
         return partition;
     }
 

Modified: directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java (original)
+++ directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java Fri Jul 22 00:02:02 2011
@@ -22,6 +22,7 @@ package org.apache.directory.server.core
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.util.HashSet;
 import java.util.List;
@@ -48,6 +49,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.model.ldif.LdifEntry;
 import org.apache.directory.shared.ldap.model.ldif.LdifReader;
 import org.apache.directory.shared.ldap.model.name.Dn;
+import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.junit.runner.Description;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -80,6 +82,7 @@ public class DSAnnotationProcessor
         service.getChangeLog().setEnabled( dsBuilder.enableChangeLog() );
 
         List<Interceptor> interceptorList = service.getInterceptors();
+        
         for ( Class<?> interceptorClass : dsBuilder.additionalInterceptors() )
         {
             interceptorList.add( ( Interceptor ) interceptorClass.newInstance() );
@@ -138,10 +141,12 @@ public class DSAnnotationProcessor
                 // We use the partition factory to create partition and index
                 // instances.
                 PartitionFactory partitionFactory = dsf.getPartitionFactory();
-                partition = partitionFactory.createPartition( createPartition
-                        .name(), createPartition.suffix(), createPartition
-                        .cacheSize(), new File( service.getInstanceLayout()
-                        .getPartitionsDirectory(), createPartition.name() ) );
+                partition = partitionFactory.createPartition(
+                        service.getSchemaManager(),
+                        createPartition.name(), 
+                        createPartition.suffix(), 
+                        createPartition.cacheSize(), 
+                        new File( service.getInstanceLayout().getPartitionsDirectory(), createPartition.name() ) );
 
                 CreateIndex[] indexes = createPartition.indexes();
                 
@@ -155,9 +160,11 @@ public class DSAnnotationProcessor
             {
                 // The annotation contains a specific partition type, we use
                 // that type.
-                partition = createPartition.type().newInstance();
+                Class<?> partypes[] = new Class[]{SchemaManager.class};
+                Constructor<?> constructor = createPartition.type().getConstructor(partypes);
+                partition = (Partition)constructor.newInstance( new Object[]{service.getSchemaManager()} );
                 partition.setId( createPartition.name() );
-                partition.setSuffix( new Dn( service.getSchemaManager(), createPartition.suffix() ) );
+                partition.setSuffixDn( new Dn( service.getSchemaManager(), createPartition.suffix() ) );
 
                 if ( partition instanceof AbstractBTreePartition<?> )
                 {

Modified: directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DefaultDirectoryServiceFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DefaultDirectoryServiceFactory.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DefaultDirectoryServiceFactory.java (original)
+++ directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DefaultDirectoryServiceFactory.java Fri Jul 22 00:02:02 2011
@@ -30,6 +30,7 @@ import org.apache.directory.server.core.
 import org.apache.directory.server.core.InstanceLayout;
 import org.apache.directory.server.core.partition.Partition;
 import org.apache.directory.server.core.partition.ldif.LdifPartition;
+import org.apache.directory.server.core.schema.DefaultSchemaService;
 import org.apache.directory.server.core.schema.SchemaPartition;
 import org.apache.directory.server.i18n.I18n;
 import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
@@ -54,12 +55,6 @@ public class DefaultDirectoryServiceFact
     /** A logger for this class */
     private static final Logger LOG = LoggerFactory.getLogger( DefaultDirectoryServiceFactory.class );
 
-    /**
-     * The default factory returns stock instances of a directory
-     * service with smart defaults
-     */
-    public static final DirectoryServiceFactory DEFAULT = new DefaultDirectoryServiceFactory();
-
     /** The directory service. */
     private DirectoryService directoryService;
 
@@ -67,7 +62,7 @@ public class DefaultDirectoryServiceFact
     private PartitionFactory partitionFactory;
 
 
-    /* default access */DefaultDirectoryServiceFactory()
+    public DefaultDirectoryServiceFactory()
     {
         try
         {
@@ -87,6 +82,7 @@ public class DefaultDirectoryServiceFact
         try
         {
             String typeName = System.getProperty( "apacheds.partition.factory" );
+            
             if ( typeName != null )
             {
                 Class<? extends PartitionFactory> type = ( Class<? extends PartitionFactory> ) Class.forName( typeName );
@@ -154,12 +150,7 @@ public class DefaultDirectoryServiceFact
      */
     private void initSchema() throws Exception
     {
-        SchemaPartition schemaPartition = directoryService.getSchemaService().getSchemaPartition();
-
-        // Init the LdifPartition
-        LdifPartition ldifPartition = new LdifPartition();
         File workingDirectory = directoryService.getInstanceLayout().getPartitionsDirectory();
-        ldifPartition.setPartitionPath( new File(workingDirectory, "schema" ).toURI() );
 
         // Extract the schema on disk (a brand new one) and load the registries
         File schemaRepository = new File( workingDirectory, "schema" );
@@ -174,18 +165,24 @@ public class DefaultDirectoryServiceFact
             // The schema has already been extracted, bypass
         }
 
-        schemaPartition.setWrappedPartition( ldifPartition );
-
         SchemaLoader loader = new LdifSchemaLoader( schemaRepository );
         SchemaManager schemaManager = new DefaultSchemaManager( loader );
-        directoryService.setSchemaManager( schemaManager );
-
+        
         // We have to load the schema now, otherwise we won't be able
         // to initialize the Partitions, as we won't be able to parse 
         // and normalize their suffix Dn
         schemaManager.loadAllEnabled();
 
-        schemaPartition.setSchemaManager( schemaManager );
+        directoryService.setSchemaManager( schemaManager );
+        directoryService.setSchemaService( new DefaultSchemaService( schemaManager ) );
+
+        // Init the LdifPartition
+        LdifPartition ldifPartition = new LdifPartition( schemaManager );
+        ldifPartition.setPartitionPath( new File(workingDirectory, "schema" ).toURI() );
+
+        SchemaPartition schemaPartition = directoryService.getSchemaService().getSchemaPartition();
+
+        schemaPartition.setWrappedPartition( ldifPartition );
 
         List<Throwable> errors = schemaManager.getErrors();
 
@@ -208,7 +205,8 @@ public class DefaultDirectoryServiceFact
         // or somewhere in a temp area of the machine.
 
         // Inject the System Partition
-        Partition systemPartition = partitionFactory.createPartition( "system", ServerDNConstants.SYSTEM_DN, 500,
+        Partition systemPartition = partitionFactory.createPartition( directoryService.getSchemaManager(),
+            "system", ServerDNConstants.SYSTEM_DN, 500,
             new File( directoryService.getInstanceLayout().getPartitionsDirectory(), "system" ) );
         systemPartition.setSchemaManager( directoryService.getSchemaManager() );
 

Modified: directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/JdbmPartitionFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/JdbmPartitionFactory.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/JdbmPartitionFactory.java (original)
+++ directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/JdbmPartitionFactory.java Fri Jul 22 00:02:02 2011
@@ -28,6 +28,7 @@ import org.apache.directory.server.core.
 import org.apache.directory.server.xdbm.Index;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.name.Dn;
+import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 
 
 /**
@@ -41,14 +42,16 @@ public class JdbmPartitionFactory implem
     /**
      * {@inheritDoc}
      */
-    public JdbmPartition createPartition( String id, String suffix, int cacheSize, File workingDirectory )
+    public JdbmPartition createPartition( SchemaManager schemaManager, String id, String suffix, int cacheSize, File workingDirectory )
         throws Exception
     {
-        JdbmPartition partition = new JdbmPartition();
+        JdbmPartition partition = new JdbmPartition( schemaManager );
         partition.setId( id );
-        partition.setSuffix( new Dn( suffix ) );
+        partition.setSuffixDn( new Dn( suffix ) );
         partition.setCacheSize( 500 );
         partition.setPartitionPath( workingDirectory.toURI() );
+        partition.initialize();
+        
         return partition;
     }
 

Modified: directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/LdifPartitionFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/LdifPartitionFactory.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/LdifPartitionFactory.java (original)
+++ directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/LdifPartitionFactory.java Fri Jul 22 00:02:02 2011
@@ -28,6 +28,7 @@ import org.apache.directory.server.xdbm.
 import org.apache.directory.server.xdbm.impl.avl.AvlIndex;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.name.Dn;
+import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 
 
 /**
@@ -41,14 +42,15 @@ public class LdifPartitionFactory implem
     /**
      * {@inheritDoc}
      */
-    public LdifPartition createPartition( String id, String suffix, int cacheSize, File workingDirectory )
+    public LdifPartition createPartition( SchemaManager schemaManager, String id, String suffix, int cacheSize, File workingDirectory )
         throws Exception
     {
-        LdifPartition partition = new LdifPartition();
+        LdifPartition partition = new LdifPartition( schemaManager );
         partition.setId( id );
-        partition.setSuffix( new Dn( suffix ) );
+        partition.setSuffixDn( new Dn( suffix ) );
         partition.setCacheSize( 500 );
         partition.setPartitionPath( workingDirectory.toURI() );
+        
         return partition;
     }
 

Modified: directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/PartitionFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/PartitionFactory.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/PartitionFactory.java (original)
+++ directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/PartitionFactory.java Fri Jul 22 00:02:02 2011
@@ -23,6 +23,7 @@ import java.io.File;
 
 import org.apache.directory.server.core.partition.Partition;
 import org.apache.directory.server.xdbm.Index;
+import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 
 
 /**
@@ -36,6 +37,7 @@ public interface PartitionFactory
     /**
      * Creates a new Partition.
      * 
+     * @param schemaManager The SchemaManager instance
      * @param id the partition id
      * @param suffix the suffix
      * @param cacheSize the cache size
@@ -43,7 +45,7 @@ public interface PartitionFactory
      * @return the partition
      * @throws Exception the exception
      */
-    Partition createPartition( String id, String suffix, int cacheSize, File workingDirectory ) throws Exception;
+    Partition createPartition( SchemaManager schemaManager, String id, String suffix, int cacheSize, File workingDirectory ) throws Exception;
 
 
     /**

Modified: directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java (original)
+++ directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java Fri Jul 22 00:02:02 2011
@@ -115,13 +115,13 @@ public class DirectoryServiceAnnotationT
             if ( "example".equalsIgnoreCase( partition.getId() ) )
             {
                 assertTrue( partition.isInitialized() );
-                assertEquals( "dc=example,dc=com", partition.getSuffix().getName() );
+                assertEquals( "dc=example,dc=com", partition.getSuffixDn().getName() );
                 assertTrue( partition instanceof JdbmPartition );
             }
             else if ( "schema".equalsIgnoreCase( partition.getId() ) )
             {
                 assertTrue( partition.isInitialized() );
-                assertEquals( "ou=schema", partition.getSuffix().getName() );
+                assertEquals( "ou=schema", partition.getSuffixDn().getName() );
             }
         }
         
@@ -161,13 +161,13 @@ public class DirectoryServiceAnnotationT
             if ( "example".equalsIgnoreCase( partition.getId() ) )
             {
                 assertTrue( partition.isInitialized() );
-                assertEquals( "dc=example,dc=com", partition.getSuffix().getName() );
+                assertEquals( "dc=example,dc=com", partition.getSuffixDn().getName() );
                 assertTrue( partition instanceof AvlPartition );
             }
             else if ( "schema".equalsIgnoreCase( partition.getId() ) )
             {
                 assertTrue( partition.isInitialized() );
-                assertEquals( "ou=schema", partition.getSuffix().getName() );
+                assertEquals( "ou=schema", partition.getSuffixDn().getName() );
             }
         }
 

Modified: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/AbstractPartition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/AbstractPartition.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/AbstractPartition.java (original)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/AbstractPartition.java Fri Jul 22 00:02:02 2011
@@ -20,14 +20,19 @@
 package org.apache.directory.server.core.partition;
 
 
+import java.io.IOException;
+import java.io.OutputStream;
+
 import javax.naming.InvalidNameException;
 
-import org.apache.directory.server.core.interceptor.context.EntryOperationContext;
-import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
+import org.apache.directory.server.i18n.I18n;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
+import org.apache.directory.shared.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.shared.ldap.model.exception.LdapOtherException;
+import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
+import org.apache.directory.shared.util.Strings;
 
 
 /**
@@ -48,6 +53,12 @@ public abstract class AbstractPartition 
     /** The partition ContextEntry */
     protected Entry contextEntry;
 
+    /** The partition ID */
+    protected String id;
+    
+    /** The root Dn for this partition */
+    protected Dn suffixDn;
+
     protected AbstractPartition()
     {
     }
@@ -59,7 +70,7 @@ public abstract class AbstractPartition 
      * {@link #doInit()} returns without any errors.  {@link #destroy()} is called automatically
      * as a clean-up process if {@link #doInit()} throws an exception.
      */
-    public final void initialize( ) throws LdapException
+    public void initialize( ) throws LdapException
     {
         if ( initialized )
         {
@@ -93,6 +104,13 @@ public abstract class AbstractPartition 
     }
     
 
+
+    /**
+     * Override this method to put your initialization code.
+     */
+    protected abstract void doDestroy() throws Exception;
+
+
     /**
      * Override this method to put your initialization code.
      * @throws Exception 
@@ -119,59 +137,73 @@ public abstract class AbstractPartition 
 
 
     /**
-     * Override this method to put your initialization code.
+     * Returns <tt>true</tt> if this context partition is initialized successfully.
      */
-    protected abstract void doDestroy() throws Exception;
+    public final boolean isInitialized()
+    {
+        return initialized;
+    }
 
 
     /**
-     * Returns <tt>true</tt> if this context partition is initialized successfully.
+     * {@inheritDoc}
      */
-    public boolean isInitialized()
+    public void setSchemaManager( SchemaManager schemaManager )
     {
-        return initialized;
+        this.schemaManager = schemaManager;
     }
 
 
     /**
-     * This method does nothing by default.
+     * {@inheritDoc}
      */
-    public abstract void sync() throws Exception;
+    public final SchemaManager getSchemaManager()
+    {
+        return schemaManager;
+    }
 
 
     /**
-     * This method calls {@link Partition#lookup(LookupOperationContext)} and return <tt>true</tt>
-     * if it returns an entry by default.  Please override this method if
-     * there is more effective way for your implementation.
+     * {@inheritDoc}
      */
-    public boolean hasEntry( EntryOperationContext entryContext ) throws LdapException
+    public final String getId()
     {
-        try
-        {
-            return entryContext.lookup( entryContext.getDn(), ByPassConstants.LOOKUP_BYPASS ) != null; 
-        }
-        catch ( LdapException e )
-        {
-            return false;
-        }
+        return id;
     }
 
 
     /**
      * {@inheritDoc}
      */
-    public void setSchemaManager( SchemaManager schemaManager )
+    public void setId( String id )
     {
-        this.schemaManager = schemaManager;
+        checkInitialized( "id" );
+        this.id = id;
     }
 
 
     /**
      * {@inheritDoc}
      */
-    public SchemaManager getSchemaManager()
+    public final Dn getSuffixDn()
     {
-        return schemaManager;
+        return suffixDn;
+    }
+    
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void setSuffixDn( Dn suffixDn ) throws LdapInvalidDnException
+    {
+        checkInitialized( "suffixDn" );
+
+        this.suffixDn = suffixDn;
+
+        if ( schemaManager != null )
+        {
+            this.suffixDn.apply( schemaManager );
+        }
     }
     
     
@@ -191,4 +223,26 @@ public abstract class AbstractPartition 
     {
         this.contextEntry = contextEntry;
     }
+    
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void dumpIndex( OutputStream stream, String name ) throws IOException
+    {
+        stream.write( Strings.getBytesUtf8( "Nothing to dump for index " + name ) );
+    }
+
+    
+    /**
+     * Check that the operation is done on an initialized store
+     * @param property
+     */
+    protected void checkInitialized( String property )
+    {
+        if ( initialized )
+        {
+            throw new IllegalStateException( I18n.err( I18n.ERR_576, property ) );
+        }
+    }
 }

Modified: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/Partition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/Partition.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/Partition.java (original)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/Partition.java Fri Jul 22 00:02:02 2011
@@ -20,6 +20,9 @@
 package org.apache.directory.server.core.partition;
 
 
+import java.io.IOException;
+import java.io.OutputStream;
+
 import org.apache.directory.server.core.entry.ServerSearchResult;
 import org.apache.directory.server.core.filtering.EntryFilteringCursor;
 import org.apache.directory.server.core.interceptor.context.AddOperationContext;
@@ -71,15 +74,6 @@ public interface Partition
 
 
     /**
-     * Sets the user provided suffix for this Partition as a String.
-     *
-     * @param suffix the suffix String for this Partition.
-     * @throws LdapInvalidDnException if the suffix does not conform to LDAP Dn syntax
-     */
-    void setSuffix( Dn suffix ) throws LdapInvalidDnException;
-
-
-    /**
      * Gets the schema manager assigned to this Partition.
      *
      * @return the schema manager
@@ -115,7 +109,15 @@ public interface Partition
      * @return the suffix for this Partition.
      * @throws IllegalStateException if the Partition has not been initialized
      */
-    Dn getSuffix();
+    Dn getSuffixDn();
+
+
+    /**
+     * Sets the suffix Dn, must be normalized.
+     * 
+     * @param suffixDn the new suffix Dn
+     */
+    void setSuffixDn( Dn suffixDn ) throws LdapInvalidDnException;
 
 
     /**
@@ -286,4 +288,12 @@ public interface Partition
      * @throws Exception if something goes wrong
      */
     void unbind( UnbindOperationContext unbindContext ) throws LdapException;
+    
+    
+    /**
+     * Dump the requested index to a given stream
+     * @param name The index to dump to stdout
+     * @throws IOException if we can't write the data
+     */
+    void dumpIndex( OutputStream stream, String name ) throws IOException;
 }

Modified: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java (original)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java Fri Jul 22 00:02:02 2011
@@ -78,12 +78,6 @@ public interface PartitionNexus extends 
 
 
     /**
-     * @return The ou=system partition 
-     */
-    public Partition getSystemPartition();
-
-
-    /**
      * Get's the partition corresponding to a distinguished name.  This 
      * name need not be the name of the partition suffix.  When used in 
      * conjunction with get suffix this can properly find the partition 
@@ -105,7 +99,7 @@ public interface PartitionNexus extends 
      * @return the suffix portion of dn, or the valid empty string Dn if no
      * naming context was found for dn.
      */
-    public Dn findSuffix( Dn dn ) throws LdapException;
+    public Dn getSuffixDn( Dn dn ) throws LdapException;
 
 
     /**

Modified: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java (original)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartition.java Fri Jul 22 00:02:02 2011
@@ -24,7 +24,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.directory.server.constants.ApacheSchemaConstants;
-import org.apache.directory.server.constants.ServerDNConstants;
 import org.apache.directory.server.core.filtering.EntryFilteringCursor;
 import org.apache.directory.server.core.interceptor.context.AddOperationContext;
 import org.apache.directory.server.core.interceptor.context.BindOperationContext;
@@ -51,8 +50,10 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.model.entry.Modification;
 import org.apache.directory.shared.ldap.model.entry.ModificationOperation;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
+import org.apache.directory.shared.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.shared.ldap.model.message.controls.Cascade;
 import org.apache.directory.shared.ldap.model.name.Dn;
+import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.SchemaUtils;
 import org.apache.directory.shared.util.DateUtils;
 import org.slf4j.Logger;
@@ -105,7 +106,7 @@ public final class SchemaPartition exten
     private static final Logger LOG = LoggerFactory.getLogger( SchemaPartition.class );
 
     /** the fixed id: 'schema' */
-    private static final String ID = "schema";
+    private static final String SCHEMA_ID = "schema";
 
     /** the wrapped Partition */
     private Partition wrapped;
@@ -114,12 +115,29 @@ public final class SchemaPartition exten
     private RegistrySynchronizerAdaptor synchronizer;
 
     /** A static Dn for the ou=schemaModifications entry */
-    private static Dn schemaModificationDn;
+    private static Dn SCHEMA_MODIFICATION_DN;
 
     /** A static Dn for the ou=schema partition */
-    private static Dn schemaDn;
+    private static Dn SCHEMA_DN;
 
 
+    public SchemaPartition( SchemaManager schemaManager )
+    {
+        try
+        {
+            SCHEMA_DN = new Dn( schemaManager, SchemaConstants.OU_SCHEMA );
+        }
+        catch ( LdapInvalidDnException lide )
+        {
+            // Nothing to do : this is a valid DN anyways
+        }
+        
+        id = SCHEMA_ID;
+        suffixDn = SCHEMA_DN;
+        this.schemaManager = schemaManager;
+    }
+    
+    
     /**
      * Sets the wrapped {@link Partition} which must be supplied or 
      * {@link Partition#initialize()} will fail with a NullPointerException.
@@ -149,39 +167,12 @@ public final class SchemaPartition exten
 
 
     /**
-     * Get's the ID which is fixed: 'schema'.
-     */
-    public String getId()
-    {
-        return ID;
-    }
-
-
-    /**
-     * Has no affect: the id is fixed at {@link SchemaPartition#ID}: 'schema'.
+     * Has no affect: the id is fixed at {@link SchemaPartition#SCHEMA_ID}: 'schema'.
      * A warning is logged.
      */
     public void setId( String id )
     {
-        LOG.warn( "This partition's ID is fixed: {}", ID );
-    }
-
-
-    /**
-     * Always returns {@link ServerDNConstants#OU_SCHEMA_DN_NORMALIZED}: '2.5.4.11=schema'.
-     */
-    public Dn getSuffix()
-    {
-        return wrapped.getSuffix();
-    }
-
-
-    /**
-     * Has no affect: just logs a warning.
-     */
-    public void setSuffix( Dn suffix )
-    {
-        LOG.warn( "This partition's suffix is fixed: {}", SchemaConstants.OU_SCHEMA );
+        LOG.warn( "This partition's ID is fixed: {}", SCHEMA_ID );
     }
 
 
@@ -205,29 +196,30 @@ public final class SchemaPartition exten
     @Override
     protected void doInit() throws Exception
     {
-        // -----------------------------------------------------------------------
-        // Load apachemeta schema from within the ldap-schema Jar with all the
-        // schema it depends on.  This is a minimal mandatory set of schemas.
-        // -----------------------------------------------------------------------
-        schemaDn = new Dn( schemaManager, SchemaConstants.OU_SCHEMA );
-        
-        wrapped.setId( ID );
-        wrapped.setSuffix( schemaDn );
-        wrapped.setSchemaManager( schemaManager );
-
-        try
-        {
-            wrapped.initialize();
-
-            synchronizer = new RegistrySynchronizerAdaptor( schemaManager );
-        }
-        catch ( Exception e )
+        if ( !initialized )
         {
-            LOG.error( I18n.err( I18n.ERR_90 ), e );
-            throw new RuntimeException( e );
+            // -----------------------------------------------------------------------
+            // Load apachemeta schema from within the ldap-schema Jar with all the
+            // schema it depends on.  This is a minimal mandatory set of schemas.
+            // -----------------------------------------------------------------------
+            wrapped.setId( SCHEMA_ID );
+            wrapped.setSuffixDn( SCHEMA_DN );
+            wrapped.setSchemaManager( schemaManager );
+    
+            try
+            {
+                wrapped.initialize();
+    
+                synchronizer = new RegistrySynchronizerAdaptor( schemaManager );
+            }
+            catch ( Exception e )
+            {
+                LOG.error( I18n.err( I18n.ERR_90 ), e );
+                throw new RuntimeException( e );
+            }
+    
+            SCHEMA_MODIFICATION_DN = new Dn( schemaManager, SchemaConstants.SCHEMA_MODIFICATIONS_DN );
         }
-
-        schemaModificationDn = new Dn( schemaManager, SchemaConstants.SCHEMA_MODIFICATIONS_DN );
     }
 
 
@@ -355,7 +347,7 @@ public final class SchemaPartition exten
             wrapped.modify( modifyContext );
         }
 
-        if ( !modifyContext.getDn().equals(schemaModificationDn) )
+        if ( !modifyContext.getDn().equals( SCHEMA_MODIFICATION_DN ) )
         {
             updateSchemaModificationAttributes( modifyContext );
         }
@@ -459,7 +451,7 @@ public final class SchemaPartition exten
             ApacheSchemaConstants.SCHEMA_MODIFIERS_NAME_AT, schemaManager
                 .lookupAttributeTypeRegistry( ApacheSchemaConstants.SCHEMA_MODIFIERS_NAME_AT ), modifiersName ) ) );
 
-        opContext.modify(schemaModificationDn, mods, ByPassConstants.SCHEMA_MODIFICATION_ATTRIBUTES_UPDATE_BYPASS );
+        opContext.modify( SCHEMA_MODIFICATION_DN, mods, ByPassConstants.SCHEMA_MODIFICATION_ATTRIBUTES_UPDATE_BYPASS );
     }
 
 
@@ -468,6 +460,6 @@ public final class SchemaPartition exten
      */
     public String toString()
     {
-        return "Partition : " + ID;
+        return "Partition : " + SCHEMA_ID;
     }
 }

Modified: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java (original)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java Fri Jul 22 00:02:02 2011
@@ -116,7 +116,7 @@ public class SchemaPartitionDaoImpl impl
     private final AttributeType M_DEPENDENCIES_AT;
 
     private final Set<AttributeTypeOptions> schemaAttributesToReturn = new HashSet<AttributeTypeOptions>();
-    private final AttributeType disabledAttributeType;
+    private final AttributeType DISABLED_ATTRIBUTE_TYPE_AT;
 
 
     /**
@@ -132,21 +132,21 @@ public class SchemaPartitionDaoImpl impl
         this.factory = new SchemaEntityFactory();
         this.schemaManager = schemaManager;
 
-        this.M_NAME_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_NAME_AT );
-        this.disabledAttributeType = schemaManager.getAttributeType( MetaSchemaConstants.M_DISABLED_AT );
-        this.M_OID_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_OID_AT );
+        M_NAME_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_NAME_AT );
+        DISABLED_ATTRIBUTE_TYPE_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_DISABLED_AT );
+        M_OID_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_OID_AT );
         OBJECT_CLASS_AT = schemaManager.getAttributeType( SchemaConstants.OBJECT_CLASS_AT );
-        this.M_SYNTAX_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_SYNTAX_AT );
-        this.M_ORDERING_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_ORDERING_AT );
-        this.M_EQUALITY_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_EQUALITY_AT );
-        this.M_SUBSTRING_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_SUBSTR_AT );
-        this.M_SUP_ATTRIBUTE_TYPE_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_SUP_ATTRIBUTE_TYPE_AT );
-        this.M_MUST_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_MUST_AT );
-        this.M_MAY_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_MAY_AT );
-        this.M_AUX_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_AUX_AT );
-        this.M_OC_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_OC_AT );
-        this.M_SUP_OBJECT_CLASS_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_SUP_OBJECT_CLASS_AT );
-        this.M_DEPENDENCIES_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_DEPENDENCIES_AT );
+        M_SYNTAX_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_SYNTAX_AT );
+        M_ORDERING_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_ORDERING_AT );
+        M_EQUALITY_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_EQUALITY_AT );
+        M_SUBSTRING_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_SUBSTR_AT );
+        M_SUP_ATTRIBUTE_TYPE_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_SUP_ATTRIBUTE_TYPE_AT );
+        M_MUST_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_MUST_AT );
+        M_MAY_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_MAY_AT );
+        M_AUX_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_AUX_AT );
+        M_OC_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_OC_AT );
+        M_SUP_OBJECT_CLASS_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_SUP_OBJECT_CLASS_AT );
+        M_DEPENDENCIES_AT = schemaManager.getAttributeType( MetaSchemaConstants.M_DEPENDENCIES_AT );
 
         for ( String attrId : SCHEMA_ATTRIBUTES )
         {
@@ -242,7 +242,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -294,7 +294,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -346,7 +346,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -398,7 +398,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -450,7 +450,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -530,7 +530,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -567,7 +567,7 @@ public class SchemaPartitionDaoImpl impl
     {
         Dn dn = new Dn( schemaManager, "cn=" + schemaName + ",ou=schema" );
         Entry entry = partition.lookup( new LookupOperationContext( null, dn ) );
-        Attribute disabledAttr = entry.get( disabledAttributeType );
+        Attribute disabledAttr = entry.get( DISABLED_ATTRIBUTE_TYPE_AT );
         List<Modification> mods = new ArrayList<Modification>( 3 );
 
         if ( disabledAttr == null )
@@ -623,7 +623,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -682,7 +682,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -718,7 +718,7 @@ public class SchemaPartitionDaoImpl impl
         filter.addNode( new PresenceNode( M_OID_AT ) );
         filter.addNode( new PresenceNode( M_NAME_AT ) );
 
-        SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+        SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
             filter, searchControls );
         searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -772,7 +772,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -820,7 +820,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -862,7 +862,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 
@@ -871,7 +871,7 @@ public class SchemaPartitionDaoImpl impl
             while ( cursor.next() )
             {
                 Entry sr = cursor.get();
-                Attribute disabled = sr.get( disabledAttributeType );
+                Attribute disabled = sr.get( DISABLED_ATTRIBUTE_TYPE_AT );
 
                 if ( disabled == null )
                 {
@@ -948,7 +948,7 @@ public class SchemaPartitionDaoImpl impl
 
         try
         {
-            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffix(),
+            SearchOperationContext searchOperationContext = new SearchOperationContext( null, partition.getSuffixDn(),
                 filter, searchControls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
 

Modified: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaService.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaService.java (original)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaService.java Fri Jul 22 00:02:02 2011
@@ -48,14 +48,6 @@ public interface SchemaService
     SchemaPartition getSchemaPartition();
 
     /**
-     * Initializes the SchemaService
-     *
-     * @throws Exception If the initializaion fails
-     */
-    void initialize() throws LdapException;
-
-
-    /**
      * A seriously unsafe (unsynchronized) means to access the schemaSubentry.
      *
      * @return the schemaSubentry

Modified: directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java (original)
+++ directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/configuration/PartitionConfigurationIT.java Fri Jul 22 00:02:02 2011
@@ -28,6 +28,7 @@ import java.util.UUID;
 import org.apache.directory.ldap.client.api.LdapConnection;
 import org.apache.directory.server.core.annotations.CreateDS;
 import org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory;
+import org.apache.directory.server.core.factory.DirectoryServiceFactory;
 import org.apache.directory.server.core.factory.PartitionFactory;
 import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
 import org.apache.directory.server.core.integ.FrameworkRunner;
@@ -55,8 +56,9 @@ public class PartitionConfigurationIT ex
     @Test
     public void testAddAndRemove() throws Exception
     {
-        PartitionFactory partitionFactory = DefaultDirectoryServiceFactory.DEFAULT.getPartitionFactory();
-        Partition partition = partitionFactory.createPartition( "removable", "ou=removable", 100, getService()
+        DirectoryServiceFactory dsFactory = DefaultDirectoryServiceFactory.class.newInstance();
+        PartitionFactory partitionFactory = dsFactory.getPartitionFactory();
+        Partition partition = partitionFactory.createPartition( getService().getSchemaManager(), "removable", "ou=removable", 100, getService()
             .getInstanceLayout().getPartitionsDirectory() );
 
         // Test AddContextPartition

Modified: directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesIT.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesIT.java (original)
+++ directory/apacheds/trunk/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchWithIndicesIT.java Fri Jul 22 00:02:02 2011
@@ -29,6 +29,7 @@ import java.util.Set;
 import org.apache.directory.ldap.client.api.LdapConnection;
 import org.apache.directory.server.core.annotations.CreateDS;
 import org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory;
+import org.apache.directory.server.core.factory.DirectoryServiceFactory;
 import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
 import org.apache.directory.server.core.integ.FrameworkRunner;
 import org.apache.directory.server.core.integ.IntegrationUtils;
@@ -79,7 +80,8 @@ public class SearchWithIndicesIT extends
         isNisDisabled = nisEntry.contains( "m-disabled", "TRUE" );
 
         Partition systemPartition = getService().getSystemPartition();
-        DefaultDirectoryServiceFactory.DEFAULT.getPartitionFactory().addIndex( systemPartition, "gidNumber", 100 );
+        DirectoryServiceFactory dsFactory = DefaultDirectoryServiceFactory.class.newInstance();
+        dsFactory.getPartitionFactory().addIndex( systemPartition, "gidNumber", 100 );
         
         // Restart the service so that the index is created
         getService().shutdown();

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=1149411&r1=1149410&r2=1149411&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 Fri Jul 22 00:02:02 2011
@@ -99,6 +99,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.model.ldif.LdifEntry;
 import org.apache.directory.shared.ldap.model.ldif.LdifReader;
 import org.apache.directory.shared.ldap.model.name.Dn;
+import org.apache.directory.shared.ldap.model.name.DnUtils;
 import org.apache.directory.shared.ldap.model.name.Rdn;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.util.tree.DnNode;
@@ -326,7 +327,6 @@ public class DefaultDirectoryService imp
         journal = new DefaultJournal();
         syncPeriodMillis = DEFAULT_SYNC_PERIOD;
         csnFactory = new CsnFactory( replicaId );
-        schemaService = new DefaultSchemaService();
     }
 
 
@@ -668,7 +668,7 @@ public class DefaultDirectoryService imp
             // can be null when called before starting up
             if ( partitionNexus != null )
             {
-                partitionNexus.removeContextPartition( partition.getSuffix() );
+                partitionNexus.removeContextPartition( partition.getSuffixDn() );
             }
         }
         catch ( LdapException le )
@@ -988,7 +988,7 @@ public class DefaultDirectoryService imp
 
         // load the last stored valid CSN value
         LookupOperationContext loc = new LookupOperationContext( getAdminSession() );
-        loc.setDn( systemPartition.getSuffix() );
+        loc.setDn( systemPartition.getSuffixDn() );
         loc.setAttrsId( new String[]{ SchemaConstants.CONTEXT_CSN_AT } );
         Entry entry = systemPartition.lookup( loc );
 
@@ -1472,6 +1472,36 @@ public class DefaultDirectoryService imp
             }
         }
     }
+    
+    
+    private void initializeSystemPartition() throws Exception
+    {
+        Partition system = getSystemPartition();
+        
+        // Add root context entry for system partition
+        Dn systemSuffixDn = getDnFactory().create( ServerDNConstants.SYSTEM_DN );
+        CoreSession adminSession = getAdminSession();
+
+        if ( !system.hasEntry( new EntryOperationContext( adminSession, systemSuffixDn ) ) )
+        {
+            Entry systemEntry = new DefaultEntry( schemaManager, systemSuffixDn );
+            
+            // Add the ObjectClasses
+            systemEntry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC,
+                SchemaConstants.ORGANIZATIONAL_UNIT_OC, SchemaConstants.EXTENSIBLE_OBJECT_OC );
+            
+            // Add some operational attributes
+            systemEntry.put( SchemaConstants.CREATORS_NAME_AT, ServerDNConstants.ADMIN_SYSTEM_DN );
+            systemEntry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
+            systemEntry.add( SchemaConstants.ENTRY_CSN_AT, getCSN().toString() );
+            systemEntry.add( SchemaConstants.ENTRY_UUID_AT, UUID.randomUUID().toString() );
+            systemEntry.put( DnUtils.getRdnAttributeType( ServerDNConstants.SYSTEM_DN ), DnUtils
+                .getRdnValue( ServerDNConstants.SYSTEM_DN ) );
+            
+            AddOperationContext addOperationContext = new AddOperationContext( adminSession, systemEntry );
+            system.add( addOperationContext );
+        }
+    }
 
 
     /**
@@ -1486,6 +1516,11 @@ public class DefaultDirectoryService imp
             LOG.debug( "---> Initializing the DefaultDirectoryService " );
         }
         
+        if ( schemaService == null )
+        {
+            schemaService = new DefaultSchemaService( schemaManager );
+        }
+
         cacheService = new CacheService();
         cacheService.initialize( this );
 
@@ -1498,10 +1533,9 @@ public class DefaultDirectoryService imp
         dnFactory = new DefaultDnFactory( schemaManager, cacheService.getCache( "dnCache" ) );
         
         // triggers partition to load schema fully from schema partition
-        schemaService.initialize();
         schemaService.getSchemaPartition().initialize();
         partitions.add( schemaService.getSchemaPartition() );
-        systemPartition.getSuffix().apply( schemaManager );
+        systemPartition.getSuffixDn().apply( schemaManager );
 
         adminDn = getDnFactory().create( ServerDNConstants.ADMIN_SYSTEM_DN );
         adminSession = new DefaultCoreSession( new LdapPrincipal( schemaManager, adminDn, AuthenticationLevel.STRONG ), this );
@@ -1511,6 +1545,8 @@ public class DefaultDirectoryService imp
         partitionNexus.setDirectoryService( this );
         partitionNexus.initialize( );
 
+        initializeSystemPartition();
+        
         // --------------------------------------------------------------------
         // Create all the bootstrap entries before initializing chain
         // --------------------------------------------------------------------
@@ -1530,7 +1566,7 @@ public class DefaultDirectoryService imp
 
             if( changeLog.isExposed() && changeLog.isTagSearchSupported() )
             {
-                String clSuffix = ( ( TaggableSearchableChangeLogStore ) changeLog.getChangeLogStore() ).getPartition().getSuffix().getName();
+                String clSuffix = ( ( TaggableSearchableChangeLogStore ) changeLog.getChangeLogStore() ).getPartition().getSuffixDn().getName();
                 partitionNexus.getRootDSE( null ).add( SchemaConstants.CHANGELOG_CONTEXT_AT, clSuffix );
             }
         }

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java Fri Jul 22 00:02:02 2011
@@ -50,6 +50,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.model.message.controls.ManageDsaITImpl;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -70,6 +71,9 @@ public class ChangeLogInterceptor extend
     /** the changelog service to log changes to */
     private ChangeLog changeLog;
     
+    /** we need the schema manager to deal with special conditions */
+    private SchemaManager schemaManager;
+    
     /** we need the schema service to deal with special conditions */
     private SchemaService schemaService;
 

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java?rev=1149411&r1=1149410&r2=1149411&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java Fri Jul 22 00:02:02 2011
@@ -126,7 +126,7 @@ public class ExceptionInterceptor extend
             throw new LdapEntryAlreadyExistsException( I18n.err( I18n.ERR_249 ) );
         }
 
-        Dn suffix = nexus.findSuffix( name );
+        Dn suffix = nexus.getSuffixDn( name );
 
         // we're adding the suffix entry so just ignore stuff to mess with the parent
         if ( suffix.equals( name ) )