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