You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/05/28 10:54:14 UTC
svn commit: r1682177 - in /sling/trunk/bundles/extensions/dea: ./
src/main/java/org/apache/sling/event/dea/impl/
Author: cziegeler
Date: Thu May 28 08:54:14 2015
New Revision: 1682177
URL: http://svn.apache.org/r1682177
Log:
SLING-4758 : Make the DEA bundle usable on older Sling installations
Modified:
sling/trunk/bundles/extensions/dea/pom.xml
sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java
sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java
sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/ResourceHelper.java
Modified: sling/trunk/bundles/extensions/dea/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/dea/pom.xml?rev=1682177&r1=1682176&r2=1682177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/dea/pom.xml (original)
+++ sling/trunk/bundles/extensions/dea/pom.xml Thu May 28 08:54:14 2015
@@ -91,12 +91,12 @@
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
- <version>5.0.0</version>
+ <version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
- <version>5.0.0</version>
+ <version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
@@ -113,7 +113,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.8.0</version>
+ <version>2.4.0</version>
<scope>provided</scope>
</dependency>
<!-- Testing -->
Modified: sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java?rev=1682177&r1=1682176&r2=1682177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java (original)
+++ sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java Thu May 28 08:54:14 2015
@@ -97,7 +97,7 @@ public class DistributedEventReceiver
private volatile Set<String> instances;
/** The service registration. */
- private volatile ServiceRegistration<?> serviceRegistration;
+ private volatile ServiceRegistration serviceRegistration;
public DistributedEventReceiver(final BundleContext bundleContext,
final String rootPath,
@@ -127,7 +127,7 @@ public class DistributedEventReceiver
props.put("scheduler.period", 1800L);
props.put("scheduler.concurrent", Boolean.FALSE);
- final ServiceRegistration<?> reg =
+ final ServiceRegistration reg =
bundleContext.registerService(new String[] {EventHandler.class.getName(),
Runnable.class.getName(),
TopologyEventListener.class.getName()},
@@ -301,7 +301,7 @@ public class DistributedEventReceiver
final Resource baseResource = resolver.getResource(this.rootPath);
// sanity check - should never be null
if ( baseResource != null ) {
- final ResourceUtil.BatchResourceRemover brr = ResourceUtil.getBatchResourceRemover(50);
+ final ResourceHelper.BatchResourceRemover brr = ResourceHelper.getBatchResourceRemover(50);
final Iterator<Resource> iter = baseResource.listChildren();
while ( iter.hasNext() ) {
final Resource rootResource = iter.next();
@@ -333,7 +333,7 @@ public class DistributedEventReceiver
ResourceResolver resolver = null;
try {
resolver = this.resourceResolverFactory.getAdministrativeResourceResolver(null);
- final ResourceUtil.BatchResourceRemover brr = ResourceUtil.getBatchResourceRemover(50);
+ final ResourceHelper.BatchResourceRemover brr = ResourceHelper.getBatchResourceRemover(50);
final Resource baseResource = resolver.getResource(this.ownRootPath);
// sanity check - should never be null
Modified: sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java?rev=1682177&r1=1682176&r2=1682177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java (original)
+++ sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java Thu May 28 08:54:14 2015
@@ -69,7 +69,7 @@ public class DistributedEventSender
private final String ownRootPathWithSlash;
- private volatile ServiceRegistration<?> serviceRegistration;
+ private volatile ServiceRegistration serviceRegistration;
public DistributedEventSender(final BundleContext bundleContext,
final String rootPath,
@@ -92,7 +92,7 @@ public class DistributedEventSender
props.put(EventConstants.EVENT_TOPIC, SlingConstants.TOPIC_RESOURCE_ADDED);
props.put(EventConstants.EVENT_FILTER, "(path=" + rootPath + "/*)");
- final ServiceRegistration<?> reg =
+ final ServiceRegistration reg =
bundleContext.registerService(new String[] {EventHandler.class.getName()},
DistributedEventSender.this, props);
Modified: sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/ResourceHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/ResourceHelper.java?rev=1682177&r1=1682176&r2=1682177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/ResourceHelper.java (original)
+++ sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/ResourceHelper.java Thu May 28 08:54:14 2015
@@ -27,7 +27,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
public abstract class ResourceHelper {
@@ -83,7 +86,7 @@ public abstract class ResourceHelper {
}
public static ValueMap getValueMap(final Resource resource) throws InstantiationException {
- final ValueMap vm = resource.getValueMap();
+ final ValueMap vm = ResourceUtil.getValueMap(resource);
// trigger full loading
try {
vm.size();
@@ -93,4 +96,51 @@ public abstract class ResourceHelper {
}
return vm;
}
+
+ /**
+ * A batch resource remover deletes resources in batches. Once the batch
+ * size (threshold) is reached, an intermediate commit is performed. Resource
+ * trees are deleted resource by resource starting with the deepest children first.
+ * Once all resources have been passed to the batch resource remover, a final
+ * commit needs to be called on the resource resolver.
+ */
+ public static class BatchResourceRemover {
+
+ private final int max;
+
+ private int count;
+
+ public BatchResourceRemover(final int batchSize) {
+ this.max = (batchSize < 1 ? 50 : batchSize);
+ }
+
+ public void delete(final Resource rsrc)
+ throws PersistenceException {
+ final ResourceResolver resolver = rsrc.getResourceResolver();
+ for(final Resource child : rsrc.getChildren()) {
+ delete(child);
+ }
+ resolver.delete(rsrc);
+ count++;
+ if ( count >= max ) {
+ resolver.commit();
+ count = 0;
+ }
+ }
+ }
+
+ /**
+ * Create a batch resource remover.
+ * A batch resource remove can be used to delete resources in batches.
+ * Once the passed in threshold of deleted resources is reached, an intermediate
+ * commit is called on the resource resolver. In addition the batch remover
+ * deletes a resource recursively.
+ * Once all resources to delete are passed to the remover, a final commit needs
+ * to be call on the resource resolver.
+ * @param threshold The threshold for the intermediate saves.
+ * @return A new batch resource remover.
+ */
+ public static BatchResourceRemover getBatchResourceRemover(final int threshold) {
+ return new BatchResourceRemover(threshold);
+ }
}
\ No newline at end of file