Author: stefanegli
Date: Wed Sep 21 14:46:59 2016
New Revision: 1761756
URL: http://svn.apache.org/viewvc?rev=1761756&view=rev
Log:
SLING-5995 : changing IdMapService from being an OSGi EventListener to a Sling
ResourceChangeListener
Modified:
sling/trunk/bundles/extensions/discovery/commons/pom.xml
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java
sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
sling/trunk/bundles/extensions/discovery/oak/pom.xml
Modified: sling/trunk/bundles/extensions/discovery/commons/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/pom.xml?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/commons/pom.xml Wed Sep 21
14:46:59 2016
@@ -119,8 +119,8 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.4.0</version>
- <scope>provided</scope>
+ <version>2.10.0</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
@@ -161,7 +161,9 @@
</dependency>
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
+ <artifactId>osgi.core</artifactId>
+ <version>6.0.0</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
Modified:
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
(original)
+++
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
Wed Sep 21 14:46:59 2016
@@ -22,6 +22,7 @@ import java.util.Dictionary;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -31,7 +32,6 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.api.SlingConstants;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.PersistenceException;
@@ -39,6 +39,9 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.resource.observation.ResourceChangeListener;
+import org.apache.sling.api.resource.observation.ResourceChange;
+import org.apache.sling.api.resource.observation.ResourceChange.ChangeType;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.discovery.commons.providers.util.ResourceHelper;
import org.apache.sling.settings.SlingSettingsService;
@@ -46,8 +49,6 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.event.Event;
-import org.osgi.service.event.EventConstants;
-import org.osgi.service.event.EventHandler;
/**
* The IdMapService is responsible for storing a slingId-clusterNodeId
@@ -56,7 +57,7 @@ import org.osgi.service.event.EventHandl
*/
@Component(immediate = false)
@Service(value = { IdMapService.class })
-public class IdMapService extends AbstractServiceWithBackgroundCheck
implements EventHandler {
+public class IdMapService extends AbstractServiceWithBackgroundCheck
implements ResourceChangeListener {
@Reference
private ResourceResolverFactory resourceResolverFactory;
@@ -80,7 +81,7 @@ public class IdMapService extends Abstra
private BundleContext bundleContext;
- private ServiceRegistration eventHandlerRegistration;
+ private volatile ServiceRegistration<ResourceChangeListener>
eventHandlerRegistration;
/** test-only constructor **/
public static IdMapService testConstructor(
@@ -131,18 +132,16 @@ public class IdMapService extends Abstra
}
Dictionary<String,Object> properties = new Hashtable<String,Object>();
properties.put(Constants.SERVICE_DESCRIPTION, "IdMap Change
Listener.");
+ properties.put(Constants.SERVICE_VENDOR, "The Apache Software
Foundation");
String[] topics = new String[] {
- SlingConstants.TOPIC_RESOURCE_ADDED,
- SlingConstants.TOPIC_RESOURCE_CHANGED,
- SlingConstants.TOPIC_RESOURCE_REMOVED };
- properties.put(EventConstants.EVENT_TOPIC, topics);
- String path = getIdMapPath();
- if (path.endsWith("/")) {
- path = path.substring(0, path.length()-1);
- }
- properties.put(EventConstants.EVENT_FILTER, "(&(path="+path+"))");
- eventHandlerRegistration = bundleContext.registerService(
- EventHandler.class.getName(), this, properties);
+ ChangeType.ADDED.toString(),
+ ChangeType.CHANGED.toString(),
+ ChangeType.REMOVED.toString()
+ };
+ properties.put(ResourceChangeListener.CHANGES, topics);
+ properties.put(ResourceChangeListener.PATHS, getIdMapPath());
+
+ this.eventHandlerRegistration =
bundleContext.registerService(ResourceChangeListener.class, this, properties);
}
/** Get or create a ResourceResolver **/
@@ -318,18 +317,11 @@ public class IdMapService extends Abstra
}
@Override
- public void handleEvent(Event event) {
- final String resourcePath = (String) event.getProperty("path");
- if (resourcePath == null) {
- // not of my business
- return;
- }
-
- if (!resourcePath.startsWith(getIdMapPath())) {
- // not of my business
- return;
- }
- logger.debug("handleEvent: got event for path: {}, event: {}",
resourcePath, event);
+ public void onChange(List<ResourceChange> changes) {
+ // the listener is registered on the .../idmap subpath, so any
+ // change it receives should be relevant. hence no further
+ // filtering necessary here.
+ logger.debug("onChange: got notified of changes, clearing cache.");
clearCache();
}
Modified:
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java
(original)
+++
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java
Wed Sep 21 14:46:59 2016
@@ -20,9 +20,9 @@
/**
* Provides default SPI-implementations used by
discovery.commons.providers.impl
*
- * @version 1.0.0
+ * @version 2.0.0
*/
-@Version("1.0.0")
+@Version("2.0.0")
package org.apache.sling.discovery.commons.providers.spi.base;
import aQute.bnd.annotation.Version;
Modified:
sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
(original)
+++
sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
Wed Sep 21 14:46:59 2016
@@ -326,4 +326,24 @@ public class MockedResourceResolver impl
}
+ @Override
+ public Resource getParent(Resource child) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ @Override
+ public boolean hasChildren(Resource resource) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ @Override
+ public Resource copy(String srcAbsPath, String destAbsPath) throws
PersistenceException {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ @Override
+ public Resource move(String srcAbsPath, String destAbsPath) throws
PersistenceException {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
}
Modified: sling/trunk/bundles/extensions/discovery/oak/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/pom.xml?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/oak/pom.xml Wed Sep 21 14:46:59
2016
@@ -151,7 +151,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.discovery.commons</artifactId>
- <version>1.0.10</version>
+ <version>1.0.13-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- besides including discovery.commons' normal jar above,
@@ -160,7 +160,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.discovery.commons</artifactId>
- <version>1.0.10</version>
+ <version>1.0.13-SNAPSHOT</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
@@ -183,7 +183,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.4.0</version>
+ <version>2.10.0</version>
<scope>provided</scope>
</dependency>
<dependency>