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/06/11 15:12:57 UTC

svn commit: r1348830 - in /directory/apacheds/branches/apacheds-osgi/hub: api/src/main/java/org/apache/directory/server/hub/api/ api/src/main/java/org/apache/directory/server/hub/api/component/ api/src/main/java/org/apache/directory/server/hub/api/comp...

Author: gokturk
Date: Mon Jun 11 13:12:56 2012
New Revision: 1348830

URL: http://svn.apache.org/viewvc?rev=1348830&view=rev
Log:
* specific ipojo component types' assumptions on on being factory and being exclusive is changed. They can specify those aspects now.

* new exclusive flag is added to DirectoryComponent. When a factory is exclusive, while reconfiguring its immutable property, its previous reference is disposed prior to creating new reference, avoiding any exclusive resource clash.

* IPojoComponentConstants class in hub-api is now merged with DcHandlerConstants in hub-connector-ipojo-handler.

* constants concepts in DirectoryMeta is now renamed as attributes for more meaningful naming schema.

Removed:
    directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/component/util/IPojoComponentConstants.java
Modified:
    directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/AbstractHubClient.java
    directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/ComponentHub.java
    directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/component/DcConfiguration.java
    directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/meta/DcMetadataDescriptor.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/core/src/main/java/org/apache/directory/server/hub/connector/ipojo/core/DcMetadataBuilder.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryComponent.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryInterceptor.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryPartition.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryServer.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/AbstractDcHandler.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DcHandlerConstants.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryComponentHandler.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryInterceptorHandler.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryPartitionHandler.java
    directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryServerHandler.java
    directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/ComponentHubImpl.java
    directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/HubClientManager.java
    directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/configurator/ConfiguratorInterceptor.java
    directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/connector/collection/CollectionMetaDescriptorGenerator.java
    directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreConfigManager.java
    directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreSchemaConstants.java

Modified: directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/AbstractHubClient.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/AbstractHubClient.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/AbstractHubClient.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/AbstractHubClient.java Mon Jun 11 13:12:56 2012
@@ -21,6 +21,7 @@
 package org.apache.directory.server.hub.api;
 
 
+import org.apache.directory.server.hub.api.component.DcConfiguration;
 import org.apache.directory.server.hub.api.component.DirectoryComponent;
 import org.apache.directory.server.hub.api.exception.HubAbortException;
 
@@ -33,19 +34,26 @@ public class AbstractHubClient
     }
 
 
-    public void componentDeactivating( DirectoryComponent component )
+    public void componentDeactivating( DirectoryComponent component ) throws HubAbortException
     {
 
     }
 
 
-    public void componentRemoving( DirectoryComponent component ) throws HubAbortException
+    public void componentDeactivated( DirectoryComponent component )
     {
 
     }
 
 
-    public void componentReconfigured( DirectoryComponent component )
+    public void componentReconfiguring( DirectoryComponent component, DcConfiguration newConfiguration )
+        throws HubAbortException
+    {
+
+    }
+
+
+    public void componentReconfigured( DirectoryComponent component, boolean newInstance )
     {
 
     }

Modified: directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/ComponentHub.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/ComponentHub.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/ComponentHub.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/ComponentHub.java Mon Jun 11 13:12:56 2012
@@ -20,6 +20,10 @@
 
 package org.apache.directory.server.hub.api;
 
+
+import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
+
 import org.apache.directory.server.hub.api.component.DcConfiguration;
 import org.apache.directory.server.hub.api.component.DirectoryComponent;
 import org.apache.directory.server.hub.api.exception.HubAbortException;
@@ -32,8 +36,6 @@ import org.apache.directory.server.hub.a
 import org.apache.directory.server.hub.api.registry.PidHandlerRegistry;
 
 
-
-
 public interface ComponentHub
 {
 
@@ -83,4 +85,10 @@ public interface ComponentHub
 
     public abstract PidHandlerRegistry getPIDHandlerRegistry();
 
+
+    public abstract ReadLock getReadLock();
+
+
+    public abstract WriteLock getWriteLock();
+
 }
\ No newline at end of file

Modified: directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/component/DcConfiguration.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/component/DcConfiguration.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/component/DcConfiguration.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/component/DcConfiguration.java Mon Jun 11 13:12:56 2012
@@ -33,7 +33,7 @@ public class DcConfiguration implements 
     private Hashtable<String, DcProperty> propertyMap;
     private Integer collectionIndex = null;
 
-    private Hashtable<String, String> constantProperties = new Hashtable<String, String>();
+    private Hashtable<String, String> attributes = new Hashtable<String, String>();
 
 
     public DcConfiguration( List<DcProperty> properties )
@@ -71,6 +71,12 @@ public class DcConfiguration implements 
 
     public void addProperty( DcProperty property )
     {
+        DcProperty existing = propertyMap.get( property.getName() );
+        if ( existing != null )
+        {
+            removeProperty( property.getName() );
+        }
+
         properties.add( property );
         propertyMap.put( property.getName(), property );
     }
@@ -104,15 +110,15 @@ public class DcConfiguration implements 
     }
 
 
-    public void addConstant( String name, String value )
+    public void addAttribute( String name, String value )
     {
-        constantProperties.put( name, value );
+        attributes.put( name, value );
     }
 
 
-    public String getConstantProperty( String name )
+    public String getAttribute( String name )
     {
-        return constantProperties.get( name );
+        return attributes.get( name );
     }
 
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/meta/DcMetadataDescriptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/meta/DcMetadataDescriptor.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/meta/DcMetadataDescriptor.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/api/src/main/java/org/apache/directory/server/hub/api/meta/DcMetadataDescriptor.java Mon Jun 11 13:12:56 2012
@@ -40,28 +40,31 @@ public class DcMetadataDescriptor
 
     private Hashtable<String, DcPropertyDescription> propertyMap;
 
-    private Hashtable<String, String> constants;
+    private Hashtable<String, String> attributes;
 
     private boolean factory;
+    private boolean exclusive;
 
 
     public DcMetadataDescriptor(
         String metadataPID,
         boolean isFactory,
+        boolean isExclusive,
         Version metaVersion,
         String className,
         String[] implemented,
         String[] extended,
-        Hashtable<String, String> constants,
+        Hashtable<String, String> attributes,
         DcPropertyDescription[] properties )
     {
         this.metadataPID = metadataPID;
         this.factory = isFactory;
+        this.exclusive = isExclusive;
         this.metaVersion = metaVersion;
         this.className = className;
         this.implemented = implemented;
         this.extended = extended;
-        this.constants = constants;
+        this.attributes = attributes;
         this.properties = properties;
 
         propertyMap = new Hashtable<String, DcPropertyDescription>();
@@ -88,6 +91,12 @@ public class DcMetadataDescriptor
     }
 
 
+    public boolean isExclusive()
+    {
+        return exclusive;
+    }
+
+
     public Version getMetaVersion()
     {
         return metaVersion;
@@ -184,9 +193,9 @@ public class DcMetadataDescriptor
     }
 
 
-    public Hashtable<String, String> getConstants()
+    public Hashtable<String, String> getAttributes()
     {
-        return constants;
+        return attributes;
     }
 
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/core/src/main/java/org/apache/directory/server/hub/connector/ipojo/core/DcMetadataBuilder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/core/src/main/java/org/apache/directory/server/hub/connector/ipojo/core/DcMetadataBuilder.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/core/src/main/java/org/apache/directory/server/hub/connector/ipojo/core/DcMetadataBuilder.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/core/src/main/java/org/apache/directory/server/hub/connector/ipojo/core/DcMetadataBuilder.java Mon Jun 11 13:12:56 2012
@@ -25,9 +25,10 @@ import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.List;
+
+import org.apache.directory.server.component.handler.ipojo.DcHandlerConstants;
 import org.apache.directory.server.component.handler.ipojo.property.DirectoryPropertyDescription;
 import org.apache.directory.server.hub.api.component.util.ComponentConstants;
-import org.apache.directory.server.hub.api.component.util.IPojoComponentConstants;
 import org.apache.directory.server.hub.api.meta.DcMetadataDescriptor;
 import org.apache.directory.server.hub.api.meta.DcPropertyDescription;
 import org.apache.felix.ipojo.ComponentFactory;
@@ -44,10 +45,11 @@ public class DcMetadataBuilder
         String metadataPID = factory.getName();
         Version metaVersion = factory.getBundleContext().getBundle().getVersion();
         boolean isFactory = true;
+        boolean isExclusive = false;
 
         List<DcPropertyDescription> properties = new ArrayList<DcPropertyDescription>();
 
-        Hashtable<String, String> constants = new Hashtable<String, String>();
+        Hashtable<String, String> attributes = new Hashtable<String, String>();
 
         for ( PropertyDescription property : factory.getComponentDescription().getProperties() )
         {
@@ -59,7 +61,6 @@ public class DcMetadataBuilder
             String type = normalizeType( property.getType() );
             String description = "";
             String containerFor = "";
-            
 
             DirectoryPropertyDescription dpd = null;
             if ( property instanceof DirectoryPropertyDescription )
@@ -82,13 +83,17 @@ public class DcMetadataBuilder
 
             if ( constant )
             {
-                if ( name.equals( IPojoComponentConstants.PROP_IS_FACTORY ) )
+                if ( name.equals( DcHandlerConstants.META_IS_FACTORY ) )
                 {
                     isFactory = Boolean.parseBoolean( defaultValue );
                 }
+                else if ( name.equals( DcHandlerConstants.META_IS_EXCLUSIVE ) )
+                {
+                    isExclusive = Boolean.parseBoolean( defaultValue );
+                }
                 else
                 {
-                    constants.put( name, defaultValue );
+                    attributes.put( name, defaultValue );
                 }
             }
             else
@@ -111,8 +116,9 @@ public class DcMetadataBuilder
         String[] implemented = parseArray( interfaces );
         String[] extended = parseArray( sclasses );
 
-        DcMetadataDescriptor metadata = new DcMetadataDescriptor( metadataPID, isFactory, metaVersion, className,
-            implemented, extended, constants, properties.toArray( new DcPropertyDescription[0] ) );
+        DcMetadataDescriptor metadata = new DcMetadataDescriptor( metadataPID, isFactory, isExclusive, metaVersion,
+            className,
+            implemented, extended, attributes, properties.toArray( new DcPropertyDescription[0] ) );
 
         return metadata;
     }

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryComponent.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryComponent.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryComponent.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryComponent.java Mon Jun 11 13:12:56 2012
@@ -33,5 +33,8 @@ import java.lang.annotation.Target;
 @Target(ElementType.TYPE)
 public @interface DirectoryComponent
 {
-    
+    boolean factory() default true;
+
+
+    boolean exclusive() default false;
 }
\ No newline at end of file

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryInterceptor.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryInterceptor.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryInterceptor.java Mon Jun 11 13:12:56 2012
@@ -36,6 +36,11 @@ import org.apache.directory.server.hub.a
 @Target(ElementType.TYPE)
 public @interface DirectoryInterceptor
 {
+	boolean factory() default true;
+
+
+    boolean exclusive() default false;
+    
     /*
      * Used to specify interception point for all component instances
      * instantiated from factory.

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryPartition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryPartition.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryPartition.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryPartition.java Mon Jun 11 13:12:56 2012
@@ -32,5 +32,8 @@ import java.lang.annotation.Target;
 @Target(ElementType.TYPE)
 public @interface DirectoryPartition
 {
+	boolean factory() default true;
 
+
+    boolean exclusive() default false;
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryServer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryServer.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryServer.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/DirectoryServer.java Mon Jun 11 13:12:56 2012
@@ -33,5 +33,8 @@ import java.lang.annotation.Target;
 @Target(ElementType.TYPE)
 public @interface DirectoryServer
 {
+	boolean factory() default true;
 
+
+    boolean exclusive() default false;
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/AbstractDcHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/AbstractDcHandler.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/AbstractDcHandler.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/AbstractDcHandler.java Mon Jun 11 13:12:56 2012
@@ -194,6 +194,7 @@ public abstract class AbstractDcHandler 
             // If property is constructor index then it must be mandatory.
             if ( paramIndex != null )
             {
+                immutable = true;
                 mandatory = true;
             }
 

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DcHandlerConstants.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DcHandlerConstants.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DcHandlerConstants.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DcHandlerConstants.java Mon Jun 11 13:12:56 2012
@@ -40,8 +40,18 @@ public class DcHandlerConstants
     public static final String DSSERVER_HANDLER_NS = "org.apache.directory.server.component.handler";
 
     /*
-     * Property name for specifying components owning ApacheDS instance name; 
+     * Property names for meta properties at handler level
      */
     public static final String DSCOMPONENT_OWNER_PROP_NAME = "dscomponent.owner";
+    public static final String DSCOMPONENT_FACTORY_PROP_NAME = "factory";
+    public static final String DSCOMPONENT_EXCLUSIVE_PROP_NAME = "exclusive";
+    
+    /*
+     * Property names for meta proeprties at connector level 
+     */
+    public static final String META_IS_FACTORY = "isFactory";
+    public static final String META_IS_EXCLUSIVE = "isImmutable";
+    public static final String INTERCEPTOR_INTERCEPTION_POINT = "interceptionPoint";
+    public static final String INTERCEPTOR_INTERCEPTOR_OPERATIONS = "operations";
 
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryComponentHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryComponentHandler.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryComponentHandler.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryComponentHandler.java Mon Jun 11 13:12:56 2012
@@ -26,6 +26,7 @@ import java.util.Hashtable;
 import org.apache.felix.ipojo.annotations.Handler;
 import org.apache.felix.ipojo.metadata.Element;
 
+
 @Handler(name = DcHandlerConstants.DSCOMPONENT_HANDLER_NAME, namespace = DcHandlerConstants.DSCOMPONENT_HANDLER_NS)
 public class DirectoryComponentHandler extends AbstractDcHandler
 {
@@ -45,9 +46,28 @@ public class DirectoryComponentHandler e
 
 
     @Override
-    protected Hashtable<String,String> extractConstantProperties( Element ipojoMetadata )
+    protected Hashtable<String, String> extractConstantProperties( Element ipojoMetadata )
     {
-        return null;
+        Hashtable<String, String> constants = new Hashtable<String, String>();
+
+        Element[] components = ipojoMetadata.getElements( getHandlerName(), getHandlerNamespaceName() );
+        // Only one interceptor per class is allowed
+        Element component = components[0];
+
+        String isFactory = component.getAttribute( DcHandlerConstants.DSCOMPONENT_FACTORY_PROP_NAME );
+        if ( isFactory != null )
+        {
+            constants.put( DcHandlerConstants.META_IS_FACTORY, isFactory );
+        }
+
+        String isExclusive = component.getAttribute( DcHandlerConstants.DSCOMPONENT_EXCLUSIVE_PROP_NAME );
+        if ( isExclusive != null )
+        {
+            constants.put( DcHandlerConstants.META_IS_EXCLUSIVE, isExclusive );
+        }
+
+        return constants;
+
     }
 
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryInterceptorHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryInterceptorHandler.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryInterceptorHandler.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryInterceptorHandler.java Mon Jun 11 13:12:56 2012
@@ -23,7 +23,6 @@ package org.apache.directory.server.comp
 
 import java.util.Hashtable;
 
-import org.apache.directory.server.hub.api.component.util.IPojoComponentConstants;
 import org.apache.felix.ipojo.annotations.Handler;
 import org.apache.felix.ipojo.metadata.Element;
 
@@ -53,13 +52,26 @@ public class DirectoryInterceptorHandler
         // Only one interceptor per class is allowed
         Element interceptor = interceptors[0];
 
-        String interceptionPoint = interceptor.getAttribute( IPojoComponentConstants.PROP_INTERCEPTION_POINT );
-        String interceptorOperations = interceptor.getAttribute( IPojoComponentConstants.PROP_INTERCEPTOR_OPERATIONS );
-
         Hashtable<String, String> constants = new Hashtable<String, String>();
-        constants.put( IPojoComponentConstants.PROP_INTERCEPTION_POINT, interceptionPoint );
-        constants.put( IPojoComponentConstants.PROP_INTERCEPTOR_OPERATIONS, interceptorOperations );
-        constants.put( IPojoComponentConstants.PROP_IS_FACTORY, "false" );
+
+        String interceptionPoint = interceptor.getAttribute( DcHandlerConstants.INTERCEPTOR_INTERCEPTION_POINT );
+        String interceptorOperations = interceptor
+            .getAttribute( DcHandlerConstants.INTERCEPTOR_INTERCEPTOR_OPERATIONS );
+
+        String isFactory = interceptor.getAttribute( DcHandlerConstants.DSCOMPONENT_FACTORY_PROP_NAME );
+        if ( isFactory != null )
+        {
+            constants.put( DcHandlerConstants.META_IS_FACTORY, isFactory );
+        }
+
+        String isExclusive = interceptor.getAttribute( DcHandlerConstants.DSCOMPONENT_EXCLUSIVE_PROP_NAME );
+        if ( isExclusive != null )
+        {
+            constants.put( DcHandlerConstants.META_IS_EXCLUSIVE, isExclusive );
+        }
+
+        constants.put( DcHandlerConstants.INTERCEPTOR_INTERCEPTION_POINT, interceptionPoint );
+        constants.put( DcHandlerConstants.INTERCEPTOR_INTERCEPTOR_OPERATIONS, interceptorOperations );
 
         return constants;
 

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryPartitionHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryPartitionHandler.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryPartitionHandler.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryPartitionHandler.java Mon Jun 11 13:12:56 2012
@@ -47,9 +47,27 @@ public class DirectoryPartitionHandler e
 
 
     @Override
-    protected Hashtable<String,String> extractConstantProperties( Element ipojoMetadata )
+    protected Hashtable<String, String> extractConstantProperties( Element ipojoMetadata )
     {
-        return null;
+        Element[] partitions = ipojoMetadata.getElements( getHandlerName(), getHandlerNamespaceName() );
+        // Only one partition per class is allowed
+        Element partition = partitions[0];
+
+        Hashtable<String, String> constants = new Hashtable<String, String>();
+        
+        String isFactory = partition.getAttribute( DcHandlerConstants.DSCOMPONENT_FACTORY_PROP_NAME );
+        if ( isFactory != null )
+        {
+            constants.put( DcHandlerConstants.META_IS_FACTORY, isFactory );
+        }
+
+        String isExclusive = partition.getAttribute( DcHandlerConstants.DSCOMPONENT_EXCLUSIVE_PROP_NAME );
+        if ( isExclusive != null )
+        {
+            constants.put( DcHandlerConstants.META_IS_EXCLUSIVE, isExclusive );
+        }
+
+        return constants;
     }
 
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryServerHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryServerHandler.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryServerHandler.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/connectors/ipojo/handler/src/main/java/org/apache/directory/server/component/handler/ipojo/DirectoryServerHandler.java Mon Jun 11 13:12:56 2012
@@ -49,7 +49,25 @@ public class DirectoryServerHandler exte
     @Override
     protected Hashtable<String,String> extractConstantProperties( Element ipojoMetadata )
     {
-        return null;
+        Element[] servers = ipojoMetadata.getElements( getHandlerName(), getHandlerNamespaceName() );
+        // Only one server per class is allowed
+        Element server = servers[0];
+
+        Hashtable<String, String> constants = new Hashtable<String, String>();
+
+        String isFactory = server.getAttribute( DcHandlerConstants.DSCOMPONENT_FACTORY_PROP_NAME );
+        if ( isFactory != null )
+        {
+            constants.put( DcHandlerConstants.META_IS_FACTORY, isFactory );
+        }
+
+        String isExclusive = server.getAttribute( DcHandlerConstants.DSCOMPONENT_EXCLUSIVE_PROP_NAME );
+        if ( isExclusive != null )
+        {
+            constants.put( DcHandlerConstants.META_IS_EXCLUSIVE, isExclusive );
+        }
+
+        return constants;
     }
 
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/ComponentHubImpl.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/ComponentHubImpl.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/ComponentHubImpl.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/ComponentHubImpl.java Mon Jun 11 13:12:56 2012
@@ -26,9 +26,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Hashtable;
 import java.util.List;
-import java.util.Properties;
 import java.util.Set;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
 
+import org.apache.directory.server.component.handler.ipojo.DcHandlerConstants;
 import org.apache.directory.server.core.api.interceptor.Interceptor;
 import org.apache.directory.server.hub.api.AbstractHubClient;
 import org.apache.directory.server.hub.api.ComponentHub;
@@ -39,11 +42,9 @@ import org.apache.directory.server.hub.a
 import org.apache.directory.server.hub.api.component.DirectoryComponent;
 import org.apache.directory.server.hub.api.component.DirectoryComponentConstants;
 import org.apache.directory.server.hub.api.component.util.InterceptionPoint;
-import org.apache.directory.server.hub.api.component.util.IPojoComponentConstants;
 import org.apache.directory.server.hub.api.component.util.InterceptorOperation;
 import org.apache.directory.server.hub.api.exception.BadConfigurationException;
 import org.apache.directory.server.hub.api.exception.ComponentInstantiationException;
-import org.apache.directory.server.hub.api.exception.ComponentReconfigurationException;
 import org.apache.directory.server.hub.api.exception.HubAbortException;
 import org.apache.directory.server.hub.api.exception.HubStoreException;
 import org.apache.directory.server.hub.api.exception.StoreNotValidException;
@@ -62,7 +63,6 @@ import org.apache.directory.server.hub.c
 import org.apache.directory.server.hub.core.util.DCDependency;
 import org.apache.directory.server.hub.core.util.ParentLink;
 import org.apache.directory.server.hub.core.util.DCDependency.DCDependencyType;
-import org.apache.felix.ipojo.IPojoContext;
 import org.osgi.framework.Version;
 
 
@@ -75,6 +75,10 @@ public class ComponentHubImpl implements
     private PidHandlerRegistry handlersReg = new PidHandlerRegistry();
     private ParentLinkRegistry parentLinksReg = new ParentLinkRegistry();
 
+    private ReentrantReadWriteLock hubLock = new ReentrantReadWriteLock();
+    private ReadLock readLock = hubLock.readLock();
+    private WriteLock writeLock = hubLock.writeLock();
+
     private CollectionConnector collectionConnector;
     public IPojoConnector ipojoConnector;
 
@@ -258,10 +262,15 @@ public class ComponentHubImpl implements
             catch ( BadConfigurationException e )
             {
                 throw new HubAbortException(
-                    "Active DirectoryComponent can not be reconfigured with incorrect configuration", e );
+                    "Active DirectoryComponent can not be reconfigured with invalid configuration", e );
             }
         }
 
+        clientManager.fireDCReconfiguring( component, newConfiguration );
+
+        boolean isExclusive = metadata.isExclusive();
+        boolean reinstantiate = false;
+
         // Immutable property change handling
         if ( component.getRuntimeInfo() != null )
         {
@@ -273,44 +282,95 @@ public class ComponentHubImpl implements
                     DcProperty oldProp = component.getConfiguration().getProperty( prop.getName() );
                     if ( oldProp != null && !( oldProp.getValue().equals( prop.getValue() ) ) )
                     {
-                        // We're changing immutable property of live component
-                        boolean wasDirty = component.isDirty();
-                        component.setDirty( false );
-
-                        try
-                        {
-                            removeComponent( component );
-                            component.setDirty( wasDirty );
-                            break;
-                        }
-                        catch ( HubAbortException e )
-                        {
-                            throw new HubAbortException(
-                                "Reconfiguration of immutable property led to re-instantiation, which has been rejected by hub",
-                                e );
-                        }
+                        reinstantiate = true;
                     }
                 }
             }
         }
 
-        if ( component.isDirty() )
+        DcConfiguration oldConfiguration = component.getConfiguration();
+        DcRuntime oldRuntime = component.getRuntimeInfo();
+
+        DcOperationsManager operations = handlersReg.getPIDHandler( component.getComponentManagerPID() );
+
+        component.setConfiguration( newConfiguration );
+        try
+        {
+            processConfiguration( component );
+        }
+        catch ( BadConfigurationException e )
+        {
+            throw new HubAbortException( "New configuration is rejected while processing", e );
+        }
+
+        if ( component.getRuntimeInfo() != null )
         {
             try
             {
-                store.updateComponent( component, newConfiguration );
+                if ( reinstantiate )
+                {
+                    if ( isExclusive )
+                    {
+                        operations.disposeComponent( component );
+                    }
+                    else
+                    {
+                        component.setRuntimeInfo( null );
+                    }
+                }
+                else
+                {
+                    operations.reconfigureComponent( component );
+                }
+
+                clientManager.fireDCReconfigured( component, reinstantiate );
+
+                List<ParentLink> parents = parentLinksReg.getParentLinks( component );
+                if ( parents != null )
+                {
+                    for ( ParentLink parentLink : parents )
+                    {
+                        DirectoryComponent parent = parentLink.getParent();
+                        DcConfiguration newParentConf = new DcConfiguration( component.getConfiguration() );
+                        newParentConf.addProperty( new DcProperty(
+                            DirectoryComponentConstants.DC_PROP_INNER_RECONF_NAME, parentLink
+                                .getLinkPoint() ) );
+
+                        updateComponent( parent, newParentConf );
+                    }
+                }
             }
-            catch ( HubStoreException e )
+            catch ( Exception e )
             {
-                throw new HubAbortException( "HubStore error raised while updating:" + component.getComponentPID(), e );
-            }
-        }
+                if ( reinstantiate && !isExclusive )
+                {
+                    component.setRuntimeInfo( oldRuntime );
+                    component.setConfiguration( oldConfiguration );
 
-        component.setConfiguration( newConfiguration );
+                    throw new HubAbortException( "Reconfiguration is rejected by target component:"
+                        + component.getComponentPID(), e );
+                }
+                else
+                {
+                    component.setConfiguration( oldConfiguration );
+                    try
+                    {
+                        processConfiguration( component );
+                        operations.reconfigureComponent( component );
 
-        if ( component.getRuntimeInfo() != null )
-        {
-            reconfigureComponent( component );
+                        throw new HubAbortException( "Reconfiguration is rejected by target component:"
+                            + component.getComponentPID(), e );
+                    }
+                    catch ( Exception e2 )
+                    {
+                        disposeComponent( component );
+
+                        throw new HubAbortException( "Reconfiguration reverted but component couldn't be saved:"
+                            + component.getComponentPID(), e );
+
+                    }
+                }
+            }
         }
         else
         {
@@ -319,6 +379,18 @@ public class ComponentHubImpl implements
                 instantiateComponent( component );
             }
         }
+
+        if ( component.isDirty() )
+        {
+            try
+            {
+                store.updateComponent( component, newConfiguration );
+            }
+            catch ( HubStoreException e )
+            {
+                // TODO Error log:Store couldn't be updated...
+            }
+        }
     }
 
 
@@ -372,7 +444,55 @@ public class ComponentHubImpl implements
     @Override
     public void removeComponent( DirectoryComponent component ) throws HubAbortException
     {
-        clientManager.fireDCRemoving( component );
+        clientManager.fireDCDeactivating( component );
+
+        List<ParentLink> parents = parentLinksReg.getParentLinks( component );
+        if ( parents != null )
+        {
+            List<ParentLink> alteredParents = new ArrayList<ParentLink>();
+            for ( ParentLink parentLink : parents )
+            {
+                DcConfiguration newParentConf = parentLink.getParent().getConfiguration();
+                DcProperty refProperty = newParentConf.getProperty( parentLink.getLinkPoint() );
+                refProperty.setValue( "null" );
+
+                try
+                {
+                    updateComponent( parentLink.getParent(), newParentConf );
+                    alteredParents.add( parentLink );
+                }
+                catch ( HubAbortException e )
+                {
+                    /*
+                     * At some parent, deletion rejected ! change already altered parents to previous state.
+                     */
+
+                    for ( ParentLink alteredLink : alteredParents )
+                    {
+                        DcConfiguration revertedConf = parentLink.getParent().getConfiguration();
+                        DcProperty refProperty2 = newParentConf.getProperty( parentLink.getLinkPoint() );
+                        refProperty.setValue( component.getComponentPID() );
+
+                        try
+                        {
+                            updateComponent( alteredLink.getParent(), revertedConf );
+                        }
+                        catch ( HubAbortException e2 )
+                        {
+                            // TODO log given parent couldn't be reverted from cancelled removal of its referenced property.
+                        }
+                    }
+                }
+            }
+        }
+
+        DcOperationsManager opManager = handlersReg.getPIDHandler( component.getComponentManagerPID() );
+        if ( opManager != null )
+        {
+            opManager.disposeComponent( component );
+        }
+
+        componentsReg.removeDirectoryComponent( component );
 
         if ( component.isDirty() )
         {
@@ -382,14 +502,9 @@ public class ComponentHubImpl implements
             }
             catch ( HubStoreException e )
             {
-                throw new HubAbortException( "Component couldn't be removed from store, it is still active.", e );
+                // TODO log: "Component couldn't be removed from store, it is still active."
             }
         }
-
-        handleComponentRemoval( component );
-
-        componentsReg.removeDirectoryComponent( component );
-
     }
 
 
@@ -599,12 +714,12 @@ public class ComponentHubImpl implements
         DcMetadataDescriptor metadata = metadatasReg.getMetadataDescriptor( component.getComponentManagerPID() );
 
         // Loading meta-constant properties into component
-        Hashtable<String, String> constants = metadata.getConstants();
-        if ( constants != null )
+        Hashtable<String, String> attributes = metadata.getAttributes();
+        if ( attributes != null )
         {
-            for ( String key : constants.keySet() )
+            for ( String key : attributes.keySet() )
             {
-                component.getConfiguration().addConstant( key, constants.get( key ) );
+                component.getConfiguration().addAttribute( key, attributes.get( key ) );
             }
         }
 
@@ -764,50 +879,9 @@ public class ComponentHubImpl implements
     }
 
 
-    private void reconfigureComponent( DirectoryComponent component )
-    {
-        DcOperationsManager opManager = handlersReg.getPIDHandler( component.getComponentManagerPID() );
-        if ( opManager == null )
-        {
-            return;
-        }
-
-        try
-        {
-            processConfiguration( component );
-            opManager.reconfigureComponent( component );
-
-            component.setFailFlag( false );
-            clientManager.fireDCReconfigured( component );
-
-            List<ParentLink> parents = parentLinksReg.getParentLinks( component );
-            if ( parents != null )
-            {
-                for ( ParentLink parentLink : parents )
-                {
-                    DirectoryComponent parent = parentLink.getParent();
-                    parent.getConfiguration().addProperty(
-                        new DcProperty( DirectoryComponentConstants.DC_PROP_INNER_RECONF_NAME, parentLink
-                            .getLinkPoint() ) );
-
-                    reconfigureComponent( parent );
-                }
-            }
-        }
-        catch ( ComponentReconfigurationException e )
-        {
-            component.setFailFlag( true );
-        }
-        catch ( BadConfigurationException e )
-        {
-            component.setFailFlag( true );
-        }
-    }
-
-
     private void disposeComponent( DirectoryComponent component )
     {
-        clientManager.fireDCDeactivating( component );
+        clientManager.fireDCDeactivated( component );
 
         List<ParentLink> parents = parentLinksReg.getParentLinks( component );
         if ( parents != null )
@@ -830,39 +904,14 @@ public class ComponentHubImpl implements
     }
 
 
-    private void handleComponentRemoval( DirectoryComponent component )
-    {
-        List<ParentLink> parents = parentLinksReg.getParentLinks( component );
-        if ( parents != null )
-        {
-            for ( ParentLink parentLink : parents )
-            {
-                DcProperty refProperty = parentLink.getParent().getConfiguration()
-                    .getProperty( parentLink.getLinkPoint() );
-                refProperty.setValue( "null" );
-
-                reconfigureComponent( parentLink.getParent() );
-            }
-        }
-
-        DcOperationsManager opManager = handlersReg.getPIDHandler( component.getComponentManagerPID() );
-        if ( opManager != null )
-        {
-            opManager.disposeComponent( component );
-        }
-
-        component.setRuntimeInfo( null );
-    }
-
-
     private void insertConfiguratorInterceptor()
     {
         configurator = new ConfiguratorInterceptor();
         configurator.init( this );
 
         DcConfiguration config = new DcConfiguration( new ArrayList<DcProperty>() );
-        config.addConstant( IPojoComponentConstants.PROP_INTERCEPTION_POINT, InterceptionPoint.END.toString() );
-        config.addConstant( IPojoComponentConstants.PROP_INTERCEPTOR_OPERATIONS,
+        config.addAttribute( DcHandlerConstants.INTERCEPTOR_INTERCEPTION_POINT, InterceptionPoint.END.toString() );
+        config.addAttribute( DcHandlerConstants.INTERCEPTOR_INTERCEPTOR_OPERATIONS,
             "[" +
                 InterceptorOperation.ADD + "," +
                 InterceptorOperation.DELETE + "," +
@@ -876,7 +925,7 @@ public class ComponentHubImpl implements
         component.setDirty( false );
 
         DcMetadataDescriptor configuratorMeta =
-            new DcMetadataDescriptor( "configuratorMeta", false, new Version( "2.0.0" ),
+            new DcMetadataDescriptor( "configuratorMeta", false, false, new Version( "2.0.0" ),
                 ConfiguratorInterceptor.class.getName(), new String[]
                     { Interceptor.class.getName() }, new String[0], null, new DcPropertyDescription[0] );
 
@@ -925,4 +974,18 @@ public class ComponentHubImpl implements
     {
         return handlersReg;
     }
+
+
+    @Override
+    public ReadLock getReadLock()
+    {
+        return readLock;
+    }
+
+
+    @Override
+    public WriteLock getWriteLock()
+    {
+        return writeLock;
+    }
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/HubClientManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/HubClientManager.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/HubClientManager.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/HubClientManager.java Mon Jun 11 13:12:56 2012
@@ -30,6 +30,7 @@ import org.apache.commons.collections.Mu
 import org.apache.commons.collections.map.MultiValueMap;
 import org.apache.directory.server.hub.api.AbstractHubClient;
 import org.apache.directory.server.hub.api.ComponentHub;
+import org.apache.directory.server.hub.api.component.DcConfiguration;
 import org.apache.directory.server.hub.api.component.DirectoryComponent;
 import org.apache.directory.server.hub.api.exception.HubAbortException;
 import org.apache.directory.server.hub.api.meta.DcMetadataDescriptor;
@@ -106,7 +107,17 @@ public class HubClientManager
     }
 
 
-    public void fireDCDeactivating( DirectoryComponent component )
+    public void fireDCDeactivated( DirectoryComponent component )
+    {
+        List<AbstractHubClient> clients = getRegisteredClients( component );
+        for ( AbstractHubClient client : clients )
+        {
+            client.componentDeactivated( component );
+        }
+    }
+
+
+    public void fireDCDeactivating( DirectoryComponent component ) throws HubAbortException
     {
         List<AbstractHubClient> clients = getRegisteredClients( component );
         for ( AbstractHubClient client : clients )
@@ -116,22 +127,23 @@ public class HubClientManager
     }
 
 
-    public void fireDCRemoving( DirectoryComponent component ) throws HubAbortException
+    public void fireDCReconfiguring( DirectoryComponent component, DcConfiguration newConfiguration )
+        throws HubAbortException
     {
         List<AbstractHubClient> clients = getRegisteredClients( component );
         for ( AbstractHubClient client : clients )
         {
-            client.componentRemoving( component );
+            client.componentReconfiguring( component, newConfiguration );
         }
     }
 
 
-    public void fireDCReconfigured( DirectoryComponent component )
+    public void fireDCReconfigured( DirectoryComponent component, boolean newInstance )
     {
         List<AbstractHubClient> clients = getRegisteredClients( component );
         for ( AbstractHubClient client : clients )
         {
-            client.componentReconfigured( component );
+            client.componentReconfigured( component, newInstance );
         }
     }
 

Modified: directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/configurator/ConfiguratorInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/configurator/ConfiguratorInterceptor.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/configurator/ConfiguratorInterceptor.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/configurator/ConfiguratorInterceptor.java Mon Jun 11 13:12:56 2012
@@ -100,7 +100,9 @@ public class ConfiguratorInterceptor ext
                 parentDn = parentDn.getParent();
 
                 DirectoryComponent parentComponent = hub.getDCRegistry().getComponentByLocation( parentDn.toString() );
-                if ( parentComponent.getComponentManagerPID().startsWith( StoreSchemaConstants.HUB_OC_COLLECTION ) )
+                if ( component.getComponentManagerPID().equals( StoreSchemaConstants.HUB_OC_COLL_LIST )
+                    || component.getComponentManagerPID().equals( StoreSchemaConstants.HUB_OC_COLL_SET )
+                    || component.getComponentManagerPID().equals( StoreSchemaConstants.HUB_OC_COLL_ARRAY ) )
                 {
                     DcConfiguration newConfiguration = new DcConfiguration( parentComponent.getConfiguration() );
 

Modified: directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/connector/collection/CollectionMetaDescriptorGenerator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/connector/collection/CollectionMetaDescriptorGenerator.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/connector/collection/CollectionMetaDescriptorGenerator.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/connector/collection/CollectionMetaDescriptorGenerator.java Mon Jun 11 13:12:56 2012
@@ -70,7 +70,8 @@ public class CollectionMetaDescriptorGen
                 ComponentConstants.PRIMITIVE_STR, Object.class.getName(), "Specifies collection's container type",
                 true, false, DirectoryComponentConstants.DC_VAL_NULL ) };
 
-        return new DcMetadataDescriptor( metaPid, true, metaVersion, className, implemented, extended, null, properties );
+        return new DcMetadataDescriptor( metaPid, true, false, metaVersion, className, implemented, extended, null,
+            properties );
     }
 
 
@@ -88,7 +89,8 @@ public class CollectionMetaDescriptorGen
                 ComponentConstants.PRIMITIVE_STR, Object.class.getName(), "Specifies collection's container type",
                 true, false, DirectoryComponentConstants.DC_VAL_NULL ) };
 
-        return new DcMetadataDescriptor( metaPid, true, metaVersion, className, implemented, extended, null, properties );
+        return new DcMetadataDescriptor( metaPid, true, false, metaVersion, className, implemented, extended, null,
+            properties );
     }
 
 
@@ -104,7 +106,8 @@ public class CollectionMetaDescriptorGen
                 ComponentConstants.PRIMITIVE_STR, Object.class.getName(), "Specifies collection's container type",
                 true, false, DirectoryComponentConstants.DC_VAL_NULL ) };
 
-        return new DcMetadataDescriptor( metaPid, true, metaVersion, className, implemented, extended, null, properties );
+        return new DcMetadataDescriptor( metaPid, true, false, metaVersion, className, implemented, extended, null,
+            properties );
     }
 
 }

Modified: directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreConfigManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreConfigManager.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreConfigManager.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreConfigManager.java Mon Jun 11 13:12:56 2012
@@ -191,24 +191,29 @@ public class StoreConfigManager
         Entry mdEntry = new DefaultEntry( schemaManager, mdDn );
 
         mdEntry.add( schemaManager.getAttributeType( "objectclass" ), "ads-meta-descriptor" );
-        mdEntry.add( schemaManager.getAttributeType( "ads-meta-pid" ), metadata.getMetadataPID() );
-        mdEntry.add( schemaManager.getAttributeType( "ads-meta-version" ), metadata.getMetaVersion().toString() );
-        mdEntry.add( schemaManager.getAttributeType( "ads-meta-factory" ), ( metadata.isFactory() ) ? "TRUE" : "FALSE" );
-        mdEntry.add( schemaManager.getAttributeType( "ads-meta-classname" ), metadata.getClassName() );
+        mdEntry.add( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_PID ), metadata.getMetadataPID() );
+        mdEntry.add( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_VERSION ), metadata
+            .getMetaVersion().toString() );
+        mdEntry.add( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_FACTORY ),
+            ( metadata.isFactory() ) ? "TRUE" : "FALSE" );
+        mdEntry.add( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_EXCLUSIVE ),
+            ( metadata.isExclusive() ) ? "TRUE" : "FALSE" );
+        mdEntry.add( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_CLASSNAME ),
+            metadata.getClassName() );
 
         for ( DcPropertyDescription pd : metadata.getPropertyDescriptons() )
         {
-            mdEntry.add( schemaManager.getAttributeType( "ads-meta-property" ), pd.getName() );
+            mdEntry.add( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_PROP ), pd.getName() );
         }
 
         for ( String iface : metadata.getImplementedInterfaces() )
         {
-            mdEntry.add( schemaManager.getAttributeType( "ads-meta-implements" ), iface );
+            mdEntry.add( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_IMPLEMENTS ), iface );
         }
 
         for ( String sclass : metadata.getExtendedClasses() )
         {
-            mdEntry.add( schemaManager.getAttributeType( "ads-meta-extends" ), sclass );
+            mdEntry.add( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_EXTENDS ), sclass );
         }
 
         mdEntry.add( SchemaConstants.ENTRY_UUID_AT, UUID.randomUUID().toString() );
@@ -379,7 +384,9 @@ public class StoreConfigManager
                     continue;
                 }
 
-                if ( component.getComponentManagerPID().startsWith( StoreSchemaConstants.HUB_OC_COLLECTION ) )
+                if ( component.getComponentManagerPID().equals( StoreSchemaConstants.HUB_OC_COLL_LIST )
+                    || component.getComponentManagerPID().equals( StoreSchemaConstants.HUB_OC_COLL_SET )
+                    || component.getComponentManagerPID().equals( StoreSchemaConstants.HUB_OC_COLL_ARRAY ) )
                 {
                     List<DirectoryComponent> items = getComponents(
                         new Dn( schemaManager, component.getConfigLocation() ), SearchScope.ONELEVEL );
@@ -557,6 +564,7 @@ public class StoreConfigManager
         Attribute implemented = entry.get( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_IMPLEMENTS ) );
         Attribute props = entry.get( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_PROP ) );
         Attribute factory = entry.get( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_FACTORY ) );
+        Attribute exclusive = entry.get( schemaManager.getAttributeType( StoreSchemaConstants.HUB_AT_MD_EXCLUSIVE ) );
 
         try
         {
@@ -592,8 +600,9 @@ public class StoreConfigManager
                 }
             }
             boolean isFactory = Boolean.parseBoolean( factory.getString() );
+            boolean isExclusive = Boolean.parseBoolean( exclusive.getString() );
 
-            return new DcMetadataDescriptor( pid.getString(), isFactory, new Version(
+            return new DcMetadataDescriptor( pid.getString(), isFactory, isExclusive, new Version(
                 version.getString() ), classname.getString(),
                 implementedList.toArray( new String[0] ), extendedList.toArray( new String[0] ), null,
                 pds.toArray( new DcPropertyDescription[0] ) );

Modified: directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreSchemaConstants.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreSchemaConstants.java?rev=1348830&r1=1348829&r2=1348830&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreSchemaConstants.java (original)
+++ directory/apacheds/branches/apacheds-osgi/hub/core/src/main/java/org/apache/directory/server/hub/core/store/StoreSchemaConstants.java Mon Jun 11 13:12:56 2012
@@ -35,6 +35,7 @@ public class StoreSchemaConstants
     public static final String HUB_AT_MD_IMPLEMENTS = "ads-meta-implements";
     public static final String HUB_AT_MD_EXTENDS = "ads-meta-extends";
     public static final String HUB_AT_MD_FACTORY = "ads-meta-factory";
+    public static final String HUB_AT_MD_EXCLUSIVE = "ads-meta-immutable";
     public static final String HUB_AT_MD_PROP = "ads-meta-property";
 
     public static final String HUB_AT_PD_NAME = "ads-pd-name";
@@ -46,11 +47,10 @@ public class StoreSchemaConstants
     public static final String HUB_AT_PD_CONTAINERFOR = "ads-pd-containerFor";
 
     public static final String HUB_OC_COMPONENT = "ads-component";
-    public static final String HUB_OC_COLLECTION = "ads-collection";
     public static final String HUB_OC_COLLECTION_ITEM = "ads-collection-item";
-    public static final String HUB_OC_COLL_LIST = "ads-collection-list";
-    public static final String HUB_OC_COLL_SET = "ads-collection-set";
-    public static final String HUB_OC_COLL_ARRAT = "ads-collection-array";
+    public static final String HUB_OC_COLL_LIST = "ads-list";
+    public static final String HUB_OC_COLL_SET = "ads-set";
+    public static final String HUB_OC_COLL_ARRAY = "ads-array";
 
     public static final String HUB_OC_METADESC = "ads-meta-descriptor";
     public static final String HUB_OC_PROPERTYDESC = "ads-property-descriptor";