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/03 11:33:22 UTC
svn commit: r1629162 [2/2] - in /sling/trunk/contrib/extensions/replication:
core/src/main/java/org/apache/sling/replication/agent/
core/src/main/java/org/apache/sling/replication/agent/impl/
core/src/main/java/org/apache/sling/replication/packaging/ c...
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java?rev=1629162&r1=1629161&r2=1629162&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java Fri Oct 3 09:33:20 2014
@@ -18,21 +18,14 @@
*/
package org.apache.sling.replication.agent.impl;
-import java.util.Dictionary;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.ConfigurationPolicy;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferencePolicy;
+import java.util.*;
+
+import org.apache.felix.scr.annotations.*;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.replication.agent.ReplicationAgent;
+import org.apache.sling.replication.agent.ReplicationComponent;
+import org.apache.sling.replication.agent.ReplicationComponentFactory;
+import org.apache.sling.replication.agent.ReplicationComponentProvider;
import org.apache.sling.replication.event.ReplicationEventFactory;
import org.apache.sling.replication.packaging.ReplicationPackageExporter;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
@@ -40,6 +33,7 @@ import org.apache.sling.replication.queu
import org.apache.sling.replication.queue.ReplicationQueueProvider;
import org.apache.sling.replication.queue.impl.SingleQueueDistributionStrategy;
import org.apache.sling.replication.queue.impl.jobhandling.JobHandlingReplicationQueueProvider;
+import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
import org.apache.sling.settings.SlingSettingsService;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -52,26 +46,18 @@ import org.slf4j.LoggerFactory;
*/
@Component(metatype = true,
label = "Simple Replication Agents Factory",
- description = "OSGi configuration based ReplicationAgent service factory",
- name = SimpleReplicationAgentFactory.SERVICE_PID,
+ description = "OSGi configuration factory for agents",
configurationFactory = true,
specVersion = "1.1",
policy = ConfigurationPolicy.REQUIRE
)
-public class SimpleReplicationAgentFactory {
-
- public static final String PACKAGE_EXPORTER_TARGET = "ReplicationPackageExporter.target";
-
- public static final String PACKAGE_IMPORTER_TARGET = "ReplicationPackageImporter.target";
+public class SimpleReplicationAgentFactory implements ReplicationComponentProvider {
+ public static final String QUEUEPROVIDER_TARGET = "queueProvider.target";
- public static final String QUEUEPROVIDER_TARGET = "ReplicationQueueProvider.target";
-
- public static final String QUEUE_DISTRIBUTION_TARGET = "ReplicationQueueDistributionStrategy.target";
+ public static final String QUEUE_DISTRIBUTION_TARGET = "queueDistributionStrategy.target";
private final Logger log = LoggerFactory.getLogger(getClass());
- static final String SERVICE_PID = "org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory";
-
private static final String DEFAULT_QUEUEPROVIDER = "(name=" + JobHandlingReplicationQueueProvider.NAME + ")";
private static final String DEFAULT_DISTRIBUTION = "(name=" + SingleQueueDistributionStrategy.NAME + ")";
@@ -82,35 +68,32 @@ public class SimpleReplicationAgentFacto
@Property(label = "Name")
public static final String NAME = "name";
- @Property(label = "Triggers")
- public static final String TRIGGERS = "triggers";
-
@Property(boolValue = true, label = "Replicate using aggregated paths")
public static final String USE_AGGREGATE_PATHS = "useAggregatePaths";
@Property(boolValue = false, label = "Replicate using aggregated paths")
public static final String IS_PASSIVE = "isPassive";
- @Property(label = "Target ReplicationPackageExporter", name = PACKAGE_EXPORTER_TARGET)
- @Reference(name = "ReplicationPackageExporter", policy = ReferencePolicy.DYNAMIC)
- private volatile ReplicationPackageExporter packageExporter;
-
- @Property(label = "Target ReplicationPackageImporter", name = PACKAGE_IMPORTER_TARGET)
- @Reference(name = "ReplicationPackageImporter", policy = ReferencePolicy.DYNAMIC)
- private volatile ReplicationPackageImporter packageImporter;
+
+ @Property(label = "Package Exporter", cardinality = 100)
+ public static final String PACKAGE_EXPORTER = "packageExporter";
+
+ @Property(label = "Package Importer", cardinality = 100)
+ public static final String PACKAGE_IMPORTER = "packageImporter";
@Property(label = "Target ReplicationQueueProvider", name = QUEUEPROVIDER_TARGET, value = DEFAULT_QUEUEPROVIDER)
- @Reference(name = "ReplicationQueueProvider", target = DEFAULT_QUEUEPROVIDER, policy = ReferencePolicy.DYNAMIC)
+ @Reference(name = "queueProvider", target = DEFAULT_QUEUEPROVIDER)
private volatile ReplicationQueueProvider queueProvider;
@Property(label = "Target QueueDistributionStrategy", name = QUEUE_DISTRIBUTION_TARGET, value = DEFAULT_DISTRIBUTION)
- @Reference(name = "ReplicationQueueDistributionStrategy", target = DEFAULT_DISTRIBUTION, policy = ReferencePolicy.DYNAMIC)
+ @Reference(name = "queueDistributionStrategy", target = DEFAULT_DISTRIBUTION)
private volatile ReplicationQueueDistributionStrategy queueDistributionStrategy;
- @Property(label = "Runmodes")
- private static final String RUNMODES = "runModes";
+ @Property(label = "Target TransportAuthenticationProvider", name = "transportAuthenticationProvider.target")
+ @Reference(name = "transportAuthenticationProvider", policy = ReferencePolicy.DYNAMIC,
+ cardinality = ReferenceCardinality.OPTIONAL_UNARY)
+ private volatile TransportAuthenticationProvider transportAuthenticationProvider;
- private ServiceRegistration agentReg;
@Reference
private ReplicationEventFactory replicationEventFactory;
@@ -118,8 +101,20 @@ public class SimpleReplicationAgentFacto
@Reference
private SlingSettingsService settingsService;
+ @Reference
+ private ReplicationComponentFactory componentFactory;
+
+
+
+ private ServiceRegistration componentReg;
+ private BundleContext savedContext;
+ private Map<String, Object> savedConfig;
+
@Activate
- public void activate(BundleContext context, Map<String, ?> config) throws Exception {
+ public void activate(BundleContext context, Map<String, Object> config) {
+
+ savedContext = context;
+ savedConfig = config;
// inject configuration
Dictionary<String, Object> props = new Hashtable<String, Object>();
@@ -129,9 +124,6 @@ public class SimpleReplicationAgentFacto
if (enabled) {
props.put(ENABLED, true);
- String[] runModes = PropertiesUtil.toStringArray(config.get(RUNMODES), new String[0]);
- props.put(RUNMODES, runModes);
-
String name = PropertiesUtil
.toString(config.get(NAME), String.valueOf(new Random().nextInt(1000)));
props.put(NAME, name);
@@ -143,61 +135,81 @@ public class SimpleReplicationAgentFacto
String distribution = PropertiesUtil.toString(config.get(QUEUE_DISTRIBUTION_TARGET), DEFAULT_DISTRIBUTION);
props.put(QUEUE_DISTRIBUTION_TARGET, distribution);
- String[] triggers = PropertiesUtil.toStringArray(config.get(TRIGGERS), new String[0]);
- props.put(TRIGGERS, triggers);
+ if (componentReg == null) {
+ Map<String, Object> properties = new HashMap<String, Object>();
+ properties.putAll(config);
+ properties.put("type", "simple");
+ ReplicationAgent agent = componentFactory.createComponent(ReplicationAgent.class, properties, this);
- boolean useAggregatePaths = PropertiesUtil.toBoolean(config.get(USE_AGGREGATE_PATHS), true);
- props.put(USE_AGGREGATE_PATHS, useAggregatePaths);
+ log.debug("activated agent {}", agent != null ? agent.getName() : null);
- boolean isPassive = PropertiesUtil.toBoolean(config.get(IS_PASSIVE), false);
- props.put(IS_PASSIVE, isPassive);
+ if (agent != null) {
+ props.put(NAME, agent.getName());
- // check configuration is valid
- if (name == null || packageExporter == null || packageImporter == null || queueProvider == null || queueDistributionStrategy == null) {
- throw new Exception("configuration for this agent is not valid");
- }
-
- log.info("bound services for {} : {} - {} - {} - {} - {} - {}", new Object[]{name,
- packageImporter, packageExporter, queueProvider, queueDistributionStrategy});
+ // register agent service
+ componentReg = context.registerService(ReplicationAgent.class.getName(), agent, props);
- SimpleReplicationAgent agent = new SimpleReplicationAgent(name, useAggregatePaths, isPassive,
- packageImporter, packageExporter, queueProvider, queueDistributionStrategy, replicationEventFactory,
- null); // TODO : enable triggers again
-
- // only enable if instance runmodes match configured ones
- if (matchRunmodes(runModes)) {
- // register agent service
- agentReg = context.registerService(ReplicationAgent.class.getName(), agent, props);
- agent.enable();
- }
- }
- }
- private boolean matchRunmodes(String[] configuredRunModes) {
- boolean match = configuredRunModes == null || configuredRunModes.length == 0;
- if (!match) {
- Set<String> activeRunModes = settingsService.getRunModes();
- for (String activeRunMode : activeRunModes) {
- for (String configuredRunMode : configuredRunModes) {
- if (activeRunMode.equals(configuredRunMode)) {
- match = true;
- break;
+ if (agent instanceof ReplicationComponent) {
+ ((ReplicationComponent) agent).enable();
}
}
}
+
}
- return match;
}
@Deactivate
private void deactivate(BundleContext context) {
- if (agentReg != null) {
- ServiceReference reference = agentReg.getReference();
- SimpleReplicationAgent replicationAgent = (SimpleReplicationAgent) context.getService(reference);
- replicationAgent.disable();
- agentReg.unregister();
+ if (componentReg != null) {
+ ServiceReference reference = componentReg.getReference();
+ Object service = context.getService(reference);
+ if (service instanceof ReplicationComponent) {
+ ((ReplicationComponent) service).disable();
+ }
+
+ componentReg.unregister();
+ componentReg = null;
+ }
+
+ }
+
+
+ public <ComponentType> ComponentType getComponent(Class<ComponentType> type, String componentName) {
+ if (type.isAssignableFrom(ReplicationQueueProvider.class)) {
+ return (ComponentType) queueProvider;
+
+ }
+ else if (type.isAssignableFrom(ReplicationQueueDistributionStrategy.class)) {
+ return (ComponentType) queueDistributionStrategy;
}
+ else if (type.isAssignableFrom(TransportAuthenticationProvider.class)) {
+ return (ComponentType) transportAuthenticationProvider;
+ }
+ return null;
+ }
+
+
+ private void refresh() {
+ if (savedContext != null && savedConfig != null) {
+ if (componentReg == null) {
+ activate(savedContext, savedConfig);
+ }
+ else if (componentReg != null) {
+ deactivate(savedContext);
+ activate(savedContext, savedConfig);
+ }
+ }
+ }
+
+ private void bindTransportAuthenticationProvider(TransportAuthenticationProvider transportAuthenticationProvider) {
+ this.transportAuthenticationProvider = transportAuthenticationProvider;
+ refresh();
+ }
+ private void unbindTransportAuthenticationProvider(TransportAuthenticationProvider transportAuthenticationProvider) {
+ this.transportAuthenticationProvider = null;
+ refresh();
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java?rev=1629162&r1=1629161&r2=1629162&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java Fri Oct 3 09:33:20 2014
@@ -71,9 +71,8 @@ public interface ReplicationPackage exte
*/
long getLength();
-
/**
- * releases resources associated with this object
+ * releases resources associated with this package
*/
void close();
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=1629162&r1=1629161&r2=1629162&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 Fri Oct 3 09:33:20 2014
@@ -103,6 +103,10 @@ public class OsgiServicePropertiesResour
Object service = context.getService(serviceReference);
+ if (service == null) {
+ return null;
+ }
+
services.put(serviceName, service);
serviceProperties.put(serviceName, properties);
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=1629162&r1=1629161&r2=1629162&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 Fri Oct 3 09:33:20 2014
@@ -39,7 +39,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * base abstract implementation of a {@link ReplicationPackageBuilder}
+ * base abstract implementation of a JCR based {@link ReplicationPackageBuilder}
*/
public abstract class AbstractReplicationPackageBuilder implements ReplicationPackageBuilder {
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=1629162&r1=1629161&r2=1629162&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 Fri Oct 3 09:33:20 2014
@@ -81,6 +81,7 @@ public class ReplicationTriggerServlet e
// needed to allow e.g. the JavaScript EventSource API to make a call from author to this server and listen for the events
// TODO : check if this is needed or not (other than for browser communication)
+ // TODO : allowed origins should be explicitly configured
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java?rev=1629162&r1=1629161&r2=1629162&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java Fri Oct 3 09:33:20 2014
@@ -52,10 +52,8 @@ public class UserCredentialsTransportAut
public void activate(Map<String, Object> config) {
transportAuthenticationProvider = new UserCredentialsTransportAuthenticationProvider(config);
-
}
-
public Object authenticate(Object authenticable, TransportAuthenticationContext context)
throws TransportAuthenticationException {
return transportAuthenticationProvider.authenticate(authenticable, context);
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java?rev=1629162&r1=1629161&r2=1629162&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java Fri Oct 3 09:33:20 2014
@@ -16,7 +16,6 @@
* specific language governing permissions and limitations
* under the License.
*/
-
package org.apache.sling.replication.transport.impl;
import javax.servlet.http.HttpServletRequest;
@@ -34,12 +33,9 @@ public class RequestUtils {
String action = request.getParameter(ReplicationParameter.ACTION.toString());
String[] paths = request.getParameterValues(ReplicationParameter.PATH.toString());
- ReplicationRequest replicationRequest = new ReplicationRequest(System.currentTimeMillis(),
+ return new ReplicationRequest(System.currentTimeMillis(),
ReplicationActionType.fromName(action),
paths);
-
- return replicationRequest;
-
}
public static URI appendReplicationRequest(URI uri, ReplicationRequest replicationRequest) throws URISyntaxException {
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=1629162&r1=1629161&r2=1629162&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 Fri Oct 3 09:33:20 2014
@@ -24,6 +24,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.replication.agent.ReplicationComponent;
import org.apache.sling.replication.communication.ReplicationActionType;
import org.apache.sling.replication.communication.ReplicationRequest;
import org.apache.sling.replication.event.ReplicationEvent;
@@ -41,7 +42,7 @@ import org.slf4j.LoggerFactory;
/**
* {@link org.apache.sling.replication.trigger.ReplicationTrigger} for chain replication upon a certain {@link org.apache.sling.replication.event.ReplicationEventType}
*/
-public class ChainReplicateReplicationTrigger implements ReplicationTrigger {
+public class ChainReplicateReplicationTrigger implements ReplicationTrigger, ReplicationComponent {
public static final String TYPE = "replicateEvent";
public static final String PATH = "path";
@@ -63,14 +64,7 @@ public class ChainReplicateReplicationTr
this.pathPrefix = pathPrefix;
}
- protected void deactivate() {
- for (Map.Entry<String, ServiceRegistration> entry : registrations.entrySet()) {
- if (entry.getValue() != null) {
- entry.getValue().unregister();
- }
- }
- registrations.clear();
- }
+
public void register(String handlerId, ReplicationTriggerRequestHandler requestHandler) {
// register an event handler on replication package install (on a certain path) which triggers the chain replication of that same package
@@ -98,6 +92,18 @@ public class ChainReplicateReplicationTr
}
}
+ public void enable() {
+ }
+
+ public void disable() {
+ for (Map.Entry<String, ServiceRegistration> entry : registrations.entrySet()) {
+ if (entry.getValue() != null) {
+ entry.getValue().unregister();
+ }
+ }
+ registrations.clear();
+ }
+
private class TriggerAgentEventListener implements EventHandler {
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=1629162&r1=1629161&r2=1629162&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 Fri Oct 3 09:33:20 2014
@@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentHa
import org.apache.sling.api.SlingConstants;
import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.replication.agent.ReplicationComponent;
import org.apache.sling.replication.communication.ReplicationActionType;
import org.apache.sling.replication.communication.ReplicationRequest;
import org.apache.sling.replication.trigger.ReplicationTrigger;
@@ -40,7 +41,7 @@ import org.slf4j.LoggerFactory;
/**
* {@link org.apache.sling.replication.trigger.ReplicationTrigger} for triggering a specific agent upon node / properties being changed under a certain path
*/
-public class ResourceEventReplicationTrigger implements ReplicationTrigger {
+public class ResourceEventReplicationTrigger implements ReplicationTrigger, ReplicationComponent {
public static final String TYPE = "resourceEvent";
public static final String PATH = "path";
@@ -68,7 +69,11 @@ public class ResourceEventReplicationTri
this.path = path;
}
- protected void deactivate() {
+ public void enable() {
+
+ }
+
+ public void disable() {
for (Map.Entry<String, ServiceRegistration> entry : registrations.entrySet()) {
if (entry.getValue() != null) {
entry.getValue().unregister();
@@ -114,9 +119,9 @@ public class ResourceEventReplicationTri
ReplicationActionType.DELETE : ReplicationActionType.ADD;
log.info("triggering replication from event {}", event);
- Object eventProperty = event.getProperty("path");
- if (eventProperty != null) {
- String replicatingPath = String.valueOf(eventProperty);
+ Object pathProperty = event.getProperty("path");
+ if (pathProperty != null) {
+ String replicatingPath = String.valueOf(pathProperty);
requestHandler.handle(new ReplicationRequest(System.currentTimeMillis(), action, replicatingPath));
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java?rev=1629162&r1=1629161&r2=1629162&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java Fri Oct 3 09:33:20 2014
@@ -125,8 +125,10 @@ public class SimpleReplicationAgentTest
ReplicationPackageExporter packageExporter = mock(ReplicationPackageExporter.class);
ReplicationQueueProvider queueProvider = mock(ReplicationQueueProvider.class);
ReplicationQueueDistributionStrategy distributionHandler = mock(ReplicationQueueDistributionStrategy.class);
+ ReplicationEventFactory replicationEventFactory = mock(ReplicationEventFactory.class);
+
SimpleReplicationAgent agent = new SimpleReplicationAgent(name, true,
- false, packageImporter, packageExporter, queueProvider, distributionHandler, null, null);
+ false, packageImporter, packageExporter, queueProvider, distributionHandler, replicationEventFactory, null);
ReplicationQueue queue = mock(ReplicationQueue.class);
when(queueProvider.getDefaultQueue(agent.getName())).thenReturn(queue);
assertNotNull(agent.getQueue(null));
@@ -139,8 +141,10 @@ public class SimpleReplicationAgentTest
ReplicationPackageExporter packageExporter = mock(ReplicationPackageExporter.class);
ReplicationQueueProvider queueProvider = mock(ReplicationQueueProvider.class);
ReplicationQueueDistributionStrategy distributionHandler = mock(ReplicationQueueDistributionStrategy.class);
+ ReplicationEventFactory replicationEventFactory = mock(ReplicationEventFactory.class);
+
SimpleReplicationAgent agent = new SimpleReplicationAgent(name, true,
- false, packageImporter, packageExporter, queueProvider, distributionHandler, null, null);
+ false, packageImporter, packageExporter, queueProvider, distributionHandler, replicationEventFactory, null);
ReplicationQueue queue = mock(ReplicationQueue.class);
when(queueProvider.getQueue(agent.getName(), "priority")).thenReturn(queue);
assertNotNull(agent.getQueue("priority"));
@@ -153,8 +157,10 @@ public class SimpleReplicationAgentTest
ReplicationPackageExporter packageExporter = mock(ReplicationPackageExporter.class);
ReplicationQueueProvider queueProvider = mock(ReplicationQueueProvider.class);
ReplicationQueueDistributionStrategy distributionHandler = mock(ReplicationQueueDistributionStrategy.class);
+ ReplicationEventFactory replicationEventFactory = mock(ReplicationEventFactory.class);
+
SimpleReplicationAgent agent = new SimpleReplicationAgent(name, true,
- false, packageImporter, packageExporter, queueProvider, distributionHandler, null, null);
+ false, packageImporter, packageExporter, queueProvider, distributionHandler, replicationEventFactory, null);
ReplicationQueue queue = mock(ReplicationQueue.class);
when(queueProvider.getQueue(agent.getName(), "priority")).thenReturn(queue);
assertNull(agent.getQueue("weird"));
Added: sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-content-event.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-content-event.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-content-event.json (added)
+++ sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-content-event.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,13 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "test-content-event",
+
+ "componentType": "trigger",
+
+ "properties": [
+ "type=resourceEvent",
+ "path=/content"
+
+ ]
+
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-remote-event.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-remote-event.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-remote-event.json (added)
+++ sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-remote-event.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,15 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "test-remote-event",
+
+ "componentType": "trigger",
+
+ "properties": [
+ "type=remoteEvent",
+ "endpoint=http://localhost:4503/libs/sling/replication/services/triggers/content-changed.event",
+
+ "authenticationProvider/type=service",
+ "authenticationProvider/name=publishAdmin"
+ ]
+
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-replicate-event.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-replicate-event.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-replicate-event.json (added)
+++ sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-replicate-event.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,12 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "test-replicate-event",
+
+ "componentType": "trigger",
+
+ "properties": [
+ "type=replicateEvent"
+
+ ]
+
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-scheduled-event.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-scheduled-event.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-scheduled-event.json (added)
+++ sling/trunk/contrib/extensions/replication/it/src/main/resources/SLING-CONTENT/libs/test/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-test-scheduled-event.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,12 @@
+ {
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "test-scheduled-event",
+
+ "componentType": "trigger",
+
+ "properties": [
+ "type=scheduledEvent",
+ "action=poll",
+ "seconds=30"
+ ]
+}
\ No newline at end of file
Modified: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.CoordinatingReplicationAgentFactory-pubsync.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.CoordinatingReplicationAgentFactory-pubsync.json?rev=1629162&r1=1629161&r2=1629162&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.CoordinatingReplicationAgentFactory-pubsync.json (original)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.CoordinatingReplicationAgentFactory-pubsync.json Fri Oct 3 09:33:20 2014
@@ -1,25 +1,21 @@
{
"jcr:primaryType": "sling:OsgiConfig",
"name": "pubsync",
- "type": "coordinating",
- "enabled" : false,
"packageExporter": [
"authenticationProvider/type=service",
- "authenticationProvider/name=publishAdmin",
"packageBuilder/type=vlt",
"packageBuilder/servicename=replicationService",
- "endpoints[0]=http://localhost:4503/libs/sling/replication/services/exporters/reverse",
- "endpoints[1]=http://localhost:4504/libs/sling/replication/services/exporters/reverse",
- "endpoints[2]=http://localhost:4505/libs/sling/replication/services/exporters/reverse",
+ "endpoints[0]=http://localhost:4503/libs/sling/replication/services/exporters/reverse-pubsync",
+ "endpoints[1]=http://localhost:4504/libs/sling/replication/services/exporters/reverse-pubsync",
+ "endpoints[2]=http://localhost:4505/libs/sling/replication/services/exporters/reverse-pubsync",
"endpoints.strategy=All"
],
"packageImporter": [
"authenticationProvider/type=service",
- "authenticationProvider/name=publishAdmin",
"packageBuilder/type=vlt",
"packageBuilder/servicename=replicationService",
@@ -30,13 +26,9 @@
"endpoints.strategy=All"
],
- "queueProvider": [
- "type=service",
- "name=sjh"
- ],
+ "queueProvider.target" : "(name=sjh)",
+
+ "queueDistributionStrategy.target": "(name=error)",
- "queueDistributionStrategy": [
- "type=service",
- "name=error"
- ]
+ "transportAuthenticationProvider.target" : "(name=publishAdmin)"
}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-remote-event.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-remote-event.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-remote-event.json (added)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-remote-event.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,16 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "remote-event",
+
+ "componentType": "trigger",
+
+ "properties": [
+ "type=remoteEvent",
+ "endpoint=http://localhost:4503/libs/sling/replication/services/triggers/content-changed.event",
+
+ "authenticationProvider/type=service"
+ ],
+
+ "transportAuthenticationProvider.target" : "(name=publishAdmin)"
+
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json (added)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,43 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "publish-reverse",
+
+ "enabled" : true,
+
+ "packageExporter": [
+ "type=remote",
+ "endpoints[0]=http://localhost:4503/libs/sling/replication/services/exporters/reverse",
+
+ "authenticationProvider/type=service",
+
+ "packageBuilder/type=vlt",
+ "packageBuilder/servicename=replicationService"
+ ],
+
+ "packageImporter": [
+ "type=local",
+ "packageBuilder/type=vlt",
+ "packageBuilder/servicename=replicationService"
+ ],
+
+ "trigger0": [
+ "type=scheduledEvent",
+ "action=poll",
+ "seconds=30"
+ ],
+
+ "trigger1": [
+ "type=remoteEvent",
+ "endpoint=http://localhost:4503/libs/sling/replication/services/triggers/content-changed.event",
+
+ "authenticationProvider/type=service"
+ ],
+
+
+ "queueProvider.target" : "(name=sjh)",
+
+ "queueDistributionStrategy.target": "(name=error)",
+
+ "transportAuthenticationProvider.target" : "(name=publishAdmin)"
+
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json (added)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,26 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "publish",
+
+ "packageExporter": [
+ "type=local",
+ "packageBuilder/type=vlt",
+ "packageBuilder/servicename=replicationService"
+ ],
+
+ "packageImporter": [
+ "type=remote",
+ "endpoints[0]=http://localhost:4503/libs/sling/replication/services/importers/default",
+
+ "authenticationProvider/type=service",
+
+ "packageBuilder/type=vlt",
+ "packageBuilder/servicename=replicationService"
+ ],
+
+ "queueProvider.target" : "(name=sjh)",
+
+ "queueDistributionStrategy.target": "(name=error)",
+
+ "transportAuthenticationProvider.target" : "(name=publishAdmin)"
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-content-changed.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-content-changed.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-content-changed.json (added)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.GenericReplicationComponentFactory-trigger-content-changed.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,12 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "content-changed",
+
+ "componentType": "trigger",
+
+ "properties": [
+ "type=resourceEvent",
+ "path=/content/usergenerated"
+ ]
+
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json (added)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,19 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "cache-flush",
+
+ "packageExporter": [
+ "type=service",
+ "name=void"
+ ],
+
+ "packageImporter": [
+ "type=service",
+ "name=cache-flush"
+ ],
+
+
+ "queueProvider.target" : "(name=sjh)",
+
+ "queueDistributionStrategy": "(name=error)"
+}
Added: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json?rev=1629162&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json (added)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json Fri Oct 3 09:33:20 2014
@@ -0,0 +1,28 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "reverse",
+
+ "isPassive": true,
+
+ "packageExporter": [
+ "type=local",
+ "packageBuilder/type=vlt",
+ "packageBuilder/servicename=replicationService"
+ ],
+
+ "packageImporter": [
+ "type=local",
+ "packageBuilder/type=vlt",
+ "packageBuilder/servicename=replicationService"
+ ],
+
+
+ "queueProvider.target" : "(name=sjh)",
+
+ "queueDistributionStrategy": "(name=error)",
+
+ "trigger0": [
+ "type=resourceEvent",
+ "path=/content/usergenerated"
+ ]
+}
Modified: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resources/settings/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-simpleAgents.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resources/settings/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-simpleAgents.json?rev=1629162&r1=1629161&r2=1629162&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resources/settings/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-simpleAgents.json (original)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resources/settings/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-simpleAgents.json Fri Oct 3 09:33:20 2014
@@ -2,7 +2,7 @@
"jcr:primaryType": "sling:OsgiConfig",
"name": "simpleAgents",
"provider.roots": [ "/libs/sling/replication/settings/agents" ],
- "serviceType": "org.apache.sling.replication.agent.impl.CompactSimpleReplicationAgentFactory",
+ "serviceType": "org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory",
"providerType": "osgiConfig",
"groupPrefix": "agents",