directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Emmanuel LŽcharny <elecha...@gmail.com>
Subject Re: svn commit: r893678 - /directory/apacheds/branches/apacheds-schema/core-builder/src/main/java/org/apache/directory/server/core/builder/DirectoryServiceBuilder.java
Date Thu, 24 Dec 2009 08:54:02 GMT
This is not the way you unsubscribe to this mailng list. Just check 
http://directory.apache.org/community%26resources/mailing-lists-and-irc.html


Joseph king a écrit :
> Unsubscribe
>
> On Dec 23, 2009 8:37 PM, <elecharny@apache.org> wrote:
>
> Author: elecharny
> Date: Thu Dec 24 01:37:19 2009
> New Revision: 893678
>
> URL: http://svn.apache.org/viewvc?rev=893678&view=rev
> Log:
> Updated the builder to create a real DS instance
>
> Modified:
>
>  directory/apacheds/branches/apacheds-schema/core-builder/src/main/java/org/apache/directory/server/core/builder/DirectoryServiceBuilder.java
>
> Modified:
> directory/apacheds/branches/apacheds-schema/core-builder/src/main/java/org/apache/directory/server/core/builder/DirectoryServiceBuilder.java
> URL:
> http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-builder/src/main/java/org/apache/directory/server/core/builder/DirectoryServiceBuilder.java?rev=893678&r1=893677&r2=893678&view=diff
> ==============================================================================
> ---
> directory/apacheds/branches/apacheds-schema/core-builder/src/main/java/org/apache/directory/server/core/builder/DirectoryServiceBuilder.java
> (original)
> +++
> directory/apacheds/branches/apacheds-schema/core-builder/src/main/java/org/apache/directory/server/core/builder/DirectoryServiceBuilder.java
> Thu Dec 24 01:37:19 2009
> @@ -20,38 +20,158 @@
>  package org.apache.directory.server.core.builder;
>
>
> -import org.apache.directory.server.core.DefaultDirectoryService;
> +import java.io.File;
> +import java.util.HashSet;
> +import java.util.List;
> +import java.util.Set;
> +
> +import org.apache.directory.server.constants.ServerDNConstants;
> +import org.apache.directory.server.core.DefaultDirectoryService;
>  import org.apache.directory.server.core.DirectoryService;
> +import org.apache.directory.server.core.entry.ServerEntry;
>  import org.apache.directory.server.core.partition.Partition;
> -import org.apache.directory.server.core.partition.avl.AvlPartition;
> +import
> org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmIndex;
> +import
> org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition;
> +import org.apache.directory.server.core.partition.ldif.LdifPartition;
>  import org.apache.directory.server.core.schema.SchemaPartition;
> +import org.apache.directory.server.xdbm.Index;
> +import org.apache.directory.shared.ldap.constants.SchemaConstants;
> +import org.apache.directory.shared.ldap.schema.SchemaManager;
> +import
> org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
> +import org.apache.directory.shared.ldap.schema.registries.SchemaLoader;
> +import org.apache.directory.shared.ldap.util.ExceptionUtils;
> +import org.apache.directory.shared.schema.DefaultSchemaManager;
> +import org.apache.directory.shared.schema.loader.ldif.LdifSchemaLoader;
>
>
>  /**
> - * TODO DirectoryServiceBuilder.
> + * A builder to create a working instance of DirectoryService
>  *
>  * @author <a href="mailto:dev@directory.apache.org">Apache Directory
> Project</a>
>  * @version $Rev$, $Date$
>  */
>  public class DirectoryServiceBuilder
>  {
> +    /* The DirectoryService instance */
>     private DirectoryService directoryService = null;
> +
>     private Partition wrappedPartition = null;
> +
> +    /** The Schema partition */
>     private SchemaPartition schemaPartition = null;
>
>
>     public DirectoryServiceBuilder() throws Exception
>     {
>         directoryService = new DefaultDirectoryService();
> -        wrappedPartition = new AvlPartition();
> -        schemaPartition = new SchemaPartition();
>     }
>
>
> -    public void build() throws Exception
> +    /**
> +     * Build the working directory
> +     */
> +    private void buildWorkingDirectory( String name )
> +    {
> +        String workingDirectory = System.getProperty( "workingDirectory" );
> +
> +        if ( workingDirectory == null )
> +        {
> +            String path = DirectoryServiceBuilder.class.getResource( ""
> ).getPath();
> +            int targetPos = path.indexOf( "target" );
> +            workingDirectory = path.substring( 0, targetPos + 6 ) +
> "/server-work-" + name;
> +        }
> +
> +        directoryService.setWorkingDirectory( new File( workingDirectory )
> );
> +    }
> +
> +
> +    private void initSchema() throws Exception
> +    {
> +        SchemaPartition schemaPartition =
> directoryService.getSchemaService().getSchemaPartition();
> +
> +        // Init the LdifPartition
> +        LdifPartition ldifPartition = new LdifPartition();
> +        String workingDirectory =
> directoryService.getWorkingDirectory().getPath();
> +        ldifPartition.setWorkingDirectory( workingDirectory + "/schema" );
> +
> +        // Extract the schema on disk (a brand new one) and load the
> registries
> +        File schemaRepository = new File( workingDirectory, "schema" );
> +        SchemaLdifExtractor extractor = new SchemaLdifExtractor( new File(
> workingDirectory ) );
> +        extractor.extractOrCopy();
> +
> +        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 );
> +
> +        List<Throwable> errors = schemaManager.getErrors();
> +
> +        if ( errors.size() != 0 )
> +        {
> +            throw new Exception( "Schema load failed : " +
> ExceptionUtils.printErrors( errors ) );
> +        }
> +    }
> +
> +
> +    private void initChangeLog()
> +    {
> +        directoryService.getChangeLog().setEnabled( true );
> +    }
> +
> +
> +    private void initSystemPartition() throws Exception
> +    {
> +        // change the working directory to something that is unique
> +        // on the system and somewhere either under target directory
> +        // or somewhere in a temp area of the machine.
> +
> +        // Inject the System Partition
> +        Partition systemPartition = new JdbmPartition();
> +        systemPartition.setId( "system" );
> +        ( ( JdbmPartition ) systemPartition ).setCacheSize( 500 );
> +        systemPartition.setSuffix( ServerDNConstants.SYSTEM_DN );
> +        systemPartition.setSchemaManager(
> directoryService.getSchemaManager() );
> +        ( ( JdbmPartition ) systemPartition ).setPartitionDir(
> +            new File( directoryService.getWorkingDirectory(), "system" ) );
> +
> +        // Add objectClass attribute for the system partition
> +        Set<Index<?, ServerEntry>> indexedAttrs = new HashSet<Index<?,
> ServerEntry>>();
> +        indexedAttrs.add( new JdbmIndex<Object, ServerEntry>(
> SchemaConstants.OBJECT_CLASS_AT ) );
> +        ( ( JdbmPartition ) systemPartition ).setIndexedAttributes(
> indexedAttrs );
> +
> +        directoryService.setSystemPartition( systemPartition );
> +    }
> +
> +
> +    public void initJdbmPartition( String name, String suffix ) throws
> Exception
> +    {
> +        Partition partition = new JdbmPartition();
> +        partition.setId( name );
> +        partition.setSuffix( suffix );
> +        partition.setSchemaManager( directoryService.getSchemaManager() );
> +        ( ( JdbmPartition ) partition ).setPartitionDir(
> +            new File( directoryService.getWorkingDirectory(), name ) );
> +        directoryService.addPartition( partition );
> +
> +    }
> +
> +
> +    public void build( String name ) throws Exception
>     {
> -        schemaPartition.setWrappedPartition( wrappedPartition );
> -        schemaPartition.initialize();
> +        buildWorkingDirectory( name );
> +        initSchema();
> +        initChangeLog();
> +        initSystemPartition();
> +
> +        directoryService.startup();
>     }
>
>   


Mime
View raw message