Author: cziegeler Date: Thu Sep 22 13:33:05 2016 New Revision: 1761965 URL: http://svn.apache.org/viewvc?rev=1761965&view=rev Log: SLING-5996 : DistributedEventSender should move to new ResourceChangeListener API
Modified: sling/trunk/bundles/extensions/dea/pom.xml sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java 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/package-info.java sling/trunk/bundles/extensions/dea/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java Modified: sling/trunk/bundles/extensions/dea/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/dea/pom.xml?rev=1761965&r1=1761964&r2=1761965&view=diff ============================================================================== --- sling/trunk/bundles/extensions/dea/pom.xml (original) +++ sling/trunk/bundles/extensions/dea/pom.xml Thu Sep 22 13:33:05 2016 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.sling</groupId> <artifactId>sling</artifactId> - <version>26</version> + <version>28</version> <relativePath /> </parent> @@ -46,10 +46,6 @@ <plugins> <plugin> <groupId>org.apache.felix</groupId> - <artifactId>maven-scr-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> </plugin> @@ -70,28 +66,24 @@ </reporting> <dependencies> <dependency> - <groupId>org.apache.felix</groupId> - <artifactId>org.apache.felix.scr.annotations</artifactId> - </dependency> - <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.discovery.api</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.service.event</artifactId> + <version>1.3.1</version> + <scope>provided</scope> </dependency> <dependency> - <groupId>org.osgi</groupId> - <artifactId>org.osgi.core</artifactId> - <version>4.2.0</version> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>org.osgi</groupId> - <artifactId>org.osgi.compendium</artifactId> - <version>4.2.0</version> + <artifactId>osgi.core</artifactId> </dependency> <dependency> <groupId>org.apache.sling</groupId> @@ -108,7 +100,7 @@ <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.api</artifactId> - <version>2.4.0</version> + <version>2.11.0</version> <scope>provided</scope> </dependency> <!-- Testing --> @@ -125,7 +117,7 @@ <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> - <version>1.9.5</version> + <version>1.10.19</version> <scope>test</scope> </dependency> <dependency> Modified: sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java?rev=1761965&r1=1761964&r2=1761965&view=diff ============================================================================== --- sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java (original) +++ sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java Thu Sep 22 13:33:05 2016 @@ -18,17 +18,13 @@ */ package org.apache.sling.event.dea.impl; -import java.util.Map; - -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Reference; import org.apache.sling.api.resource.ResourceResolverFactory; -import org.apache.sling.commons.osgi.PropertiesUtil; import org.apache.sling.settings.SlingSettingsService; import org.osgi.framework.BundleContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; import org.osgi.service.event.EventAdmin; /** @@ -38,6 +34,14 @@ import org.osgi.service.event.EventAdmin @Component(name="org.apache.sling.event.impl.DistributingEventHandler") public class DistributedEventAdminImpl { + public @interface Config { + + /** The path where all jobs are stored. */ + String repository_path() default DEFAULT_REPOSITORY_PATH; + + int cleanup_period() default DEFAULT_CLEANUP_PERIOD; + } + public static final String RESOURCE_TYPE_FOLDER = "sling:Folder"; public static final String RESOURCE_TYPE_EVENT = "sling/distributed/event"; @@ -54,16 +58,9 @@ public class DistributedEventAdminImpl { /** Default repository path. */ public static final String DEFAULT_REPOSITORY_PATH = "/var/eventing/distribution"; - /** The path where all jobs are stored. */ - @Property(value=DEFAULT_REPOSITORY_PATH) - private static final String CONFIG_PROPERTY_REPOSITORY_PATH = "repository.path"; - /** Default clean up time is 15 minutes. */ private static final int DEFAULT_CLEANUP_PERIOD = 15; - @Property(intValue=DEFAULT_CLEANUP_PERIOD) - private static final String CONFIG_PROPERTY_CLEANUP_PERIOD = "cleanup.period"; - /** The local receiver of distributed events .*/ private DistributedEventReceiver receiver; @@ -71,19 +68,16 @@ public class DistributedEventAdminImpl { private DistributedEventSender sender; @Activate - protected void activate(final BundleContext bundleContext, final Map<String, Object> props) { - final int cleanupPeriod = PropertiesUtil.toInteger(props.get(CONFIG_PROPERTY_CLEANUP_PERIOD), DEFAULT_CLEANUP_PERIOD); - final String rootPath = PropertiesUtil.toString(props.get( - CONFIG_PROPERTY_REPOSITORY_PATH), DEFAULT_REPOSITORY_PATH); - final String ownRootPath = rootPath.concat("/").concat(settings.getSlingId()); + protected void activate(final BundleContext bundleContext, final Config props) { + final String ownRootPath = props.repository_path().concat("/").concat(settings.getSlingId()); this.receiver = new DistributedEventReceiver(bundleContext, - rootPath, + props.repository_path(), ownRootPath, - cleanupPeriod, + props.cleanup_period(), this.resourceResolverFactory, this.settings); this.sender = new DistributedEventSender(bundleContext, - rootPath, + props.repository_path(), ownRootPath, this.resourceResolverFactory, this.eventAdmin); } 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=1761965&r1=1761964&r2=1761965&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 Sep 22 13:33:05 2016 @@ -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()}, 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=1761965&r1=1761964&r2=1761965&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 Sep 22 13:33:05 2016 @@ -25,12 +25,14 @@ import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; -import org.apache.sling.api.SlingConstants; import org.apache.sling.api.resource.LoginException; import org.apache.sling.api.resource.Resource; 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.ExternalResourceChangeListener; +import org.apache.sling.api.resource.observation.ResourceChange; +import org.apache.sling.api.resource.observation.ResourceChangeListener; import org.apache.sling.event.dea.DEAConstants; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; @@ -38,7 +40,6 @@ import org.osgi.framework.ServiceRegistr import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; import org.osgi.service.event.EventConstants; -import org.osgi.service.event.EventHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,7 +53,7 @@ import org.slf4j.LoggerFactory; * <p> */ public class DistributedEventSender - implements EventHandler { + implements ResourceChangeListener, ExternalResourceChangeListener { /** Default logger. */ private final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -69,7 +70,7 @@ public class DistributedEventSender private final String ownRootPathWithSlash; - private volatile ServiceRegistration serviceRegistration; + private volatile ServiceRegistration<ResourceChangeListener> serviceRegistration; public DistributedEventSender(final BundleContext bundleContext, final String rootPath, @@ -89,12 +90,12 @@ public class DistributedEventSender props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation"); // listen for all resource added OSGi events in the DEA area - props.put(EventConstants.EVENT_TOPIC, SlingConstants.TOPIC_RESOURCE_ADDED); - props.put(EventConstants.EVENT_FILTER, "(path=" + rootPath + "/*)"); + props.put(ResourceChangeListener.CHANGES, ResourceChange.ChangeType.ADDED.name()); + props.put(ResourceChangeListener.PATHS, rootPath); - final ServiceRegistration reg = - bundleContext.registerService(new String[] {EventHandler.class.getName()}, - DistributedEventSender.this, props); + final ServiceRegistration<ResourceChangeListener> reg = + bundleContext.registerService(ResourceChangeListener.class, + DistributedEventSender.this, props); DistributedEventSender.this.serviceRegistration = reg; @@ -218,17 +219,18 @@ public class DistributedEventSender } /** - * @see org.osgi.service.event.EventHandler#handleEvent(org.osgi.service.event.Event) + * @see org.apache.sling.api.resource.observation.ResourceChangeListener#onChange(java.util.List) */ @Override - public void handleEvent(final Event event) { - final String path = (String) event.getProperty(SlingConstants.PROPERTY_PATH); - if ( !path.startsWith(this.ownRootPathWithSlash) ) { - try { - this.queue.put(path); - } catch (final InterruptedException ex) { - this.ignoreException(ex); - Thread.currentThread().interrupt(); + public void onChange(final List<ResourceChange> changes) { + for(final ResourceChange c : changes) { + if ( !c.getPath().startsWith(this.ownRootPathWithSlash) ) { + try { + this.queue.put(c.getPath()); + } catch (final InterruptedException ex) { + this.ignoreException(ex); + Thread.currentThread().interrupt(); + } } } } Modified: sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/package-info.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/package-info.java?rev=1761965&r1=1761964&r2=1761965&view=diff ============================================================================== --- sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/package-info.java (original) +++ sling/trunk/bundles/extensions/dea/src/main/java/org/apache/sling/event/dea/package-info.java Thu Sep 22 13:33:05 2016 @@ -17,8 +17,7 @@ * under the License. */ -@Version("1.0.0") +@org.osgi.annotation.versioning.Version("1.0.0") package org.apache.sling.event.dea; -import aQute.bnd.annotation.Version; Modified: sling/trunk/bundles/extensions/dea/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/dea/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java?rev=1761965&r1=1761964&r2=1761965&view=diff ============================================================================== --- sling/trunk/bundles/extensions/dea/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java (original) +++ sling/trunk/bundles/extensions/dea/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java Thu Sep 22 13:33:05 2016 @@ -30,6 +30,8 @@ import java.util.List; import org.apache.sling.api.SlingConstants; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; +import org.apache.sling.api.resource.observation.ResourceChange; +import org.apache.sling.api.resource.observation.ResourceChange.ChangeType; import org.apache.sling.event.dea.DEAConstants; import org.apache.sling.settings.SlingSettingsService; import org.apache.sling.testing.resourceresolver.MockResourceResolverFactory; @@ -77,7 +79,9 @@ public class DistributingEventHandlerTes public void postEvent(final Event event) { final String topic = event.getTopic(); if ( topic.equals(SlingConstants.TOPIC_RESOURCE_ADDED) ) { - sender.handleEvent(event); + final ResourceChange change = new ResourceChange(ChangeType.ADDED, + (String)event.getProperty(SlingConstants.PROPERTY_PATH), false, null, null, null); + sender.onChange(Collections.singletonList(change)); } else if ( topic.startsWith(TOPIC_PREFIX) ) { events.add(event); }