You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by go...@apache.org on 2012/01/09 03:30:40 UTC

svn commit: r1229006 - in /directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub: ComponentHub.java ComponentSchemaManager.java ConfigurationManager.java

Author: gokturk
Date: Mon Jan  9 02:30:39 2012
New Revision: 1229006

URL: http://svn.apache.org/viewvc?rev=1229006&view=rev
Log:
* Direct config partition access in ConfigurationHandler is handled.
* Some revisions on ComponentSchemaManager
* Side modifications on ComponentHub

Modified:
    directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java
    directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
    directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ConfigurationManager.java

Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java?rev=1229006&r1=1229005&r2=1229006&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java Mon Jan  9 02:30:39 2012
@@ -22,10 +22,12 @@ package org.apache.directory.server.comp
 
 import java.util.Dictionary;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.directory.server.component.ADSComponent;
 import org.apache.directory.server.component.hub.listener.HubListener;
+import org.apache.directory.server.component.instance.ADSComponentInstance;
 import org.apache.directory.server.component.instance.DefaultComponentInstanceGenerator;
 import org.apache.directory.server.component.schema.DefaultComponentSchemaGenerator;
 import org.apache.directory.server.component.utilities.ADSComponentHelper;
@@ -177,19 +179,26 @@ public class ComponentHub implements Eve
         this.instanceDir = instanceDir;
         this.schemaPartition = schemaPartition;
         this.configPartition = configPartition;
-        
+
         componentSchemaManager = new ComponentSchemaManager( schemaPartition );
         configManager = new ConfigurationManager( configPartition, componentSchemaManager );
-
-        // Initialized here because of the IPojo's object initialization routine !
-        componentSchemaManager.addSchemaGenerator( Interceptor.class.getName(), new DefaultComponentSchemaGenerator() );
-        componentSchemaManager.addSchemaGenerator( Partition.class.getName(), new DefaultComponentSchemaGenerator() );
         componentManager = new ComponentManager( configManager );
 
-        componentManager.addInstanceGenerator( Interceptor.class.getName(), new DefaultComponentInstanceGenerator() );
-        componentManager.addInstanceGenerator( Partition.class.getName(), new DefaultComponentInstanceGenerator() );
-
-        //compSchemaManager.addSchemaGenerator( DirectoryBackedService.class.getName(), new DefaultComponentSchemaGenerator() );
+        // Adding default schema generators for component types those will be managed
+        componentSchemaManager.addSchemaGenerator( ADSConstants.ADS_COMPONENT_TYPE_INTERCEPTOR,
+            new DefaultComponentSchemaGenerator() );
+        componentSchemaManager.addSchemaGenerator( ADSConstants.ADS_COMPONENT_TYPE_PARTITION,
+            new DefaultComponentSchemaGenerator() );
+        componentSchemaManager.addSchemaGenerator( ADSConstants.ADS_COMPONENT_TYPE_SERVER,
+            new DefaultComponentSchemaGenerator() );
+
+        // Adding default instance generators for component types those will be managed
+        componentManager.addInstanceGenerator( ADSConstants.ADS_COMPONENT_TYPE_INTERCEPTOR,
+            new DefaultComponentInstanceGenerator() );
+        componentManager.addInstanceGenerator( ADSConstants.ADS_COMPONENT_TYPE_PARTITION,
+            new DefaultComponentInstanceGenerator() );
+        componentManager.addInstanceGenerator( ADSConstants.ADS_COMPONENT_TYPE_SERVER,
+            new DefaultComponentInstanceGenerator() );
     }
 
 
@@ -395,7 +404,7 @@ public class ComponentHub implements Eve
         component.setFactory( factory );
         component.setComponentType( componentType );
         component.setComponentName( ADSComponentHelper.getComponentName( component.getFactory() ) );
-        component.setComponentVersion( ADSComponentHelper.getComponentVersion( component.getFactory() ) );
+        component.setComponentVersion( ADSComponentHelper.getComponentVersion( component ) );
 
         configManager.pairWithComponent( component );
 

Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java?rev=1229006&r1=1229005&r2=1229006&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java Mon Jan  9 02:30:39 2012
@@ -132,6 +132,11 @@ public class ComponentSchemaManager
         }
 
         ADSComponentSchema schema = generateComponentSchema( component );
+        if ( schema == null )
+        {
+            throw new LdapException( "Notregistered component type in schema generator." );
+        }
+        
         injectSchemaElements( schema );
     }
 
@@ -149,7 +154,8 @@ public class ComponentSchemaManager
         ComponentSchemaGenerator generator = schemaGenerators.get( componentType );
         if ( generator == null )
         {
-            generator = new DefaultComponentSchemaGenerator();
+            LOG.error( "No schema generator is registered for component type :" + componentType );
+            return null;
         }
 
         ADSComponentSchema schema = generator.generateADSComponentSchema( component );

Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ConfigurationManager.java?rev=1229006&r1=1229005&r2=1229006&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ConfigurationManager.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ConfigurationManager.java Mon Jan  9 02:30:39 2012
@@ -31,6 +31,7 @@ import org.apache.directory.server.compo
 import org.apache.directory.server.component.instance.ADSComponentInstance;
 import org.apache.directory.server.component.utilities.ADSComponentHelper;
 import org.apache.directory.server.component.utilities.ADSSchemaConstants;
+import org.apache.directory.server.component.utilities.EntryNormalizer;
 import org.apache.directory.server.component.utilities.LdifConfigHelper;
 import org.apache.directory.server.core.api.interceptor.context.AddOperationContext;
 import org.apache.directory.server.core.api.interceptor.context.LookupOperationContext;
@@ -48,6 +49,7 @@ import org.apache.directory.shared.ldap.
 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.filter.EqualityNode;
+import org.apache.directory.shared.ldap.model.filter.PresenceNode;
 import org.apache.directory.shared.ldap.model.ldif.LdifEntry;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 import org.apache.directory.shared.ldap.model.message.SearchScope;
@@ -66,6 +68,11 @@ public class ConfigurationManager
     private final Logger LOG = LoggerFactory.getLogger( ConfigurationManager.class );
 
     /*
+     * SchemaManager reference.
+     */
+    private SchemaManager schemaManager;
+
+    /*
      * Config Partition reference.
      */
     private SingleFileLdifPartition configPartition;
@@ -80,6 +87,7 @@ public class ConfigurationManager
     {
         this.configPartition = configPartition;
         this.componentSchemaManager = componentSchemaManager;
+        this.schemaManager = configPartition.getSchemaManager();
     }
 
 
@@ -107,13 +115,14 @@ public class ConfigurationManager
                 return;
             }
 
-            checkAndCreateComponentParentEntry( component );
+            checkAndCreateComponentTypeEntry( component );
 
             List<LdifEntry> componentEntries = generateComponentEntries( component );
 
             for ( LdifEntry le : componentEntries )
             {
-                AddOperationContext ac = new AddOperationContext( null, le.getEntry() );
+                Entry normalizedComponentEntry = EntryNormalizer.normalizeEntry( le.getEntry() );
+                AddOperationContext ac = new AddOperationContext( null, normalizedComponentEntry );
                 try
                 {
                     configPartition.add( ac );
@@ -128,20 +137,18 @@ public class ConfigurationManager
         }
 
         List<Entry> instanceEntries = getCachedInstances( component );
-        if ( instanceEntries == null )
+        if ( instanceEntries != null )
         {
-            return;
-        }
+            List<CachedComponentInstance> cachedInstances = new ArrayList<CachedComponentInstance>();
+            for ( Entry e : instanceEntries )
+            {
+                Properties conf = LdifConfigHelper.instanceEntryToConfiguration( e );
+                cachedInstances.add( new CachedComponentInstance( e.getDn().getName(), conf ) );
+            }
 
-        List<CachedComponentInstance> cachedInstances = new ArrayList<CachedComponentInstance>();
-        for ( Entry e : instanceEntries )
-        {
-            Properties conf = LdifConfigHelper.instanceEntryToConfiguration( e );
-            cachedInstances.add( new CachedComponentInstance( e.getDn().getName(), conf ) );
+            component.setCachedInstances( cachedInstances );
         }
 
-        component.setCachedInstances( cachedInstances );
-
         setActiveOnHouseKeeping( component );
     }
 
@@ -154,9 +161,9 @@ public class ConfigurationManager
     public void injectInstance( ADSComponentInstance instance )
     {
         LdifEntry instanceEntry = LdifConfigHelper.instanceToLdif( instance );
+        Entry normalizedInstanceEntry = EntryNormalizer.normalizeEntry( instanceEntry.getEntry() );
 
-        AddOperationContext ac = new AddOperationContext( null );
-        ac.setEntry( instanceEntry.getEntry() );
+        AddOperationContext ac = new AddOperationContext( null, normalizedInstanceEntry );
 
         try
         {
@@ -182,12 +189,15 @@ public class ConfigurationManager
     {
         try
         {
-            Attribute purgeAttrib = new DefaultAttribute( ADSSchemaConstants.ADS_COMPONENT_ATTRIB_PURGE, "0" );
+            AttributeType purgeAttribType = schemaManager
+                .getAttributeType( ADSSchemaConstants.ADS_COMPONENT_ATTRIB_PURGE_OID );
+            Attribute purgeAttrib = new DefaultAttribute( purgeAttribType, "0" );
+
             DefaultModification dm = new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, purgeAttrib );
 
-            String componentDn = ADSComponentHelper.getComponentDn( component );
+            Dn componentDn = EntryNormalizer.normalizeDn( new Dn( ADSComponentHelper.getComponentDn( component ) ) );
 
-            configPartition.modify( new Dn( componentDn ), dm );
+            configPartition.modify( componentDn, dm );
         }
         catch ( Exception e )
         {
@@ -206,11 +216,13 @@ public class ConfigurationManager
      */
     private Entry getComponentEntry( ADSComponent component )
     {
-        String componentDn = ADSComponentHelper.getComponentDn( component );
-        LookupOperationContext luc = new LookupOperationContext( null );
         try
         {
-            luc.setDn( new Dn( componentDn ) );
+            Dn componentDn = EntryNormalizer.normalizeDn( new Dn( ADSComponentHelper.getComponentDn( component ) ) );
+
+            LookupOperationContext luc = new LookupOperationContext( null );
+            luc.setDn( componentDn );
+
             Entry e = configPartition.lookup( luc );
 
             return e;
@@ -241,6 +253,7 @@ public class ConfigurationManager
         String componentName = component.getComponentName();
         String componentType = component.getComponentType();
         String componentOCName = ADSComponentHelper.getComponentObjectClass( component );
+        String componentVersion = ADSComponentHelper.getComponentVersion( component );
 
         try
         {
@@ -252,7 +265,8 @@ public class ConfigurationManager
                 ADSSchemaConstants.ADS_COMPONENT_ATTRIB_NAME + ":" + componentName,
                 ADSSchemaConstants.ADS_COMPONENT_ATTRIB_TYPE + ":" + componentType,
                 ADSSchemaConstants.ADS_COMPONENT_ATTRIB_OCNAME + ":" + componentOCName,
-                ADSSchemaConstants.ADS_COMPONENT_ATTRIB_PURGE + ":" + "0" ) );
+                ADSSchemaConstants.ADS_COMPONENT_ATTRIB_PURGE + ":" + "0",
+                ADSSchemaConstants.ADS_COMPONENT_ATTRIB_TYPE + ":" + componentVersion ) );
 
             ldifs.add( new LdifEntry( componentInstancesDn,
                 "objectClass:organizationalUnit",
@@ -284,27 +298,24 @@ public class ConfigurationManager
         List<Entry> instances = new ArrayList<Entry>();
 
         SearchEngine<Entry, Long> se = configPartition.getSearchEngine();
-        SchemaManager schemaManager = configPartition.getSchemaManager();
 
-        AttributeType adsdAt = schemaManager.getAttributeType( SchemaConstants.OBJECT_CLASS_AT );
-        EqualityNode<?> filter = new EqualityNode( adsdAt, new StringValue( "organizationalUnit" ) );
+        AttributeType adsInstanceAttrib = schemaManager
+            .getAttributeType( ADSSchemaConstants.ADS_COMPONENT_INSTANCE_ATTRIB_NAME_OID );
+
+        PresenceNode filter = new PresenceNode( adsInstanceAttrib );
         SearchControls controls = new SearchControls();
         controls.setSearchScope( SearchScope.SUBTREE.ordinal() );
+
         IndexCursor<Long, Entry, Long> cursor = null;
 
         try
         {
-            // Do the search
-            cursor = se.cursor( new Dn( componentInstancesDn ), AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls );
+            // Get the normalized search base Dn
+            Dn normalizedBaseDn = EntryNormalizer.normalizeDn( new Dn( componentInstancesDn ) );
 
-            // First, check if we have some entries to process.
-            if ( !cursor.next() )
-            {
-                LOG.error( "No instances found for component:" + component );
-                return null;
-            }
+            // Do the search
+            cursor = se.cursor( normalizedBaseDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls );
 
-            // Skip the first Entry by invoking cursor.next() in while clause.
             while ( cursor.next() )
             {
                 ForwardIndexEntry<Long, Long> forwardEntry = ( ForwardIndexEntry<Long, Long> ) cursor
@@ -351,11 +362,12 @@ public class ConfigurationManager
      *
      * @param component ADSComponent to create parent entry on DIT.
      */
-    private void checkAndCreateComponentParentEntry( ADSComponent component )
+    private void checkAndCreateComponentTypeEntry( ADSComponent component )
     {
         try
         {
-            Dn componentBaseDn = new Dn( ADSComponentHelper.getComponentParentRdn( component ) );
+            Dn componentBaseDn = EntryNormalizer.normalizeDn( new Dn( ADSComponentHelper
+                .getComponentParentRdn( component ) ) );
 
             LookupOperationContext loc = new LookupOperationContext( null );
             loc.setDn( componentBaseDn );
@@ -366,12 +378,15 @@ public class ConfigurationManager
                 return;
             }
 
-            LdifEntry componentParentEntry = new LdifEntry( componentBaseDn,
+            Entry componentParentEntry = new LdifEntry( componentBaseDn,
                 "objectClass:organizationalUnit",
-                "objectClass:top"
-                );
+                "objectClass:top",
+                componentBaseDn.getRdn().getUpType() + ":" + componentBaseDn.getRdn().getUpValue()
+                ).getEntry();
+
+            AddOperationContext aoc = new AddOperationContext( null,
+                EntryNormalizer.normalizeEntry( componentParentEntry ) );
 
-            AddOperationContext aoc = new AddOperationContext( null, componentParentEntry.getEntry() );
             configPartition.add( aoc );
         }
         catch ( LdapInvalidDnException e )