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>