You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2014/11/17 17:00:18 UTC

svn commit: r1640176 - in /sling/trunk/contrib/extensions/distribution: api/src/main/java/org/apache/sling/distribution/component/ core/src/main/java/org/apache/sling/distribution/agent/impl/ core/src/main/java/org/apache/sling/distribution/component/i...

Author: mpetria
Date: Mon Nov 17 16:00:18 2014
New Revision: 1640176

URL: http://svn.apache.org/r1640176
Log:
SLING-4153: Cleaning DistributionComponentFactory of all constants and making it a ConsumerType

Added:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryConstants.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryManager.java
Modified:
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentFactory.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentProvider.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/GenericDistributionComponentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactoryTest.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryTest.java

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentFactory.java Mon Nov 17 16:00:18 2014
@@ -23,308 +23,22 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import java.util.Map;
 
+import aQute.bnd.annotation.ConsumerType;
 import aQute.bnd.annotation.ProviderType;
 
 /**
- * factory for {@link DistributionComponent}s
+ * factory for {@link DistributionComponent}s.
+ * A client should register a component factory if it has custom implementations of distribution components.
  */
-@ProviderType
+@ConsumerType
 public interface DistributionComponentFactory {
 
-    /**
-     * the type of the component
-     */
-    String COMPONENT_TYPE = "type";
-
-    /**
-     * the name of the component
-     */
-    String COMPONENT_NAME = "name";
-
-    /**
-     * type for components referencing OSGi services
-     */
-    String COMPONENT_TYPE_SERVICE = "service";
-
-    /**
-     * component enabled
-     */
-    String COMPONENT_ENABLED = "enabled";
-
-
-    /**
-     * distribution agent component
-     */
-    String COMPONENT_AGENT = "agent";
-
-    /**
-     * package exporter component
-     */
-    String COMPONENT_PACKAGE_EXPORTER = "packageExporter";
-
-    /**
-     * package importer component
-     */
-    String COMPONENT_PACKAGE_IMPORTER = "packageImporter";
-
-    /**
-     * request authorization strategy component
-     */
-    String COMPONENT_REQUEST_AUTHORIZATION_STRATEGY = "requestAuthorizationStrategy";
-
-    /**
-     * queue distribution strategy component
-     */
-    String COMPONENT_QUEUE_DISTRIBUTION_STRATEGY = "queueDistributionStrategy";
-
-    /**
-     * queue provider component
-     */
-    String COMPONENT_QUEUE_PROVIDER = "queueProvider";
-
-    /**
-     * trigger component
-     */
-    String COMPONENT_TRIGGER = "trigger";
-
-    /**
-     * package builder component
-     */
-    String COMPONENT_PACKAGE_BUILDER = "packageBuilder";
-
-    /**
-     * transport authentication provider component
-     */
-    String COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER = "transportAuthenticationProvider";
-
-    /**
-     * simple distribution agent type
-     */
-    String AGENT_SIMPLE = "simple";
-
-    /**
-     * service user property
-     */
-    String AGENT_SIMPLE_PROPERTY_SERVICE_NAME = "serviceName";
-
-    /**
-     * 'passive' property for agents (for defining "queueing agents")
-     */
-    String AGENT_SIMPLE_PROPERTY_IS_PASSIVE = "isPassive";
-
-    /**
-     * local package exporter type
-     */
-    String PACKAGE_EXPORTER_LOCAL = "local";
-
-    /**
-     * remote package exporter type
-     */
-    String PACKAGE_EXPORTER_REMOTE = "remote";
-
-    /**
-     * endpoints property
-     */
-    String PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS = "endpoints";
-
-    /**
-     * endpoint strategy property
-     */
-    String PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY = "endpoints.strategy";
-
-    /**
-     * no. of items to poll property
-     */
-    String PACKAGE_EXPORTER_REMOTE_PROPERTY_POLL_ITEMS = "poll.items";
-
-    /**
-     * package exporter's agent property
-     */
-    String PACKAGE_EXPORTER_AGENT = "agent";
-
-    /**
-     * local package importer type
-     */
-    String PACKAGE_IMPORTER_LOCAL = "local";
-
-    /**
-     * remote package importer type
-     */
-    String PACKAGE_IMPORTER_REMOTE = "remote";
-
-    /**
-     * endpoints property
-     */
-    String PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS = "endpoints";
-
-    /**
-     * endpoint strategy property
-     */
-    String PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY = "endpoints.strategy";
-
-    /**
-     * user property
-     */
-    String TRANSPORT_AUTHENTICATION_PROVIDER_USER = "user";
-
-    /**
-     * username property
-     */
-    String TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_USERNAME = "username";
-
-    /**
-     * password property
-     */
-    String TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_PASSWORD = "password";
-
-    /**
-     * remote event trigger type
-     */
-    String TRIGGER_REMOTE_EVENT = "remoteEvent";
-
-    /**
-     * remote event endpoint property
-     */
-    String TRIGGER_REMOTE_EVENT_PROPERTY_ENDPOINT = "endpoint";
-
-    /**
-     * resource event trigger type
-     */
-    String TRIGGER_RESOURCE_EVENT = "resourceEvent";
-
-    /**
-     * resource event path property
-     */
-    String TRIGGER_RESOURCE_EVENT_PROPERTY_PATH = "path";
-
-    /**
-     * scheduled trigger type
-     */
-    String TRIGGER_SCHEDULED_EVENT = "scheduledEvent";
-
-    /**
-     * scheduled trigger action property
-     */
-    String TRIGGER_SCHEDULED_EVENT_PROPERTY_ACTION = "action";
-
-    /**
-     * scheduled trigger path property
-     */
-    String TRIGGER_SCHEDULED_EVENT_PROPERTY_PATH = "path";
-
-    /**
-     * scheduled trigger seconds property
-     */
-    String TRIGGER_SCHEDULED_EVENT_PROPERTY_SECONDS = "seconds";
-
-    /**
-     * chain distribution trigger type
-     */
-    String TRIGGER_DISTRIBUTION_EVENT = "distributionEvent";
-
-    /**
-     * chain distribution path property
-     */
-    String TRIGGER_DISTRIBUTION_EVENT_PROPERTY_PATH = "path";
-
-    /**
-     * jcr event trigger type
-     */
-    String TRIGGER_JCR_EVENT = "jcrEvent";
-
-    /**
-     * jcr event trigger path property
-     */
-    String TRIGGER_JCR_EVENT_PROPERTY_PATH = "path";
-
-    /**
-     * jcr event trigger service user property
-     */
-    String TRIGGER_JCR_EVENT_PROPERTY_SERVICE_NAME = "servicename";
-
-    /**
-     * jcr persisting event trigger type
-     */
-    String TRIGGER_PERSISTED_JCR_EVENT = "persistedJcrEvent";
-
-    /**
-     * jcr persisting event trigger path property
-     */
-    String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_PATH = "path";
-
-    /**
-     * jcr persisting event trigger service user property
-     */
-    String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_SERVICE_NAME = "servicename";
-
-    /**
-     * jcr persisting event trigger nuggets path property
-     */
-    String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_NUGGETS_PATH = "nuggetsPath";
-
-    /**
-     * privilege request authorization strategy type
-     */
-    String REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE = "privilege";
-
-    /**
-     * privilege request authorization strategy jcr privilege property
-     */
-    String REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE_PROPERTY_JCR_PRIVILEGE = "jcrPrivilege";
-
-    /**
-     * file vault package builder type
-     */
-    String PACKAGE_BUILDER_FILEVLT = "vlt";
-
-    /**
-     * import mode property for file vault package builder
-     */
-    String PACKAGE_BUILDER_FILEVLT_IMPORT_MODE = "importMode";
-
-    /**
-     * ACL handling property for file vault package builder
-     */
-    String PACKAGE_BUILDER_FILEVLT_ACLHANDLING = "aclHandling";
-
-    /**
-     * queue provider job type
-     */
-    String QUEUE_PROVIDER_JOB = "job";
-
-    /**
-     * property for default topics
-     */
-    String QUEUE_PROVIDER_PROPERTY_QUEUE_PREFIX = "queue.prefix";
-
-
-    /**
-     * queue provider simple type
-     */
-    String QUEUE_PROVIDER_SIMPLE = "simple";
-
-    /**
-     * queue distribution strategy single type
-     */
-    String QUEUE_DISTRIBUTION_STRATEGY_SINGLE = "single";
-
-    /**
-     * queue distribution strategy priority type
-     */
-    String QUEUE_DISTRIBUTION_STRATEGY_PRIORITY = "priority";
-
-    /**
-     * queue distribution strategy priority paths property
-     */
-    String QUEUE_DISTRIBUTION_STRATEGY_PRIORITY_PROPERTY_PATHS = "priority.paths";
 
     /**
      * create a {@link DistributionComponent}
      *
      * @param type              the {@link java.lang.Class} of the component to be created
      * @param properties        the properties to be supplied for the initialization of the component
-     * @param componentProvider the {@link DistributionComponentProvider} used to eventually
-     *                          wire additional required {@link DistributionComponent}s
      * @param <ComponentType>   the actual type of the {@link DistributionComponent}
      *                          to be created
      * @return a {@link DistributionComponent} of the specified type initialized with given properties or <code>null</code>
@@ -332,6 +46,5 @@ public interface DistributionComponentFa
      */
     @CheckForNull
     <ComponentType extends DistributionComponent> ComponentType createComponent(@Nonnull java.lang.Class<ComponentType> type,
-                                                                               @Nonnull Map<String, Object> properties,
-                                                                               @Nullable DistributionComponentProvider componentProvider);
+                                                                               @Nonnull Map<String, Object> properties);
 }

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentProvider.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/DistributionComponentProvider.java Mon Nov 17 16:00:18 2014
@@ -22,12 +22,12 @@ import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import aQute.bnd.annotation.ConsumerType;
+import aQute.bnd.annotation.ProviderType;
 
 /**
  * provider for already existing {@link DistributionComponent}s
  */
-@ConsumerType
+@ProviderType
 public interface DistributionComponentProvider {
 
     /**

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactory.java Mon Nov 17 16:00:18 2014
@@ -34,9 +34,10 @@ import org.apache.felix.scr.annotations.
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.agent.DistributionAgent;
 import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
 import org.apache.sling.distribution.component.DistributionComponentProvider;
 import org.apache.sling.distribution.component.ManagedDistributionComponent;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
@@ -65,37 +66,37 @@ import org.slf4j.LoggerFactory;
 )
 public class CoordinatingDistributionAgentFactory implements DistributionComponentProvider {
 
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DistributionComponentFactory.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
+    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
 
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     @Property(boolValue = true, label = "Enabled")
-    private static final String ENABLED = DistributionComponentFactory.COMPONENT_ENABLED;
+    private static final String ENABLED = DefaultDistributionComponentFactoryConstants.COMPONENT_ENABLED;
 
-    @Property(value = DistributionComponentFactory.AGENT_SIMPLE, propertyPrivate = true)
-    private static final String TYPE = DistributionComponentFactory.COMPONENT_TYPE;
+    @Property(value = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE, propertyPrivate = true)
+    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
     @Property(label = "Name")
-    public static final String NAME = DistributionComponentFactory.COMPONENT_NAME;
+    public static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
     @Property(boolValue = false, propertyPrivate = true)
-    public static final String IS_PASSIVE = DistributionComponentFactory.AGENT_SIMPLE_PROPERTY_IS_PASSIVE;
+    public static final String IS_PASSIVE = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE_PROPERTY_IS_PASSIVE;
 
     @Property(label = "Service Name")
-    public static final String SERVICE_NAME = DistributionComponentFactory.AGENT_SIMPLE_PROPERTY_SERVICE_NAME;
+    public static final String SERVICE_NAME = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE_PROPERTY_SERVICE_NAME;
 
     @Property(label = "Request Authorization Strategy Properties", cardinality = 100)
-    public static final String REQUEST_AUTHORIZATION_STRATEGY = DistributionComponentFactory.COMPONENT_REQUEST_AUTHORIZATION_STRATEGY;
+    public static final String REQUEST_AUTHORIZATION_STRATEGY = DefaultDistributionComponentFactoryConstants.COMPONENT_REQUEST_AUTHORIZATION_STRATEGY;
 
     @Property(label = "Package Exporter Properties", cardinality = 100)
-    public static final String PACKAGE_EXPORTER = DistributionComponentFactory.COMPONENT_PACKAGE_EXPORTER;
+    public static final String PACKAGE_EXPORTER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_EXPORTER;
 
     @Property(label = "Package Importer Properties", cardinality = 100)
-    public static final String PACKAGE_IMPORTER = DistributionComponentFactory.COMPONENT_PACKAGE_IMPORTER;
+    public static final String PACKAGE_IMPORTER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_IMPORTER;
 
     @Property(label = "Trigger Properties", cardinality = 100)
-    public static final String TRIGGER = DistributionComponentFactory.COMPONENT_TRIGGER;
+    public static final String TRIGGER = DefaultDistributionComponentFactoryConstants.COMPONENT_TRIGGER;
 
     @Property(label = "Target TransportAuthenticationProvider", name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
     @Reference(name = "transportAuthenticationProvider")
@@ -111,7 +112,7 @@ public class CoordinatingDistributionAge
     private JobManager jobManager;
 
     @Reference
-    private DistributionComponentFactory componentFactory;
+    private DistributionComponentFactoryManager componentManager;
 
     private BundleContext savedContext;
 
@@ -160,8 +161,9 @@ public class CoordinatingDistributionAge
                 ((Map) properties.get(PACKAGE_EXPORTER)).put("type", "remote");
                 ((Map) properties.get(PACKAGE_IMPORTER)).put("type", "remote");
 
+                properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, this);
 
-                DistributionAgent agent = componentFactory.createComponent(DistributionAgent.class, properties, this);
+                DistributionAgent agent = componentManager.createComponent(DistributionAgent.class, properties);
 
                 log.debug("activated agent {}", agentName);
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java Mon Nov 17 16:00:18 2014
@@ -39,6 +39,8 @@ import org.apache.sling.distribution.com
 import org.apache.sling.distribution.component.DistributionComponentFactory;
 import org.apache.sling.distribution.component.DistributionComponentProvider;
 import org.apache.sling.distribution.component.ManagedDistributionComponent;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
@@ -67,36 +69,36 @@ import org.slf4j.LoggerFactory;
 )
 public class SimpleDistributionAgentFactory implements DistributionComponentProvider {
 
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DistributionComponentFactory.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
+    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     @Property(boolValue = true, label = "Enabled")
-    private static final String ENABLED = DistributionComponentFactory.COMPONENT_ENABLED;
+    private static final String ENABLED = DefaultDistributionComponentFactoryConstants.COMPONENT_ENABLED;
 
-    @Property(value = DistributionComponentFactory.AGENT_SIMPLE, propertyPrivate = true)
-    private static final String TYPE = DistributionComponentFactory.COMPONENT_TYPE;
+    @Property(value = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE, propertyPrivate = true)
+    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
     @Property(label = "Name")
-    public static final String NAME = DistributionComponentFactory.COMPONENT_NAME;
+    public static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
     @Property(boolValue = false, label = "Use this agent as a passive one (only queueing)")
-    public static final String IS_PASSIVE = DistributionComponentFactory.AGENT_SIMPLE_PROPERTY_IS_PASSIVE;
+    public static final String IS_PASSIVE = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE_PROPERTY_IS_PASSIVE;
 
     @Property(label = "Request Authorization Strategy Properties", cardinality = 100)
-    public static final String REQUEST_AUTHORIZATION_STRATEGY = DistributionComponentFactory.COMPONENT_REQUEST_AUTHORIZATION_STRATEGY;
+    public static final String REQUEST_AUTHORIZATION_STRATEGY = DefaultDistributionComponentFactoryConstants.COMPONENT_REQUEST_AUTHORIZATION_STRATEGY;
 
     @Property(label = "Package Exporter Properties", cardinality = 100)
-    public static final String PACKAGE_EXPORTER = DistributionComponentFactory.COMPONENT_PACKAGE_EXPORTER;
+    public static final String PACKAGE_EXPORTER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_EXPORTER;
 
     @Property(label = "Package Importer Properties", cardinality = 100)
-    public static final String PACKAGE_IMPORTER = DistributionComponentFactory.COMPONENT_PACKAGE_IMPORTER;
+    public static final String PACKAGE_IMPORTER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_IMPORTER;
 
     @Property(label = "Trigger Properties", cardinality = 100)
-    public static final String TRIGGER = DistributionComponentFactory.COMPONENT_TRIGGER;
+    public static final String TRIGGER = DefaultDistributionComponentFactoryConstants.COMPONENT_TRIGGER;
 
     @Property(label = "Service Name")
-    public static final String SERVICE_NAME = DistributionComponentFactory.AGENT_SIMPLE_PROPERTY_SERVICE_NAME;
+    public static final String SERVICE_NAME = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE_PROPERTY_SERVICE_NAME;
 
     @Property(label = "Target TransportAuthenticationProvider", name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
     @Reference(name = "transportAuthenticationProvider", policy = ReferencePolicy.DYNAMIC,
@@ -113,7 +115,7 @@ public class SimpleDistributionAgentFact
     private JobManager jobManager;
 
     @Reference
-    private DistributionComponentFactory componentFactory;
+    private DistributionComponentFactoryManager componentFactoryManager;
 
     private ServiceRegistration componentReg;
     private BundleContext savedContext;
@@ -139,7 +141,7 @@ public class SimpleDistributionAgentFact
             agentName = PropertiesUtil.toString(config.get(NAME), null);
             props.put(NAME, agentName);
 
-            if (componentReg == null && componentFactory != null) {
+            if (componentReg == null && componentFactoryManager != null) {
 
                 String[] requestAuthProperties = PropertiesUtil.toStringArray(config.get(REQUEST_AUTHORIZATION_STRATEGY), new String[0]);
                 String[] packageImporterProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_IMPORTER), new String[0]);
@@ -153,10 +155,11 @@ public class SimpleDistributionAgentFact
                 properties.put(PACKAGE_IMPORTER, SettingsUtils.parseLines(packageImporterProperties));
                 properties.put(PACKAGE_EXPORTER, SettingsUtils.parseLines(packageExporterProperties));
                 properties.put(TRIGGER, SettingsUtils.parseLines(triggerProperties));
+                properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, this);
 
                 DistributionAgent agent = null;
                 try {
-                    agent = componentFactory.createComponent(DistributionAgent.class, properties, this);
+                    agent = componentFactoryManager.createComponent(DistributionAgent.class, properties);
                 }
                 catch (IllegalArgumentException e) {
                     log.warn("cannot create agent", e);

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactory.java Mon Nov 17 16:00:18 2014
@@ -25,10 +25,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.*;
 import org.apache.jackrabbit.vault.packaging.Packaging;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.osgi.PropertiesUtil;
@@ -72,6 +69,7 @@ import org.apache.sling.jcr.api.SlingRep
 import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import static org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants.*;
 
 /**
  * A generic factory for distribution components using a compact configuration, already existing OSGi services
@@ -88,6 +86,7 @@ import org.slf4j.LoggerFactory;
         immediate = true
 )
 @Service(DistributionComponentFactory.class)
+@Property(name = "name", value = "default")
 public class DefaultDistributionComponentFactory implements DistributionComponentFactory, DistributionComponentProvider {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -118,9 +117,9 @@ public class DefaultDistributionComponen
     }
 
     public <ComponentType extends DistributionComponent> ComponentType createComponent(@Nonnull Class<ComponentType> type,
-                                                                                      @Nonnull Map<String, Object> properties,
-                                                                                      @Nullable DistributionComponentProvider componentProvider) {
+                                                                                      @Nonnull Map<String, Object> properties) {
 
+        DistributionComponentProvider componentProvider = (DistributionComponentProvider) properties.get(COMPONENT_PROVIDER);
         if (componentProvider == null) {
             componentProvider = this;
         }
@@ -142,9 +141,9 @@ public class DefaultDistributionComponen
 
     DistributionAgent createAgent(Map<String, Object> properties, DistributionComponentProvider componentProvider) {
 
-        String factory = PropertiesUtil.toString(properties.get(COMPONENT_TYPE), DistributionComponentFactory.AGENT_SIMPLE);
+        String factory = PropertiesUtil.toString(properties.get(COMPONENT_TYPE), AGENT_SIMPLE);
 
-        if (DistributionComponentFactory.AGENT_SIMPLE.equals(factory)) {
+        if (AGENT_SIMPLE.equals(factory)) {
             String agentName = PropertiesUtil.toString(properties.get(COMPONENT_NAME), null);
 
 
@@ -168,9 +167,9 @@ public class DefaultDistributionComponen
             List<DistributionTrigger> triggers = createTriggerList(triggersProperties, componentProvider);
 
 
-            String serviceName = PropertiesUtil.toString(properties.get(DistributionComponentFactory.AGENT_SIMPLE_PROPERTY_SERVICE_NAME), null);
+            String serviceName = PropertiesUtil.toString(properties.get(AGENT_SIMPLE_PROPERTY_SERVICE_NAME), null);
 
-            boolean isPassive = PropertiesUtil.toBoolean(properties.get(DistributionComponentFactory.AGENT_SIMPLE_PROPERTY_IS_PASSIVE), false);
+            boolean isPassive = PropertiesUtil.toBoolean(properties.get(AGENT_SIMPLE_PROPERTY_IS_PASSIVE), false);
 
             return new SimpleDistributionAgent(agentName, isPassive, serviceName,
                     packageImporter, packageExporter, packageExporterStrategy,

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryConstants.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryConstants.java?rev=1640176&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryConstants.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryConstants.java Mon Nov 17 16:00:18 2014
@@ -0,0 +1,317 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.component.impl;
+
+/**
+ *  Contains the string constants used by {@link DefaultDistributionComponentFactory}
+ */
+public final class DefaultDistributionComponentFactoryConstants {
+    /**
+     * the type of the component
+     */
+    public static final String COMPONENT_TYPE = "type";
+
+    /**
+     * the name of the component
+     */
+    public static final String COMPONENT_NAME = "name";
+
+    /**
+     * type for components referencing OSGi services
+     */
+    public static final String COMPONENT_TYPE_SERVICE = "service";
+
+    /**
+     * property that contains a custom component provider
+     */
+    public static final String COMPONENT_PROVIDER = "componentProvider";
+
+    /**
+     * component enabled
+     */
+    public static final String COMPONENT_ENABLED = "enabled";
+
+
+    /**
+     * distribution agent component
+     */
+    public static final String COMPONENT_AGENT = "agent";
+
+    /**
+     * package exporter component
+     */
+    public static final String COMPONENT_PACKAGE_EXPORTER = "packageExporter";
+
+    /**
+     * package importer component
+     */
+    public static final String COMPONENT_PACKAGE_IMPORTER = "packageImporter";
+
+    /**
+     * request authorization strategy component
+     */
+    public static final String COMPONENT_REQUEST_AUTHORIZATION_STRATEGY = "requestAuthorizationStrategy";
+
+    /**
+     * queue distribution strategy component
+     */
+    public static final String COMPONENT_QUEUE_DISTRIBUTION_STRATEGY = "queueDistributionStrategy";
+
+    /**
+     * queue provider component
+     */
+    public static final String COMPONENT_QUEUE_PROVIDER = "queueProvider";
+
+    /**
+     * trigger component
+     */
+    public static final String COMPONENT_TRIGGER = "trigger";
+
+    /**
+     * package builder component
+     */
+    public static final String COMPONENT_PACKAGE_BUILDER = "packageBuilder";
+
+    /**
+     * transport authentication provider component
+     */
+    public static final String COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER = "transportAuthenticationProvider";
+
+    /**
+     * simple distribution agent type
+     */
+    public static final String AGENT_SIMPLE = "simple";
+
+    /**
+     * service user property
+     */
+    public static final String AGENT_SIMPLE_PROPERTY_SERVICE_NAME = "serviceName";
+
+    /**
+     * 'passive' property for agents (for defining "queueing agents")
+     */
+    public static final String AGENT_SIMPLE_PROPERTY_IS_PASSIVE = "isPassive";
+
+    /**
+     * local package exporter type
+     */
+    public static final String PACKAGE_EXPORTER_LOCAL = "local";
+
+    /**
+     * remote package exporter type
+     */
+    public static final String PACKAGE_EXPORTER_REMOTE = "remote";
+
+    /**
+     * endpoints property
+     */
+    public static final String PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS = "endpoints";
+
+    /**
+     * endpoint strategy property
+     */
+    public static final String PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY = "endpoints.strategy";
+
+    /**
+     * no. of items to poll property
+     */
+    public static final String PACKAGE_EXPORTER_REMOTE_PROPERTY_POLL_ITEMS = "poll.items";
+
+    /**
+     * package exporter's agent property
+     */
+    public static final String PACKAGE_EXPORTER_AGENT = "agent";
+
+    /**
+     * local package importer type
+     */
+    public static final String PACKAGE_IMPORTER_LOCAL = "local";
+
+    /**
+     * remote package importer type
+     */
+    public static final String PACKAGE_IMPORTER_REMOTE = "remote";
+
+    /**
+     * endpoints property
+     */
+    public static final String PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS = "endpoints";
+
+    /**
+     * endpoint strategy property
+     */
+    public static final String PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY = "endpoints.strategy";
+
+    /**
+     * user property
+     */
+    public static final String TRANSPORT_AUTHENTICATION_PROVIDER_USER = "user";
+
+    /**
+     * username property
+     */
+    public static final String TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_USERNAME = "username";
+
+    /**
+     * password property
+     */
+    public static final String TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_PASSWORD = "password";
+
+    /**
+     * remote event trigger type
+     */
+    public static final String TRIGGER_REMOTE_EVENT = "remoteEvent";
+
+    /**
+     * remote event endpoint property
+     */
+    public static final String TRIGGER_REMOTE_EVENT_PROPERTY_ENDPOINT = "endpoint";
+
+    /**
+     * resource event trigger type
+     */
+    public static final String TRIGGER_RESOURCE_EVENT = "resourceEvent";
+
+    /**
+     * resource event path property
+     */
+    public static final String TRIGGER_RESOURCE_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * scheduled trigger type
+     */
+    public static final String TRIGGER_SCHEDULED_EVENT = "scheduledEvent";
+
+    /**
+     * scheduled trigger action property
+     */
+    public static final String TRIGGER_SCHEDULED_EVENT_PROPERTY_ACTION = "action";
+
+    /**
+     * scheduled trigger path property
+     */
+    public static final String TRIGGER_SCHEDULED_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * scheduled trigger seconds property
+     */
+    public static final String TRIGGER_SCHEDULED_EVENT_PROPERTY_SECONDS = "seconds";
+
+    /**
+     * chain distribution trigger type
+     */
+    public static final String TRIGGER_DISTRIBUTION_EVENT = "distributionEvent";
+
+    /**
+     * chain distribution path property
+     */
+    public static final String TRIGGER_DISTRIBUTION_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * jcr event trigger type
+     */
+    public static final String TRIGGER_JCR_EVENT = "jcrEvent";
+
+    /**
+     * jcr event trigger path property
+     */
+    public static final String TRIGGER_JCR_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * jcr event trigger service user property
+     */
+    public static final String TRIGGER_JCR_EVENT_PROPERTY_SERVICE_NAME = "servicename";
+
+    /**
+     * jcr persisting event trigger type
+     */
+    public static final String TRIGGER_PERSISTED_JCR_EVENT = "persistedJcrEvent";
+
+    /**
+     * jcr persisting event trigger path property
+     */
+    public static final String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * jcr persisting event trigger service user property
+     */
+    public static final String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_SERVICE_NAME = "servicename";
+
+    /**
+     * jcr persisting event trigger nuggets path property
+     */
+    public static final String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_NUGGETS_PATH = "nuggetsPath";
+
+    /**
+     * privilege request authorization strategy type
+     */
+    public static final String REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE = "privilege";
+
+    /**
+     * privilege request authorization strategy jcr privilege property
+     */
+    public static final String REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE_PROPERTY_JCR_PRIVILEGE = "jcrPrivilege";
+
+    /**
+     * file vault package builder type
+     */
+    public static final String PACKAGE_BUILDER_FILEVLT = "vlt";
+
+    /**
+     * import mode property for file vault package builder
+     */
+    public static final String PACKAGE_BUILDER_FILEVLT_IMPORT_MODE = "importMode";
+
+    /**
+     * ACL handling property for file vault package builder
+     */
+    public static final String PACKAGE_BUILDER_FILEVLT_ACLHANDLING = "aclHandling";
+
+    /**
+     * queue provider job type
+     */
+    public static final String QUEUE_PROVIDER_JOB = "job";
+
+    /**
+     * property for default topics
+     */
+    public static final String QUEUE_PROVIDER_PROPERTY_QUEUE_PREFIX = "queue.prefix";
+
+
+    /**
+     * queue provider simple type
+     */
+    public static final String QUEUE_PROVIDER_SIMPLE = "simple";
+
+    /**
+     * queue distribution strategy single type
+     */
+    public static final String QUEUE_DISTRIBUTION_STRATEGY_SINGLE = "single";
+
+    /**
+     * queue distribution strategy priority type
+     */
+    public static final String QUEUE_DISTRIBUTION_STRATEGY_PRIORITY = "priority";
+
+    /**
+     * queue distribution strategy priority paths property
+     */
+    public static final String QUEUE_DISTRIBUTION_STRATEGY_PRIORITY_PROPERTY_PATHS = "priority.paths";
+
+}

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryManager.java?rev=1640176&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryManager.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryManager.java Mon Nov 17 16:00:18 2014
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.component.impl;
+
+import org.apache.felix.scr.annotations.*;
+import org.apache.sling.distribution.component.DistributionComponent;
+import org.apache.sling.distribution.component.DistributionComponentFactory;
+
+
+import javax.annotation.Nonnull;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Manager of all {@link DistributionComponentFactory}s. The manager iterates through all of them to create a suitable component.
+ */
+@Component
+@References({
+        @Reference(name = "distributionComponentFactory", referenceInterface = DistributionComponentFactory.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
+})
+@Service(DistributionComponentFactoryManager.class)
+public class DistributionComponentFactoryManager implements DistributionComponentFactory {
+
+
+
+    Map<String, DistributionComponentFactory> distributionComponentFactoryMap = new ConcurrentHashMap<String, DistributionComponentFactory>();
+
+
+
+    protected void bindDistributionComponentFactory(DistributionComponentFactory distributionComponentFactory, Map<String, Object> config) {
+
+        String name = (String) config.get("name");
+        if (name != null) {
+            distributionComponentFactoryMap.put(name, distributionComponentFactory);
+        }
+    }
+
+    protected void unbindDistributionComponentFactory(DistributionComponentFactory distributionComponentFactory, Map<String, Object> config) {
+
+        String name = (String) config.get("name");
+        if (name != null) {
+            distributionComponentFactoryMap.remove(name);
+        }
+    }
+
+    public <ComponentType extends DistributionComponent> ComponentType createComponent(@Nonnull Class<ComponentType> type, @Nonnull Map<String, Object> properties) {
+        for (DistributionComponentFactory distributionComponentFactory : distributionComponentFactoryMap.values()) {
+            ComponentType component = distributionComponentFactory.createComponent(type, properties);
+            if (component != null) {
+                return component;
+            }
+        }
+
+        return null;
+    }
+}

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/GenericDistributionComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/GenericDistributionComponentFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/GenericDistributionComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/GenericDistributionComponentFactory.java Mon Nov 17 16:00:18 2014
@@ -36,7 +36,6 @@ import org.apache.felix.scr.annotations.
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.agent.DistributionAgent;
 import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
 import org.apache.sling.distribution.component.DistributionComponentProvider;
 import org.apache.sling.distribution.component.ManagedDistributionComponent;
 import org.apache.sling.distribution.resources.impl.OsgiUtils;
@@ -57,16 +56,16 @@ import org.slf4j.LoggerFactory;
         policy = ConfigurationPolicy.REQUIRE
 )
 public class GenericDistributionComponentFactory implements DistributionComponentProvider {
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DistributionComponentFactory.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
+    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
 
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     @Property(boolValue = true, label = "Enabled")
-    private static final String ENABLED = DistributionComponentFactory.COMPONENT_ENABLED;
+    private static final String ENABLED = DefaultDistributionComponentFactoryConstants.COMPONENT_ENABLED;
 
     @Property(label = "Name")
-    public static final String NAME = DistributionComponentFactory.COMPONENT_NAME;
+    public static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
     @Property(label = "Properties")
     public static final String PROPERTIES = "properties";
@@ -78,7 +77,8 @@ public class GenericDistributionComponen
     private SlingSettingsService settingsService;
 
     @Reference
-    private DistributionComponentFactory componentFactory;
+    private DistributionComponentFactoryManager componentManager;
+
 
     @Property(label = "Target TransportAuthenticationProvider", name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
     @Reference(name = "transportAuthenticationProvider", policy = ReferencePolicy.DYNAMIC, cardinality = ReferenceCardinality.OPTIONAL_UNARY)
@@ -120,16 +120,17 @@ public class GenericDistributionComponen
 
                 String componentClass = null;
                 Object componentObject = null;
+                properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, this);
 
                 try {
-                    if (DistributionComponentFactory.COMPONENT_AGENT.equals(componentType)) {
-                        DistributionAgent agent = componentFactory.createComponent(DistributionAgent.class, properties, this);
+                    if (DefaultDistributionComponentFactoryConstants.COMPONENT_AGENT.equals(componentType)) {
+                        DistributionAgent agent = componentManager.createComponent(DistributionAgent.class, properties);
                         componentClass = DistributionAgent.class.getName();
                         componentObject = agent;
 
-                    } else if (DistributionComponentFactory.COMPONENT_TRIGGER.equals(componentType)) {
+                    } else if (DefaultDistributionComponentFactoryConstants.COMPONENT_TRIGGER.equals(componentType)) {
 
-                        DistributionTrigger trigger = componentFactory.createComponent(DistributionTrigger.class, properties, this);
+                        DistributionTrigger trigger = componentManager.createComponent(DistributionTrigger.class, properties);
 
                         componentClass = DistributionTrigger.class.getName();
                         componentObject = trigger;

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java Mon Nov 17 16:00:18 2014
@@ -23,7 +23,6 @@ import org.apache.sling.api.SlingConstan
 import org.apache.sling.api.resource.*;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.agent.DistributionAgent;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
 import org.apache.sling.distribution.component.ManagedDistributionComponent;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -71,7 +70,8 @@ public class ResourceBasedDistributionCo
 
 
     @Reference
-    DistributionComponentFactory componentFactory;
+    private DistributionComponentFactoryManager componentManager;
+
 
     @Reference
     ResourceResolverFactory resourceResolverFactory;
@@ -186,7 +186,7 @@ public class ResourceBasedDistributionCo
             Map<String, Object> componentConfig = extractMap(0, resource);
 
             putMap(0, componentConfig, config);
-            config.put(DistributionComponentFactory.COMPONENT_NAME, name);
+            config.put(DefaultDistributionComponentFactoryConstants.COMPONENT_NAME, name);
 
             register(name, config);
         } catch (LoginException e) {
@@ -263,7 +263,7 @@ public class ResourceBasedDistributionCo
 
         if ("agent".equals(kind)) {
             componentClass = DistributionAgent.class.getName();
-            componentObject = componentFactory.createComponent(DistributionAgent.class, config, null);
+            componentObject = componentManager.createComponent(DistributionAgent.class, config);
         }
 
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java Mon Nov 17 16:00:18 2014
@@ -36,8 +36,9 @@ import org.apache.sling.commons.osgi.Pro
 import org.apache.sling.distribution.agent.DistributionAgent;
 import org.apache.sling.distribution.communication.DistributionRequest;
 import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
 import org.apache.sling.distribution.component.DistributionComponentProvider;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageExportException;
@@ -54,11 +55,11 @@ import org.slf4j.LoggerFactory;
 public class AgentDistributionPackageExporterFactory implements DistributionPackageExporter, DistributionComponentProvider {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DistributionComponentFactory.PACKAGE_EXPORTER_AGENT, propertyPrivate = true)
-    private static final String TYPE = DistributionComponentFactory.COMPONENT_TYPE;
+    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_AGENT, propertyPrivate = true)
+    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
     @Property
-    private static final String NAME = DistributionComponentFactory.COMPONENT_NAME;
+    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
     @Property(label = "Target DistributionAgent", name = "DistributionAgent.target")
     @Reference(name = "DistributionAgent", policy = ReferencePolicy.STATIC)
@@ -66,10 +67,10 @@ public class AgentDistributionPackageExp
 
 
     @Property(label = "Package Builder Properties", cardinality = 100)
-    public static final String PACKAGE_BUILDER = DistributionComponentFactory.COMPONENT_PACKAGE_BUILDER;
+    public static final String PACKAGE_BUILDER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_BUILDER;
 
     @Reference
-    DistributionComponentFactory distributionComponentFactory;
+    private DistributionComponentFactoryManager componentManager;
 
     private DistributionPackageExporter packageExporter;
 
@@ -81,8 +82,9 @@ public class AgentDistributionPackageExp
         properties.putAll(config);
         String[] packageBuilderProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_BUILDER));
         properties.put(PACKAGE_BUILDER, SettingsUtils.parseLines(packageBuilderProperties));
+        properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, this);
 
-        packageExporter = distributionComponentFactory.createComponent(DistributionPackageExporter.class, properties, this);
+        packageExporter = componentManager.createComponent(DistributionPackageExporter.class, properties);
     }
 
     @Nonnull

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java Mon Nov 17 16:00:18 2014
@@ -32,7 +32,8 @@ import org.apache.felix.scr.annotations.
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageExportException;
@@ -54,17 +55,17 @@ public class LocalDistributionPackageExp
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DistributionComponentFactory.PACKAGE_EXPORTER_LOCAL, propertyPrivate = true)
-    private static final String TYPE = DistributionComponentFactory.COMPONENT_TYPE;
+    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_LOCAL, propertyPrivate = true)
+    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
     @Property
-    private static final String NAME = DistributionComponentFactory.COMPONENT_NAME;
+    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
     @Property(label = "Package Builder Properties", cardinality = 100)
-    public static final String PACKAGE_BUILDER = DistributionComponentFactory.COMPONENT_PACKAGE_BUILDER;
+    public static final String PACKAGE_BUILDER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_BUILDER;
 
     @Reference
-    DistributionComponentFactory distributionComponentFactory;
+    private DistributionComponentFactoryManager componentManager;
 
     private DistributionPackageExporter exporter;
 
@@ -75,7 +76,7 @@ public class LocalDistributionPackageExp
         String[] packageBuilderProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_BUILDER));
         properties.put(PACKAGE_BUILDER, SettingsUtils.parseLines(packageBuilderProperties));
 
-        exporter = distributionComponentFactory.createComponent(DistributionPackageExporter.class, properties, null);
+        exporter = componentManager.createComponent(DistributionPackageExporter.class, properties);
     }
 
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java Mon Nov 17 16:00:18 2014
@@ -37,8 +37,9 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.communication.DistributionRequest;
 import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
 import org.apache.sling.distribution.component.DistributionComponentProvider;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageExportException;
@@ -57,23 +58,23 @@ import org.slf4j.LoggerFactory;
         policy = ConfigurationPolicy.REQUIRE)
 @Service(value = DistributionPackageExporter.class)
 public class RemoteDistributionPackageExporterFactory implements DistributionPackageExporter, DistributionComponentProvider {
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DistributionComponentFactory.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
+    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
 
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DistributionComponentFactory.PACKAGE_EXPORTER_REMOTE, propertyPrivate = true)
-    private static final String TYPE = DistributionComponentFactory.COMPONENT_TYPE;
+    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_REMOTE, propertyPrivate = true)
+    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
     @Property
-    private static final String NAME = DistributionComponentFactory.COMPONENT_NAME;
+    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
     @Property(name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
     @Reference(name = "TransportAuthenticationProvider", policy = ReferencePolicy.STATIC)
     private volatile TransportAuthenticationProvider transportAuthenticationProvider;
 
     @Property(cardinality = 100)
-    public static final String ENDPOINTS = DistributionComponentFactory.PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS;
+    public static final String ENDPOINTS = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS;
 
     @Property(name = "poll items", description = "number of subsequent poll requests to make", intValue = 1)
     public static final String POLL_ITEMS = "poll.items";
@@ -87,14 +88,14 @@ public class RemoteDistributionPackageEx
             )},
             value = "One"
     )
-    private static final String ENDPOINT_STRATEGY = DistributionComponentFactory.PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY;
+    private static final String ENDPOINT_STRATEGY = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY;
 
 
     @Property(label = "Package Builder Properties", cardinality = 100)
-    public static final String PACKAGE_BUILDER = DistributionComponentFactory.COMPONENT_PACKAGE_BUILDER;
+    public static final String PACKAGE_BUILDER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_BUILDER;
 
     @Reference
-    private DistributionComponentFactory distributionComponentFactory;
+    private DistributionComponentFactoryManager componentManager;
 
     private DistributionPackageExporter exporter;
 
@@ -104,8 +105,9 @@ public class RemoteDistributionPackageEx
         properties.putAll(config);
         String[] packageBuilderProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_BUILDER));
         properties.put(PACKAGE_BUILDER, SettingsUtils.parseLines(packageBuilderProperties));
+        properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, this);
 
-        exporter = distributionComponentFactory.createComponent(DistributionPackageExporter.class, properties, this);
+        exporter = componentManager.createComponent(DistributionPackageExporter.class, properties);
     }
 
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java Mon Nov 17 16:00:18 2014
@@ -34,7 +34,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageImportException;
@@ -58,7 +58,7 @@ import org.slf4j.LoggerFactory;
         policy = ConfigurationPolicy.REQUIRE)
 @Service(value = DistributionPackageImporter.class)
 public class AdvancedRemoteDistributionPackageImporter implements DistributionPackageImporter {
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DistributionComponentFactory.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
+    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
 
 
     private final Logger log = LoggerFactory.getLogger(getClass());

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java Mon Nov 17 16:00:18 2014
@@ -31,7 +31,8 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageImportException;
@@ -52,18 +53,19 @@ import org.slf4j.LoggerFactory;
 public class LocalDistributionPackageImporterFactory implements DistributionPackageImporter {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DistributionComponentFactory.PACKAGE_IMPORTER_LOCAL, propertyPrivate = true)
-    private static final String TYPE = DistributionComponentFactory.COMPONENT_TYPE;
+    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_IMPORTER_LOCAL, propertyPrivate = true)
+    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
     @Property
-    private static final String NAME = DistributionComponentFactory.COMPONENT_NAME;
+    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
 
     @Property(label = "Package Builder Properties", cardinality = 100)
-    public static final String PACKAGE_BUILDER = DistributionComponentFactory.COMPONENT_PACKAGE_BUILDER;
+    public static final String PACKAGE_BUILDER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_BUILDER;
 
     @Reference
-    private DistributionComponentFactory componentFactory;
+    private DistributionComponentFactoryManager componentManager;
+
 
     private DistributionPackageImporter importer;
 
@@ -74,7 +76,7 @@ public class LocalDistributionPackageImp
         String[] packageBuilderProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_BUILDER));
         properties.put(PACKAGE_BUILDER, SettingsUtils.parseLines(packageBuilderProperties));
 
-        importer = componentFactory.createComponent(DistributionPackageImporter.class, properties, null);
+        importer = componentManager.createComponent(DistributionPackageImporter.class, properties);
     }
 
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java Mon Nov 17 16:00:18 2014
@@ -34,13 +34,13 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
 import org.apache.sling.distribution.component.DistributionComponentProvider;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageImportException;
 import org.apache.sling.distribution.packaging.DistributionPackageImporter;
 import org.apache.sling.distribution.transport.authentication.TransportAuthenticationProvider;
-import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -54,23 +54,23 @@ import org.slf4j.LoggerFactory;
         policy = ConfigurationPolicy.REQUIRE)
 @Service(value = DistributionPackageImporter.class)
 public class RemoteDistributionPackageImporterFactory implements DistributionPackageImporter, DistributionComponentProvider {
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DistributionComponentFactory.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
+    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
 
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DistributionComponentFactory.PACKAGE_IMPORTER_REMOTE, propertyPrivate = true)
-    private static final String TYPE = DistributionComponentFactory.COMPONENT_TYPE;
+    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_IMPORTER_REMOTE, propertyPrivate = true)
+    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
     @Property
-    private static final String NAME = DistributionComponentFactory.COMPONENT_NAME;
+    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
     @Property(name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
     @Reference(name = "TransportAuthenticationProvider", policy = ReferencePolicy.STATIC)
     private volatile TransportAuthenticationProvider transportAuthenticationProvider;
 
     @Property(cardinality = 100)
-    public static final String ENDPOINTS = DistributionComponentFactory.PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS;
+    public static final String ENDPOINTS = DefaultDistributionComponentFactoryConstants.PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS;
 
     @Property(options = {
             @PropertyOption(name = "All",
@@ -81,12 +81,13 @@ public class RemoteDistributionPackageIm
             )},
             value = "One"
     )
-    private static final String ENDPOINT_STRATEGY = DistributionComponentFactory.PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY;
+    private static final String ENDPOINT_STRATEGY = DefaultDistributionComponentFactoryConstants.PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY;
 
     private DistributionPackageImporter importer;
 
     @Reference
-    DistributionComponentFactory distributionComponentFactory;
+    private DistributionComponentFactoryManager componentManager;
+
 
     @Activate
     protected void activate(Map<String, Object> config) {
@@ -94,7 +95,9 @@ public class RemoteDistributionPackageIm
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.putAll(config);
 
-        importer = distributionComponentFactory.createComponent(DistributionPackageImporter.class, properties, this);
+        properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, this);
+
+        importer = componentManager.createComponent(DistributionPackageImporter.class, properties);
 
     }
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java Mon Nov 17 16:00:18 2014
@@ -25,7 +25,8 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.apache.sling.distribution.transport.authentication.TransportAuthenticationContext;
 import org.apache.sling.distribution.transport.authentication.TransportAuthenticationException;
 import org.apache.sling.distribution.transport.authentication.TransportAuthenticationProvider;
@@ -40,26 +41,27 @@ import org.slf4j.LoggerFactory;
 public class UserCredentialsTransportAuthenticationProviderFactory implements
         TransportAuthenticationProvider {
 
-    @Property(value = DistributionComponentFactory.TRANSPORT_AUTHENTICATION_PROVIDER_USER, propertyPrivate = true)
-    private static final String TYPE = DistributionComponentFactory.COMPONENT_TYPE;
+    @Property(value = DefaultDistributionComponentFactoryConstants.TRANSPORT_AUTHENTICATION_PROVIDER_USER, propertyPrivate = true)
+    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
     @Property
-    public final static String USERNAME = DistributionComponentFactory.TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_USERNAME;
+    public final static String USERNAME = DefaultDistributionComponentFactoryConstants.TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_USERNAME;
 
     @Property
-    public final static String PASSWORD = DistributionComponentFactory.TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_PASSWORD;
+    public final static String PASSWORD = DefaultDistributionComponentFactoryConstants.TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_PASSWORD;
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
 
     @Reference
-    DistributionComponentFactory distributionComponentFactory;
+    private DistributionComponentFactoryManager componentManager;
+
 
     private TransportAuthenticationProvider transportAuthenticationProvider;
 
 
     public void activate(Map<String, Object> config) {
-        transportAuthenticationProvider = distributionComponentFactory.createComponent(TransportAuthenticationProvider.class, config, null);
+        transportAuthenticationProvider = componentManager.createComponent(TransportAuthenticationProvider.class, config);
     }
 
     public Object authenticate(Object authenticable, TransportAuthenticationContext context)

Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactoryTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactoryTest.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactoryTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactoryTest.java Mon Nov 17 16:00:18 2014
@@ -23,7 +23,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.sling.distribution.agent.DistributionAgent;
-import org.apache.sling.distribution.component.DistributionComponentFactory;
+import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentFactoryManager;
 import org.junit.Test;
 import org.osgi.framework.BundleContext;
 
@@ -84,15 +85,17 @@ public class CoordinatingDistributionAge
                 "endpoints[1]=http://localhost:102/libs/sling/distribution/services/importers/default",
                 "endpoints[2]=http://localhost:103/libs/sling/distribution/services/importers/default",
                 "endpoints.strategy=All"});
-        DistributionComponentFactory distributionComponentFactory = mock(DistributionComponentFactory.class);
+        DistributionComponentFactoryManager componentManager = mock(DistributionComponentFactoryManager.class);
         DistributionAgent distributionAgent = mock(DistributionAgent.class);
         CoordinatingDistributionAgentFactory coordinatingdistributionAgentFactory = new CoordinatingDistributionAgentFactory();
-        when(distributionComponentFactory.createComponent(DistributionAgent.class, config, coordinatingdistributionAgentFactory)).
+
+        config.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, coordinatingdistributionAgentFactory);
+        when(componentManager.createComponent(DistributionAgent.class, config)).
                 thenReturn(distributionAgent);
 
-        Field componentFactory = coordinatingdistributionAgentFactory.getClass().getDeclaredField("componentFactory");
-        componentFactory.setAccessible(true);
-        componentFactory.set(coordinatingdistributionAgentFactory, distributionComponentFactory);
+        Field componentManagerField= coordinatingdistributionAgentFactory.getClass().getDeclaredField("componentManager");
+        componentManagerField.setAccessible(true);
+        componentManagerField.set(coordinatingdistributionAgentFactory, componentManager);
 
         coordinatingdistributionAgentFactory.activate(context, config);
     }

Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryTest.java?rev=1640176&r1=1640175&r2=1640176&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryTest.java Mon Nov 17 16:00:18 2014
@@ -51,7 +51,7 @@ public class DefaultDistributionComponen
         DistributionAgent agent = mock(DistributionAgent.class);
         when(provider.getComponent(DistributionAgent.class, name)).thenReturn(agent);
         try {
-            defaultdistributionComponentFactory.createComponent(DistributionAgent.class, properties, provider);
+            defaultdistributionComponentFactory.createComponent(DistributionAgent.class, properties);
             fail("agents cannot be referenced by service name using the factory");
         }
         catch (IllegalArgumentException e) {
@@ -68,7 +68,9 @@ public class DefaultDistributionComponen
         DistributionComponentProvider provider = mock(DistributionComponentProvider.class);
         DistributionTrigger trigger = mock(DistributionTrigger.class);
         when(provider.getComponent(DistributionTrigger.class, name)).thenReturn(trigger);
-        DistributionTrigger component = defaultdistributionComponentFactory.createComponent(DistributionTrigger.class, properties, provider);
+        properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, provider);
+
+        DistributionTrigger component = defaultdistributionComponentFactory.createComponent(DistributionTrigger.class, properties);
         assertNotNull(component);
     }
 
@@ -81,7 +83,9 @@ public class DefaultDistributionComponen
         DistributionComponentProvider provider = mock(DistributionComponentProvider.class);
         TransportAuthenticationProvider authenticationProvider = mock(TransportAuthenticationProvider.class);
         when(provider.getComponent(TransportAuthenticationProvider.class, name)).thenReturn(authenticationProvider);
-        TransportAuthenticationProvider component = defaultdistributionComponentFactory.createComponent(TransportAuthenticationProvider.class, properties, provider);
+        properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, provider);
+
+        TransportAuthenticationProvider component = defaultdistributionComponentFactory.createComponent(TransportAuthenticationProvider.class, properties);
         assertNotNull(component);
     }
 
@@ -94,7 +98,9 @@ public class DefaultDistributionComponen
         DistributionComponentProvider provider = mock(DistributionComponentProvider.class);
         DistributionPackageImporter importer = mock(DistributionPackageImporter.class);
         when(provider.getComponent(DistributionPackageImporter.class, name)).thenReturn(importer);
-        DistributionPackageImporter component = defaultdistributionComponentFactory.createComponent(DistributionPackageImporter.class, properties, provider);
+        properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, provider);
+
+        DistributionPackageImporter component = defaultdistributionComponentFactory.createComponent(DistributionPackageImporter.class, properties);
         assertNotNull(component);
     }
 
@@ -107,7 +113,9 @@ public class DefaultDistributionComponen
         DistributionComponentProvider provider = mock(DistributionComponentProvider.class);
         DistributionPackageExporter exporter = mock(DistributionPackageExporter.class);
         when(provider.getComponent(DistributionPackageExporter.class, name)).thenReturn(exporter);
-        DistributionPackageExporter component = defaultdistributionComponentFactory.createComponent(DistributionPackageExporter.class, properties, provider);
+        properties.put(DefaultDistributionComponentFactoryConstants.COMPONENT_PROVIDER, provider);
+
+        DistributionPackageExporter component = defaultdistributionComponentFactory.createComponent(DistributionPackageExporter.class, properties);
         assertNotNull(component);
     }