You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:33:51 UTC

[sling-org-apache-sling-event-dea] 04/08: SLING-5996 : DistributedEventSender should move to new ResourceChangeListener API

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.event.dea-1.1.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-event-dea.git

commit 9fe4fe69e5f89db56ba312710f4ac921c9c96c9d
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Sep 22 13:33:05 2016 +0000

    SLING-5996 : DistributedEventSender should move to new ResourceChangeListener API
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/dea@1761965 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            | 28 ++++++---------
 .../event/dea/impl/DistributedEventAdminImpl.java  | 40 +++++++++-------------
 .../event/dea/impl/DistributedEventReceiver.java   |  4 +--
 .../event/dea/impl/DistributedEventSender.java     | 38 ++++++++++----------
 .../org/apache/sling/event/dea/package-info.java   |  3 +-
 .../dea/impl/DistributingEventHandlerTest.java     |  6 +++-
 6 files changed, 55 insertions(+), 64 deletions(-)

diff --git a/pom.xml b/pom.xml
index 83d3675..c2d9718 100644
--- a/pom.xml
+++ b/pom.xml
@@ -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>
diff --git a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java
index df128b4..27a811c 100644
--- a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java
+++ b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventAdminImpl.java
@@ -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);
     }
diff --git a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java
index 995a0a9..7635f81 100644
--- a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java
+++ b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventReceiver.java
@@ -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()},
diff --git a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java
index 1cf81ec..e277bf9 100644
--- a/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java
+++ b/src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java
@@ -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.ServiceRegistration;
 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();
+                }
             }
         }
     }
diff --git a/src/main/java/org/apache/sling/event/dea/package-info.java b/src/main/java/org/apache/sling/event/dea/package-info.java
index 9495421..8e790d4 100644
--- a/src/main/java/org/apache/sling/event/dea/package-info.java
+++ b/src/main/java/org/apache/sling/event/dea/package-info.java
@@ -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;
 
diff --git a/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java b/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java
index 3547300..2b7293e 100644
--- a/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java
+++ b/src/test/java/org/apache/sling/event/dea/impl/DistributingEventHandlerTest.java
@@ -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 DistributingEventHandlerTest {
             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);
                 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.