You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by to...@apache.org on 2014/10/28 13:15:49 UTC

svn commit: r1634855 [1/2] - in /sling/trunk/contrib/extensions/replication/core/src: main/java/org/apache/sling/replication/agent/impl/ main/java/org/apache/sling/replication/component/impl/ main/java/org/apache/sling/replication/event/ main/java/org/...

Author: tommaso
Date: Tue Oct 28 12:15:48 2014
New Revision: 1634855

URL: http://svn.apache.org/r1634855
Log:
SLING-4106 - removed handlerId from triggers api, fixed trigger impls to be stateless, use @SlingServlet for servlets, fixed remote package exporter to get all the retrieved packages, avoid npes for session in abstract pb

Added:
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationRequestHandler.java
      - copied, changed from r1634816, sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerRequestHandler.java
Removed:
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerRequestHandler.java
Modified:
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/PrivilegeReplicationRequestAuthorizationStrategy.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/event/ReplicationEvent.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/ErrorAwareQueueDistributionStrategy.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/PriorityPathDistributionStrategy.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/SingleQueueDistributionStrategy.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/ReplicationConstants.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiPropertiesResourceProviderFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiServicePropertiesResourceProvider.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/ReplicationPackageReadingException.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackage.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilder.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentQueueServlet.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentRootServlet.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationTriggerServlet.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/TransportAuthenticationProvider.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProvider.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/PersistingJcrEventReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java
    sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilderTest.java
    sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilderTest.java
    sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTriggerTest.java
    sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/trigger/impl/PersistingJcrEventReplicationTriggerTest.java
    sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTriggerTest.java
    sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTriggerTest.java
    sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTriggerTest.java

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/PrivilegeReplicationRequestAuthorizationStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/PrivilegeReplicationRequestAuthorizationStrategy.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/PrivilegeReplicationRequestAuthorizationStrategy.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/PrivilegeReplicationRequestAuthorizationStrategy.java Tue Oct 28 12:15:48 2014
@@ -24,7 +24,6 @@ import javax.jcr.security.AccessControlM
 import javax.jcr.security.Privilege;
 
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.replication.agent.ReplicationAgentException;
 import org.apache.sling.replication.agent.ReplicationRequestAuthorizationException;
 import org.apache.sling.replication.agent.ReplicationRequestAuthorizationStrategy;
 import org.apache.sling.replication.communication.ReplicationActionType;

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java Tue Oct 28 12:15:48 2014
@@ -36,7 +36,6 @@ import org.apache.sling.replication.agen
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.communication.ReplicationResponse;
 import org.apache.sling.replication.component.ManagedReplicationComponent;
-import org.apache.sling.replication.component.ReplicationComponent;
 import org.apache.sling.replication.event.ReplicationEventFactory;
 import org.apache.sling.replication.event.ReplicationEventType;
 import org.apache.sling.replication.packaging.ReplicationPackage;
@@ -52,8 +51,8 @@ import org.apache.sling.replication.queu
 import org.apache.sling.replication.queue.ReplicationQueueProvider;
 import org.apache.sling.replication.serialization.ReplicationPackageBuildingException;
 import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
+import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
-import org.apache.sling.replication.trigger.ReplicationTriggerRequestHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -81,6 +80,7 @@ public class SimpleReplicationAgent impl
     private final ReplicationRequestAuthorizationStrategy replicationRequestAuthorizationStrategy;
     private final ResourceResolverFactory resourceResolverFactory;
     private final String subServiceName;
+    private AgentBasedRequestHandler agentBasedRequestHandler;
 
     public SimpleReplicationAgent(String name,
                                   boolean passive,
@@ -236,12 +236,12 @@ public class SimpleReplicationAgent impl
 
     public void enable() {
         log.info("enabling agent");
+
         // register triggers if any
+        agentBasedRequestHandler = new AgentBasedRequestHandler(this);
 
-        for (int i = 0; i < triggers.size(); i++) {
-            ReplicationTrigger trigger = triggers.get(i);
-            String handlerId = name + "-" + i;
-            trigger.register(handlerId, new AgentBasedTriggerRequestHandler(this));
+        for (ReplicationTrigger trigger : triggers) {
+            trigger.register(agentBasedRequestHandler);
         }
 
         if (!isPassive()) {
@@ -251,12 +251,13 @@ public class SimpleReplicationAgent impl
 
     public void disable() {
         log.info("disabling agent");
-        for (int i = 0; i < triggers.size(); i++) {
-            ReplicationTrigger trigger = triggers.get(i);
-            String handlerId = name + "-" + i;
-            trigger.unregister(handlerId);
+
+        for (ReplicationTrigger trigger : triggers) {
+            trigger.unregister(agentBasedRequestHandler);
         }
 
+        agentBasedRequestHandler = null;
+
         if (!isPassive()) {
             queueProvider.disableQueueProcessing(name);
         }
@@ -330,10 +331,10 @@ public class SimpleReplicationAgent impl
         }
     }
 
-    public class AgentBasedTriggerRequestHandler implements ReplicationTriggerRequestHandler {
+    public class AgentBasedRequestHandler implements ReplicationRequestHandler {
         private final ReplicationAgent agent;
 
-        public AgentBasedTriggerRequestHandler(ReplicationAgent agent) {
+        public AgentBasedRequestHandler(ReplicationAgent agent) {
             this.agent = agent;
         }
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java Tue Oct 28 12:15:48 2014
@@ -34,13 +34,13 @@ import org.apache.sling.commons.osgi.Pro
 import org.apache.sling.commons.scheduler.Scheduler;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.replication.agent.ReplicationAgent;
+import org.apache.sling.replication.agent.ReplicationRequestAuthorizationStrategy;
 import org.apache.sling.replication.agent.impl.PrivilegeReplicationRequestAuthorizationStrategy;
 import org.apache.sling.replication.agent.impl.SimpleReplicationAgent;
+import org.apache.sling.replication.communication.ReplicationActionType;
 import org.apache.sling.replication.component.ReplicationComponent;
 import org.apache.sling.replication.component.ReplicationComponentFactory;
 import org.apache.sling.replication.component.ReplicationComponentProvider;
-import org.apache.sling.replication.agent.ReplicationRequestAuthorizationStrategy;
-import org.apache.sling.replication.communication.ReplicationActionType;
 import org.apache.sling.replication.event.ReplicationEventFactory;
 import org.apache.sling.replication.packaging.ReplicationPackageExporter;
 import org.apache.sling.replication.packaging.ReplicationPackageImporter;

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/event/ReplicationEvent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/event/ReplicationEvent.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/event/ReplicationEvent.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/event/ReplicationEvent.java Tue Oct 28 12:15:48 2014
@@ -37,9 +37,9 @@ public class ReplicationEvent extends Ev
      * get the topic for a certain event type
      *
      * @param type the {@link org.apache.sling.replication.event.ReplicationEventType} to get the topic for
-     * @return a <code>String</code> representing the topic
+     * @return the topic for the given event type
      */
     public static String getTopic(ReplicationEventType type) {
-        return EVENT_TOPIC + '/' + type.toString();
+        return EVENT_TOPIC + '/' + type.name();
     }
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/ErrorAwareQueueDistributionStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/ErrorAwareQueueDistributionStrategy.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/ErrorAwareQueueDistributionStrategy.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/ErrorAwareQueueDistributionStrategy.java Tue Oct 28 12:15:48 2014
@@ -82,10 +82,10 @@ public class ErrorAwareQueueDistribution
                                          ReplicationQueueProvider queueProvider)
             throws ReplicationQueueException {
         try {
-            log.info("using error aware queue distribution");
+            log.debug("using error aware queue distribution");
             ReplicationQueueItemState state = new ReplicationQueueItemState();
             ReplicationQueue queue = queueProvider.getDefaultQueue(agentName);
-            log.info("obtained queue {}", queue);
+            log.debug("obtained queue {}", queue);
             if (queue != null) {
                 if (queue.add(item)) {
                     log.info("replication status: {}", state);

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/PriorityPathDistributionStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/PriorityPathDistributionStrategy.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/PriorityPathDistributionStrategy.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/PriorityPathDistributionStrategy.java Tue Oct 28 12:15:48 2014
@@ -62,11 +62,11 @@ public class PriorityPathDistributionStr
     public ReplicationQueueItemState add(String agentName, ReplicationQueueItem item,
                                          ReplicationQueueProvider queueProvider)
             throws ReplicationQueueException {
-        log.info("using path priority based queue distribution");
+        log.debug("using path priority based queue distribution");
         ReplicationQueueItemState state = new ReplicationQueueItemState();
 
         ReplicationQueue queue = getQueue(agentName, item, queueProvider);
-        log.info("obtained queue {}", queue);
+        log.debug("obtained queue {}", queue);
 
         if (queue != null) {
             if (queue.add(item)) {

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/SingleQueueDistributionStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/SingleQueueDistributionStrategy.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/SingleQueueDistributionStrategy.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/queue/impl/SingleQueueDistributionStrategy.java Tue Oct 28 12:15:48 2014
@@ -47,11 +47,11 @@ public class SingleQueueDistributionStra
     public ReplicationQueueItemState add(String agentName, ReplicationQueueItem item,
                                          ReplicationQueueProvider queueProvider)
             throws ReplicationQueueException {
-        log.info("using single queue distribution");
+        log.debug("using single queue distribution");
 
         ReplicationQueueItemState state = new ReplicationQueueItemState();
         ReplicationQueue queue = queueProvider.getDefaultQueue(agentName);
-        log.info("obtained queue {}", queue);
+        log.debug("obtained queue {}", queue);
 
         if (queue != null) {
             if (queue.add(item)) {

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/ReplicationConstants.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/ReplicationConstants.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/ReplicationConstants.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/ReplicationConstants.java Tue Oct 28 12:15:48 2014
@@ -16,9 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.apache.sling.replication.resources;
 
+/**
+ * constants replication resource types and paths
+ */
 public class ReplicationConstants {
 
     public static final String SUFFIX_RESOURCE_LIST = "/list";

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiPropertiesResourceProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiPropertiesResourceProviderFactory.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiPropertiesResourceProviderFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiPropertiesResourceProviderFactory.java Tue Oct 28 12:15:48 2014
@@ -89,7 +89,7 @@ public class OsgiPropertiesResourceProvi
      * Child resource properties are static an can be configured as follows:
      * childResourceName/childResourcePropertyName=childResourcePropertyValue
      */
-    @Property(cardinality = 100)
+    @Property(cardinality = Integer.MAX_VALUE)
     public final static String RESOURCE_PROPERTIES = "resourceProperties";
 
     public final static String DEFAULT_PROVIDER_TYPE = "osgiService";

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiServicePropertiesResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiServicePropertiesResourceProvider.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiServicePropertiesResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/resources/impl/OsgiServicePropertiesResourceProvider.java Tue Oct 28 12:15:48 2014
@@ -87,7 +87,7 @@ public class OsgiServicePropertiesResour
     }
 
     public Iterator<Resource> listChildren(Resource parent) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public Object addingService(ServiceReference serviceReference) {

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/ReplicationPackageReadingException.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/ReplicationPackageReadingException.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/ReplicationPackageReadingException.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/ReplicationPackageReadingException.java Tue Oct 28 12:15:48 2014
@@ -32,4 +32,8 @@ public class ReplicationPackageReadingEx
     public ReplicationPackageReadingException(Throwable t) {
         super(t);
     }
+
+    public ReplicationPackageReadingException(String message, Exception e) {
+        super(message, e);
+    }
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java Tue Oct 28 12:15:48 2014
@@ -165,6 +165,8 @@ public abstract class AbstractReplicatio
         Session session = resourceResolver.adaptTo(Session.class);
         if (session != null) {
             ReplicationJcrUtils.setDoNotReplicate(session);
+        } else {
+            throw new RepositoryException("could not obtain a session from calling user " + resourceResolver.getUserID());
         }
         return session;
     }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackage.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackage.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackage.java Tue Oct 28 12:15:48 2014
@@ -29,7 +29,6 @@ import org.apache.jackrabbit.vault.util.
 import org.apache.sling.replication.communication.ReplicationActionType;
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.packaging.ReplicationPackage;
-import org.apache.sling.replication.packaging.ReplicationPackageInfo;
 
 /**
  * A void {@link ReplicationPackage} is used for deletion of certain paths on the target instance

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilder.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilder.java Tue Oct 28 12:15:48 2014
@@ -60,6 +60,7 @@ public class VoidReplicationPackageBuild
     }
 
     public boolean installPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) {
-        return false;
+        // installation is always successful as no installation is needed for void packages
+        return true;
     }
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java Tue Oct 28 12:15:48 2014
@@ -122,8 +122,7 @@ public class FileVaultReplicationPackage
             }
 
         } catch (Exception e) {
-            log.error("could not read / install the package", e);
-            throw new ReplicationPackageReadingException(e);
+            throw new ReplicationPackageReadingException("could not read / install the package", e);
         }
         return pkg;
     }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentQueueServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentQueueServlet.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentQueueServlet.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentQueueServlet.java Tue Oct 28 12:15:48 2014
@@ -18,14 +18,11 @@
  */
 package org.apache.sling.replication.servlet;
 
-import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import java.io.IOException;
 
 import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
@@ -39,12 +36,7 @@ import org.apache.sling.replication.reso
 /**
  * Servlet to retrieve a {@link org.apache.sling.replication.queue.ReplicationQueue} status.
  */
-@SuppressWarnings("serial")
-@Component(metatype = false)
-@Service(value = Servlet.class)
-@Properties({
-        @Property(name = "sling.servlet.resourceTypes", value = ReplicationConstants.AGENT_QUEUE_RESOURCE_TYPE),
-        @Property(name = "sling.servlet.methods", value = {"GET", "POST", "DELETE"})})
+@SlingServlet(resourceTypes = ReplicationConstants.AGENT_QUEUE_RESOURCE_TYPE, methods = {"GET", "POST", "DELETE"})
 public class ReplicationAgentQueueServlet extends SlingAllMethodsServlet {
 
     @Override
@@ -59,8 +51,10 @@ public class ReplicationAgentQueueServle
         if (agent != null) {
             try {
                 ReplicationQueue queue = agent.getQueue(queueName);
-                response.getWriter().write(toJSoN(queue));
+                response.getWriter().write(toJSoN(queue)); // TODO : use json writer
+                response.setStatus(200);
             } catch (Exception e) {
+                response.setStatus(400);
                 response.getWriter().write("{\"status\" : \"error\",\"message\":\"error reading from the queue\",\"reason\":\""
                         + e.getLocalizedMessage() + "\"}");
             }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentRootServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentRootServlet.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentRootServlet.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentRootServlet.java Tue Oct 28 12:15:48 2014
@@ -18,20 +18,17 @@
  */
 package org.apache.sling.replication.servlet;
 
-import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import java.io.IOException;
 
 import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
-import org.apache.sling.replication.agent.ReplicationAgentException;
 import org.apache.sling.replication.agent.ReplicationAgent;
+import org.apache.sling.replication.agent.ReplicationAgentException;
 import org.apache.sling.replication.communication.ReplicationActionType;
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.resources.ReplicationConstants;
@@ -41,13 +38,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Servlet for aggregate replication on all agents
  */
-@SuppressWarnings("serial")
-@Component(metatype = false)
-@Service(value = Servlet.class)
-@Properties({
-        @Property(name = "sling.servlet.resourceTypes", value = ReplicationConstants.AGENT_ROOT_RESOURCE_TYPE),
-        @Property(name = "sling.servlet.methods", value = {"POST"})
-})
+@SlingServlet(resourceTypes = ReplicationConstants.AGENT_ROOT_RESOURCE_TYPE, methods = "POST")
 public class ReplicationAgentRootServlet extends SlingAllMethodsServlet {
 
     private final Logger log = LoggerFactory.getLogger(getClass());

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java Tue Oct 28 12:15:48 2014
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.replication.servlet;
 
-import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -26,15 +25,13 @@ import java.util.Enumeration;
 import java.util.List;
 
 import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
-import org.apache.sling.replication.agent.ReplicationAgentException;
 import org.apache.sling.replication.agent.ReplicationAgent;
+import org.apache.sling.replication.agent.ReplicationAgentException;
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.communication.ReplicationResponse;
 import org.apache.sling.replication.queue.ReplicationQueueItemState.ItemState;
@@ -46,12 +43,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Servlet to ask {@link ReplicationAgent}s to replicate (via HTTP POST).
  */
-@SuppressWarnings("serial")
-@Component(metatype = false)
-@Service(value = Servlet.class)
-@Properties({
-        @Property(name = "sling.servlet.resourceTypes", value = ReplicationConstants.AGENT_RESOURCE_TYPE),
-        @Property(name = "sling.servlet.methods", value = "POST")})
+@SlingServlet(resourceTypes = ReplicationConstants.AGENT_RESOURCE_TYPE, methods = "POST")
 public class ReplicationAgentServlet extends SlingAllMethodsServlet {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -71,14 +63,15 @@ public class ReplicationAgentServlet ext
         if (agent != null) {
             try {
                 ReplicationResponse replicationResponse = agent.execute(resourceResolver, replicationRequest);
-                if (replicationResponse.isSuccessful()
-                        || ItemState.DROPPED.toString().equals(
-                        replicationResponse.getStatus())) {
+                if (replicationResponse.isSuccessful()) {
                     response.setStatus(200);
                 } else if (ItemState.QUEUED.toString().equals(replicationResponse.getStatus())
                         || ItemState.ACTIVE.toString().equals(
                         replicationResponse.getStatus())) {
                     response.setStatus(202);
+                } else if (ItemState.DROPPED.toString().equals(
+                        replicationResponse.getStatus())) {
+                    response.setStatus(404);
                 } else {
                     response.setStatus(400);
                 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java Tue Oct 28 12:15:48 2014
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.replication.servlet;
 
-import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -26,9 +25,7 @@ import java.util.List;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.http.entity.ContentType;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
@@ -45,12 +42,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Servlet to handle fetching of replication content.
  */
-@SuppressWarnings("serial")
-@Component(metatype = false)
-@Service(value = Servlet.class)
-@Properties({
-        @Property(name = "sling.servlet.resourceTypes", value = ReplicationConstants.EXPORTER_RESOURCE_TYPE),
-        @Property(name = "sling.servlet.methods", value = "POST")})
+@SlingServlet(resourceTypes = ReplicationConstants.EXPORTER_RESOURCE_TYPE, methods = "POST")
 public class ReplicationPackageExporterServlet extends SlingAllMethodsServlet {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -63,7 +55,6 @@ public class ReplicationPackageExporterS
                 .getResource()
                 .adaptTo(ReplicationPackageExporter.class);
 
-        boolean success = false;
         final long start = System.currentTimeMillis();
 
         response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
@@ -71,33 +62,36 @@ public class ReplicationPackageExporterS
         ReplicationRequest replicationRequest = RequestUtils.fromServletRequest(request);
         ResourceResolver resourceResolver = request.getResourceResolver();
 
+        int consumed = 0;
+        int fetched = 0;
         try {
-            // get first item
+            // get all items
             List<ReplicationPackage> replicationPackages = replicationPackageExporter.exportPackages(resourceResolver, replicationRequest);
+            fetched = replicationPackages.size();
 
             if (replicationPackages.size() > 0) {
-                log.info("{} package(s) available for fetching, the first will be delivered", replicationPackages.size());
+                log.info("{} package(s) available for fetching", replicationPackages.size());
 
-                ReplicationPackage replicationPackage = replicationPackages.get(0);
-                if (replicationPackage != null) {
-                    InputStream inputStream = null;
-                    int bytesCopied = -1;
-                    try {
-                        inputStream = replicationPackage.createInputStream();
-                        bytesCopied = IOUtils.copy(inputStream, response.getOutputStream());
-                    } finally {
-                        IOUtils.closeQuietly(inputStream);
+                for (ReplicationPackage replicationPackage : replicationPackages) {
+                    if (replicationPackage != null) {
+                        InputStream inputStream = null;
+                        int bytesCopied = -1;
+                        try {
+                            inputStream = replicationPackage.createInputStream();
+                            bytesCopied = IOUtils.copy(inputStream, response.getOutputStream());
+                        } finally {
+                            IOUtils.closeQuietly(inputStream);
+                        }
+
+                        // delete the package permanently
+                        replicationPackage.delete();
+
+                        // everything ok
+                        response.setStatus(200);
+                        log.info("{} bytes written into the response", bytesCopied);
+                    } else {
+                        log.warn("fetched a null package");
                     }
-
-                    // delete the package permanently
-                    replicationPackage.delete();
-
-                    // everything ok
-                    response.setStatus(200);
-                    log.info("{} bytes written into the response", bytesCopied);
-                    success = true;
-                } else {
-                    log.warn("fetched a null package");
                 }
             } else {
                 response.setStatus(204);
@@ -106,10 +100,10 @@ public class ReplicationPackageExporterS
 
         } catch (Exception e) {
             response.setStatus(503);
-            log.error("error while reverse replicating from agent", e);
+            log.error("error while exporting from {}", request.getRequestURL(), e);
         } finally {
-            final long end = System.currentTimeMillis();
-            log.info("Processed replication export request in {}ms: : {}", new Object[]{end - start, success});
+            long end = System.currentTimeMillis();
+            log.info("Processed replication export request in {} ms: : consumed {} of {}", new Object[]{end - start, consumed, fetched});
         }
     }
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java Tue Oct 28 12:15:48 2014
@@ -18,15 +18,12 @@
  */
 package org.apache.sling.replication.servlet;
 
-import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -40,12 +37,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Servlet to handle reception of replication content.
  */
-@SuppressWarnings("serial")
-@Component(metatype = false)
-@Service(value = Servlet.class)
-@Properties({
-        @Property(name = "sling.servlet.resourceTypes", value = ReplicationConstants.IMPORTER_RESOURCE_TYPE),
-        @Property(name = "sling.servlet.methods", value = "POST")})
+@SlingServlet(resourceTypes = ReplicationConstants.IMPORTER_RESOURCE_TYPE, methods = "POST")
 public class ReplicationPackageImporterServlet extends SlingAllMethodsServlet {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -79,11 +71,11 @@ public class ReplicationPackageImporterS
             }
         } catch (final Exception e) {
             response.setStatus(400);
-            log.error("Error during replication import: {}", e.getMessage(), e);
             response.getWriter().print("error: " + e.toString());
+            log.error("Error during replication import: {}", e.getMessage(), e);
         } finally {
-            final long end = System.currentTimeMillis();
-            log.info("Processed replication request in {}ms: : {}", new Object[]{end - start, success});
+            long end = System.currentTimeMillis();
+            log.info("Processed package import request in {} ms: : {}", new Object[]{end - start, success});
         }
     }
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationTriggerServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationTriggerServlet.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationTriggerServlet.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationTriggerServlet.java Tue Oct 28 12:15:48 2014
@@ -18,42 +18,32 @@
  */
 package org.apache.sling.replication.servlet;
 
-import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Arrays;
-import java.util.UUID;
 
 import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.apache.sling.replication.communication.ReplicationRequest;
+import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
-import org.apache.sling.replication.trigger.ReplicationTriggerRequestHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Triggers Server Sent Events servlet
  */
-@SuppressWarnings("serial")
-@Component(metatype = false)
-@Service(value = Servlet.class)
-@Properties({
-        @Property(name = "sling.servlet.resourceTypes", value = "sling/replication/service/trigger"),
-        @Property(name = "sling.servlet.extensions", value = "event"),
-        @Property(name = "sling.servlet.methods", value = "GET")
-})
+@SlingServlet(resourceTypes = "sling/replication/service/trigger", extensions = "event", methods = "GET")
 public class ReplicationTriggerServlet extends SlingAllMethodsServlet {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     private final static int DEFAULT_NUMBER_OF_SECONDS = 60;
+    private final static int MAX_NUMBER_OF_SECONDS = 3600;
 
     @Override
     protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
@@ -64,7 +54,6 @@ public class ReplicationTriggerServlet e
         int seconds = secondsParameter != null && secondsParameter.length() > 0 ? Integer.parseInt(secondsParameter) :
                 DEFAULT_NUMBER_OF_SECONDS;
 
-        int MAX_NUMBER_OF_SECONDS = 3600;
         if (seconds > MAX_NUMBER_OF_SECONDS) {
             seconds = MAX_NUMBER_OF_SECONDS;
         } else if (seconds < 0) {
@@ -85,13 +74,12 @@ public class ReplicationTriggerServlet e
 
         final PrintWriter writer = response.getWriter();
 
-        String handlerId = "ReplicationTriggerServlet" + UUID.randomUUID().toString();
-
-        replicationTrigger.register(handlerId, new ReplicationTriggerRequestHandler() {
+        ReplicationRequestHandler replicationRequestHandler = new ReplicationRequestHandler() {
             public void handle(ReplicationRequest request) {
                 writeEvent(writer, request);
             }
-        });
+        };
+        replicationTrigger.register(replicationRequestHandler);
 
         try {
             Thread.sleep(seconds * 1000);
@@ -99,7 +87,7 @@ public class ReplicationTriggerServlet e
             log.error("thread interrupted", e);
         }
 
-        replicationTrigger.unregister(handlerId);
+        replicationTrigger.unregister(replicationRequestHandler);
 
     }
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java Tue Oct 28 12:15:48 2014
@@ -26,16 +26,18 @@ import org.apache.sling.replication.comm
 import org.apache.sling.replication.packaging.ReplicationPackage;
 
 /**
- * A <code>TransportHandler</code> is responsible for implementing the transport of a
- * {@link ReplicationPackage}s to / from another instance described by a {@link ReplicationEndpoint}
+ * A {@link org.apache.sling.replication.transport.ReplicationTransportHandler} is responsible for implementing the transport of a
+ * {@link ReplicationPackage}s to / from another instance described by a {@link ReplicationEndpoint}.
+ * {@link org.apache.sling.replication.transport.ReplicationTransportHandler} implementations are meant to be stateful,
+ * so all the information regarding the target endpoint of the transport algorithm is part of its state and thus not exposed
+ * in the API.
  */
 public interface ReplicationTransportHandler {
 
     /**
      * Delivers a given {@link ReplicationPackage}
      *
-     *
-     * @param resourceResolver
+     * @param resourceResolver   used to eventually access local resources needed by the transport algorithm
      * @param replicationPackage a {@link org.apache.sling.replication.packaging.ReplicationPackage} to transport
      * @throws ReplicationTransportException if any error occurs during the transport
      */
@@ -44,8 +46,7 @@ public interface ReplicationTransportHan
     /**
      * Retrieves a list of {@link ReplicationPackage}
      *
-     *
-     * @param resourceResolver
+     * @param resourceResolver   used to eventually access local resources needed by the transport algorithm
      * @param replicationRequest the replication request
      * @throws ReplicationTransportException if any error occurs during the transport
      */

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/TransportAuthenticationProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/TransportAuthenticationProvider.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/TransportAuthenticationProvider.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/TransportAuthenticationProvider.java Tue Oct 28 12:15:48 2014
@@ -21,24 +21,33 @@ package org.apache.sling.replication.tra
 import org.apache.sling.replication.component.ReplicationComponent;
 
 /**
- * A <code>TransportAuthenticationProvider</code> is responsible for authentication of instances sending and
- * receiving replication items via {@link org.apache.sling.replication.transport.ReplicationTransportHandler}s
+ * A {@link org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider} is responsible for
+ * authentication of instances sending and receiving replication items via {@link org.apache.sling.replication.transport.ReplicationTransportHandler}s
+ * A {@link org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider} will authenticate
+ * 'authenticables' objects of type {@link A}, producing 'authenticated' objects of type {@link T}.
+ *
  */
 public interface TransportAuthenticationProvider<A, T> extends ReplicationComponent {
 
     /**
-     * check if this provider is able to authenticate objects belonging to given 'authenticable' class.
+     * Check if this provider is able to authenticate objects belonging to given 'authenticable' class.
      *
      * @param authenticable class of objects to be authenticated
      * @return <code>true</code> if this provider can check authentication on instances of this class, <code>false</code>
      * otherwise
      */
-    boolean canAuthenticate(Class authenticable);
+    boolean canAuthenticate(Class<A> authenticable);
 
     /**
-     * @param authenticable
-     * @param context
-     * @return
+     * Authenticate an 'authenticable' object by performing some implementation specific operation on it, and producing
+     * an 'authenticated' object to be passed back to the {@link org.apache.sling.replication.transport.ReplicationTransportHandler}.
+     * The returned 'authenticated' object may be of the same class of the 'authenticable' object (e.g. passing an 'authenticable'
+     * http client and returning an 'authenticated' http client) or of a different class (e.g. passing an 'authenticable'
+     * jcr repository and returning an 'authenticated' jcr session).
+     *
+     * @param authenticable class of objects to be authenticated
+     * @param context       authentication context holding authentication information
+     * @return an 'authenticated' object to be used by the transport
      * @throws TransportAuthenticationException
      */
     T authenticate(A authenticable, TransportAuthenticationContext context)

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProvider.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProvider.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProvider.java Tue Oct 28 12:15:48 2014
@@ -67,7 +67,7 @@ public class UserCredentialsTransportAut
 
         } else if (authenticable instanceof CredentialsProvider) {
             CredentialsProvider credentialsProvider = (CredentialsProvider) authenticable;
-            credentialsProvider.setCredentials(new AuthScope(new HttpHost(endpoint.getUri().getHost())),
+            credentialsProvider.setCredentials(new AuthScope(new HttpHost(endpoint.getUri().getHost(), endpoint.getUri().getPort())),
                     new UsernamePasswordCredentials(username, password));
 
             log.debug("authenticated CredentialsProvider HTTP client with user and password");

Copied: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationRequestHandler.java (from r1634816, sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerRequestHandler.java)
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationRequestHandler.java?p2=sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationRequestHandler.java&p1=sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerRequestHandler.java&r1=1634816&r2=1634855&rev=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTriggerRequestHandler.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationRequestHandler.java Tue Oct 28 12:15:48 2014
@@ -24,7 +24,7 @@ import org.apache.sling.replication.comm
  * An handler for {@link org.apache.sling.replication.communication.ReplicationRequest}s passed to a
  * {@link org.apache.sling.replication.trigger.ReplicationTrigger}
  */
-public interface ReplicationTriggerRequestHandler {
+public interface ReplicationRequestHandler {
 
     /**
      * handle the request according to the trigger implementation.

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/ReplicationTrigger.java Tue Oct 28 12:15:48 2014
@@ -21,22 +21,25 @@ package org.apache.sling.replication.tri
 import org.apache.sling.replication.component.ReplicationComponent;
 
 /**
- * a replication trigger
+ * A {@link org.apache.sling.replication.trigger.ReplicationTrigger} is responsible to trigger
+ * {@link org.apache.sling.replication.communication.ReplicationRequest}s upon certain 'events' (e.g. Sling / Jcr events,
+ * periodic polling, etc.).
+ * A {@link org.apache.sling.replication.trigger.ReplicationTrigger} is meant to be stateless so that more than one
+ * {@link org.apache.sling.replication.trigger.ReplicationRequestHandler} can be registered into the same trigger.
  */
 public interface ReplicationTrigger extends ReplicationComponent {
 
     /**
-     * register a replication trigger
+     * register a request handler to be triggered and returns a corresponding registration id
      *
-     * @param handlerId      id of the given handler
      * @param requestHandler handler
      */
-    void register(String handlerId, ReplicationTriggerRequestHandler requestHandler);
+    void register(ReplicationRequestHandler requestHandler);
 
     /**
-     * unregister the handler with the given id, if existing
+     * unregister the given handler, if existing
      *
-     * @param handlerId id of the handler to unregister
+     * @param requestHandler handler to unregister
      */
-    void unregister(String handlerId);
+    void unregister(ReplicationRequestHandler requestHandler);
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/AbstractJcrEventTrigger.java Tue Oct 28 12:15:48 2014
@@ -23,11 +23,13 @@ import javax.jcr.Session;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventIterator;
 import javax.jcr.observation.EventListener;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.replication.communication.ReplicationRequest;
+import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
-import org.apache.sling.replication.trigger.ReplicationTriggerRequestHandler;
 import org.apache.sling.replication.util.ReplicationJcrUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,15 +38,15 @@ import org.slf4j.LoggerFactory;
  * Abstract implementation of a {@link org.apache.sling.replication.trigger.ReplicationTrigger} that listens for 'safe'
  * events and triggers a {@link org.apache.sling.replication.communication.ReplicationRequest} from that.
  */
-public abstract class AbstractJcrEventTrigger implements ReplicationTrigger, EventListener {
+public abstract class AbstractJcrEventTrigger implements ReplicationTrigger {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
+
+    private final Map<String, JcrEventReplicationTriggerListener> registeredListeners = new ConcurrentHashMap<String, JcrEventReplicationTriggerListener>();
+
     private final String path;
     private final String serviceUser;
 
-    private ReplicationTriggerRequestHandler requestHandler;
-    protected Session session;
-
     protected final SlingRepository repository;
 
     public AbstractJcrEventTrigger(SlingRepository repository, String path, String serviceUser) {
@@ -53,35 +55,60 @@ public abstract class AbstractJcrEventTr
         this.serviceUser = serviceUser;
     }
 
-    public void register(String handlerId, ReplicationTriggerRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) {
+        Session session = null;
         try {
             session = getSession();
+            JcrEventReplicationTriggerListener listener = new JcrEventReplicationTriggerListener(requestHandler);
+            registeredListeners.put(requestHandler.toString(), listener);
             session.getWorkspace().getObservationManager().addEventListener(
-                    this, getEventTypes(), path, true, null, null, false);
-            this.requestHandler = requestHandler;
+                    listener, getEventTypes(), path, true, null, null, false);
         } catch (RepositoryException e) {
-            log.error("unable to register session", e);
+            log.error("unable to register request handler {}", requestHandler, e);
+        } finally {
+            if (session != null) {
+                session.logout();
+            }
         }
     }
 
-    public void unregister(String handlerId) {
-        if (session != null) {
-            session.logout();
+    public void unregister(ReplicationRequestHandler requestHandler) {
+        JcrEventReplicationTriggerListener listener = registeredListeners.get(requestHandler.toString());
+        if (listener != null) {
+            Session session = null;
+            try {
+                session = getSession();
+                session.getWorkspace().getObservationManager().removeEventListener(listener);
+            } catch (RepositoryException e) {
+                log.error("unable to register session", e);
+            } finally {
+                if (session != null) {
+                    session.logout();
+                }
+            }
         }
     }
 
-    public void onEvent(EventIterator eventIterator) {
-        while (eventIterator.hasNext()) {
-            Event event = eventIterator.nextEvent();
-            try {
-                if (ReplicationJcrUtils.isSafe(event)) {
-                    ReplicationRequest request = processEvent(event);
-                    if (request != null) {
-                        requestHandler.handle(request);
+    private class JcrEventReplicationTriggerListener implements EventListener {
+        private final ReplicationRequestHandler requestHandler;
+
+        public JcrEventReplicationTriggerListener(ReplicationRequestHandler requestHandler) {
+            this.requestHandler = requestHandler;
+        }
+
+        public void onEvent(EventIterator eventIterator) {
+            while (eventIterator.hasNext()) {
+                Event event = eventIterator.nextEvent();
+                try {
+                    if (ReplicationJcrUtils.isSafe(event)) {
+                        ReplicationRequest request = processEvent(event);
+                        if (request != null) {
+                            requestHandler.handle(request);
+                        }
                     }
+                } catch (RepositoryException e) {
+                    log.error("Error while handling event {}", event, e);
                 }
-            } catch (RepositoryException e) {
-                log.error("Error while handling event {}", event, e);
             }
         }
     }
@@ -116,4 +143,5 @@ public abstract class AbstractJcrEventTr
         return repository.loginService(serviceUser, null);
     }
 
+
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ChainReplicateReplicationTrigger.java Tue Oct 28 12:15:48 2014
@@ -20,16 +20,19 @@ package org.apache.sling.replication.tri
 
 import java.util.Dictionary;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListSet;
 
 import org.apache.sling.replication.communication.ReplicationActionType;
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.component.ManagedReplicationComponent;
 import org.apache.sling.replication.event.ReplicationEvent;
 import org.apache.sling.replication.event.ReplicationEventType;
+import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
-import org.apache.sling.replication.trigger.ReplicationTriggerRequestHandler;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.event.Event;
@@ -57,20 +60,20 @@ public class ChainReplicateReplicationTr
         this.pathPrefix = pathPrefix;
     }
 
-    public void register(String handlerId, ReplicationTriggerRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) {
         // register an event handler on replication package install (on a certain path) which triggers the chain replication of that same package
         Dictionary<String, Object> properties = new Hashtable<String, Object>();
 
         // TODO : make it possible to configure the type of event handled here, currently 'package-installed' is hardcoded
         properties.put(EventConstants.EVENT_TOPIC, ReplicationEvent.getTopic(ReplicationEventType.PACKAGE_INSTALLED));
-        log.info("handler {} will chain replicate on path '{}'", handlerId, pathPrefix);
+        log.info("handler {} will chain replicate on path '{}'", requestHandler, pathPrefix);
 
 //            properties.put(EventConstants.EVENT_FILTER, "(path=" + path + "/*)");
         if (bundleContext != null) {
             ServiceRegistration triggerPathEventRegistration = bundleContext.registerService(EventHandler.class.getName(),
                     new TriggerAgentEventListener(requestHandler, pathPrefix), properties);
             if (triggerPathEventRegistration != null) {
-                registrations.put(handlerId, triggerPathEventRegistration);
+                registrations.put(requestHandler.toString(), triggerPathEventRegistration);
             }
         } else {
             log.error("cannot register trigger since bundle context is null");
@@ -78,8 +81,8 @@ public class ChainReplicateReplicationTr
         }
     }
 
-    public void unregister(String handlerId) {
-        ServiceRegistration serviceRegistration = registrations.get(handlerId);
+    public void unregister(ReplicationRequestHandler requestHandler) {
+        ServiceRegistration serviceRegistration = registrations.get(requestHandler.toString());
         if (serviceRegistration != null) {
             serviceRegistration.unregister();
         }
@@ -100,10 +103,10 @@ public class ChainReplicateReplicationTr
 
     private class TriggerAgentEventListener implements EventHandler {
 
-        private final ReplicationTriggerRequestHandler requestHandler;
+        private final ReplicationRequestHandler requestHandler;
         private final String path;
 
-        public TriggerAgentEventListener(ReplicationTriggerRequestHandler requestHandler, String path) {
+        public TriggerAgentEventListener(ReplicationRequestHandler requestHandler, String path) {
             this.requestHandler = requestHandler;
             this.path = path;
         }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/PersistingJcrEventReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/PersistingJcrEventReplicationTrigger.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/PersistingJcrEventReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/PersistingJcrEventReplicationTrigger.java Tue Oct 28 12:15:48 2014
@@ -56,6 +56,8 @@ public class PersistingJcrEventReplicati
 
         ReplicationRequest replicationRequest = null;
 
+        Session session = getSession();
+
         if (session != null && session.hasPermission(nuggetsPath, Privilege.JCR_ADD_CHILD_NODES)) {
             log.debug("persisting event under {}", nuggetsPath);
             Node nuggetsNode = session.getNode(nuggetsPath);

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/RemoteEventReplicationTrigger.java Tue Oct 28 12:15:48 2014
@@ -44,8 +44,8 @@ import org.apache.sling.replication.comm
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.transport.authentication.TransportAuthenticationContext;
 import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
+import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
-import org.apache.sling.replication.trigger.ReplicationTriggerRequestHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -82,21 +82,21 @@ public class RemoteEventReplicationTrigg
         this.scheduler = scheduler;
     }
 
-    public void register(String handlerId, ReplicationTriggerRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) {
         try {
             log.info("applying remote event replication trigger");
 
             ScheduleOptions options = scheduler.NOW();
-            options.name(handlerId);
-            scheduler.schedule(new EventBasedReplication(handlerId, requestHandler), options);
+            options.name(requestHandler.toString());
+            scheduler.schedule(new EventBasedReplication(requestHandler), options);
 
         } catch (Exception e) {
-            log.error("handler {} cannot be registered", handlerId, e);
+            log.error("handler {} cannot be registered", requestHandler, e);
         }
     }
 
-    public void unregister(String handlerId) {
-        Future<HttpResponse> httpResponseFuture = requests.remove(handlerId);
+    public void unregister(ReplicationRequestHandler requestHandler) {
+        Future<HttpResponse> httpResponseFuture = requests.remove(requestHandler.toString());
         if (httpResponseFuture != null) {
             httpResponseFuture.cancel(true);
         }
@@ -104,12 +104,10 @@ public class RemoteEventReplicationTrigg
 
     private class SSEResponseConsumer extends BasicAsyncResponseConsumer {
 
-        private final String handleId;
-        private final ReplicationTriggerRequestHandler agent;
+        private final ReplicationRequestHandler handler;
 
-        private SSEResponseConsumer(String handleId, ReplicationTriggerRequestHandler agent) {
-            this.handleId = handleId;
-            this.agent = agent;
+        private SSEResponseConsumer(ReplicationRequestHandler handler) {
+            this.handler = handler;
         }
 
         @Override
@@ -121,9 +119,9 @@ public class RemoteEventReplicationTrigg
 
             // TODO : currently it always triggers poll request on /, should this be configurable?
             ReplicationRequest replicationRequest = new ReplicationRequest(System.currentTimeMillis(), ReplicationActionType.POLL, "/");
-            agent.handle(replicationRequest);
+            handler.handle(replicationRequest);
             log.info("replication request to agent {} sent ({} {})", new Object[]{
-                    handleId,
+                    handler,
                     replicationRequest.getAction(),
                     replicationRequest.getPaths()});
 
@@ -138,11 +136,9 @@ public class RemoteEventReplicationTrigg
     }
 
     private class EventBasedReplication implements Runnable {
-        private final String handleId;
-        private final ReplicationTriggerRequestHandler requestHandler;
+        private final ReplicationRequestHandler requestHandler;
 
-        public EventBasedReplication(String handleId, ReplicationTriggerRequestHandler requestHandler) {
-            this.handleId = handleId;
+        public EventBasedReplication(ReplicationRequestHandler requestHandler) {
             this.requestHandler = requestHandler;
         }
 
@@ -172,7 +168,7 @@ public class RemoteEventReplicationTrigg
                     log.debug("sending request");
                     Future<HttpResponse> futureResponse = httpClient.execute(
                             basicAsyncRequestProducer,
-                            new SSEResponseConsumer(handleId, requestHandler), new FutureCallback<HttpResponse>() {
+                            new SSEResponseConsumer(requestHandler), new FutureCallback<HttpResponse>() {
                                 public void completed(HttpResponse httpResponse) {
                                     log.debug("response received {}", httpResponse);
                                 }
@@ -185,7 +181,7 @@ public class RemoteEventReplicationTrigg
                                     log.warn("request cancelled");
                                 }
                             });
-                    requests.put(handleId, futureResponse);
+                    requests.put(requestHandler.toString(), futureResponse);
                     futureResponse.get();
 
                 } catch (Exception e) {

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ResourceEventReplicationTrigger.java Tue Oct 28 12:15:48 2014
@@ -24,12 +24,11 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.sling.api.SlingConstants;
-import org.apache.sling.replication.component.ManagedReplicationComponent;
-import org.apache.sling.replication.component.ReplicationComponent;
 import org.apache.sling.replication.communication.ReplicationActionType;
 import org.apache.sling.replication.communication.ReplicationRequest;
+import org.apache.sling.replication.component.ManagedReplicationComponent;
+import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
-import org.apache.sling.replication.trigger.ReplicationTriggerRequestHandler;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.event.Event;
@@ -78,25 +77,25 @@ public class ResourceEventReplicationTri
         registrations.clear();
     }
 
-    public void register(String handlerId, ReplicationTriggerRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) {
         // register an event handler on path which triggers the agent on node / property changes / addition / removals
         Dictionary<String, Object> properties = new Hashtable<String, Object>();
         properties.put(EventConstants.EVENT_TOPIC, new String[]{SlingConstants.TOPIC_RESOURCE_ADDED,
                 SlingConstants.TOPIC_RESOURCE_CHANGED, SlingConstants.TOPIC_RESOURCE_REMOVED});
-        log.info("trigger agent {} on path '{}'", handlerId, path);
+        log.info("trigger agent {} on path '{}'", requestHandler, path);
 
         properties.put(EventConstants.EVENT_FILTER, "(path=" + path + "/*)");
         ServiceRegistration triggerPathEventRegistration = bundleContext.registerService(EventHandler.class.getName(),
                 new TriggerAgentEventListener(requestHandler), properties);
         if (triggerPathEventRegistration != null) {
-            registrations.put(handlerId, triggerPathEventRegistration);
+            registrations.put(requestHandler.toString(), triggerPathEventRegistration);
         } else {
             log.error("cannot register event handler service for triggering agent");
         }
     }
 
-    public void unregister(String handlerId) {
-        ServiceRegistration serviceRegistration = registrations.get(handlerId);
+    public void unregister(ReplicationRequestHandler requestHandler) {
+        ServiceRegistration serviceRegistration = registrations.get(requestHandler.toString());
         if (serviceRegistration != null) {
             serviceRegistration.unregister();
         }
@@ -104,9 +103,9 @@ public class ResourceEventReplicationTri
 
     private class TriggerAgentEventListener implements EventHandler {
 
-        private final ReplicationTriggerRequestHandler requestHandler;
+        private final ReplicationRequestHandler requestHandler;
 
-        public TriggerAgentEventListener(ReplicationTriggerRequestHandler requestHandler) {
+        public TriggerAgentEventListener(ReplicationRequestHandler requestHandler) {
             this.requestHandler = requestHandler;
         }
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/trigger/impl/ScheduledReplicationTrigger.java Tue Oct 28 12:15:48 2014
@@ -22,8 +22,8 @@ import org.apache.sling.commons.schedule
 import org.apache.sling.commons.scheduler.Scheduler;
 import org.apache.sling.replication.communication.ReplicationActionType;
 import org.apache.sling.replication.communication.ReplicationRequest;
+import org.apache.sling.replication.trigger.ReplicationRequestHandler;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
-import org.apache.sling.replication.trigger.ReplicationTriggerRequestHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -49,21 +49,20 @@ public class ScheduledReplicationTrigger
         this.scheduler = scheduler;
     }
 
-    public void register(String handlerId, ReplicationTriggerRequestHandler requestHandler) {
+    public void register(ReplicationRequestHandler requestHandler) {
         ScheduleOptions options = scheduler.NOW(-1, secondsInterval);
-        options.name(handlerId);
+        options.name(requestHandler.toString());
         scheduler.schedule(new ScheduledReplication(requestHandler), options);
     }
 
-    public void unregister(String handlerId) {
-        scheduler.unschedule(handlerId);
+    public void unregister(ReplicationRequestHandler requestHandler) {
+        scheduler.unschedule(requestHandler.toString());
     }
 
     private class ScheduledReplication implements Runnable {
-        private final ReplicationTriggerRequestHandler requestHandler;
+        private final ReplicationRequestHandler requestHandler;
 
-
-        public ScheduledReplication(ReplicationTriggerRequestHandler requestHandler) {
+        public ScheduledReplication(ReplicationRequestHandler requestHandler) {
             this.requestHandler = requestHandler;
         }
 

Modified: sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilderTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilderTest.java?rev=1634855&r1=1634854&r2=1634855&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilderTest.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/VoidReplicationPackageBuilderTest.java Tue Oct 28 12:15:48 2014
@@ -28,9 +28,9 @@ import org.apache.sling.replication.pack
 import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
 import org.junit.Test;
 
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -112,6 +112,6 @@ public class VoidReplicationPackageBuild
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         ReplicationPackage replicationPackage = mock(ReplicationPackage.class);
         boolean success = voidReplicationPackageBuilder.installPackage(resourceResolver, replicationPackage);
-        assertFalse(success);
+        assertTrue(success);
     }
 }
\ No newline at end of file