You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/01/29 16:57:44 UTC

aries-rsa git commit: ARIES-1764 Send events using eventadmin

Repository: aries-rsa
Updated Branches:
  refs/heads/master bce388e25 -> c8b8492e3


ARIES-1764 Send events using eventadmin


Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/c8b8492e
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/c8b8492e
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/c8b8492e

Branch: refs/heads/master
Commit: c8b8492e3dc14ef6674dcbda571178d6e7bbd97d
Parents: bce388e
Author: Christian Schneider <cs...@adobe.com>
Authored: Mon Jan 29 17:57:38 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Mon Jan 29 17:57:38 2018 +0100

----------------------------------------------------------------------
 .../aries/rsa/core/ExportRegistrationImpl.java  | 32 ++++++++++++++------
 .../aries/rsa/core/ImportRegistrationImpl.java  | 12 ++++++--
 .../aries/rsa/core/RemoteServiceAdminCore.java  |  6 ++--
 .../aries/rsa/core/event/EventProducer.java     | 10 ++++++
 .../rsa/core/ClientServiceFactoryTest.java      |  2 +-
 .../rsa/core/ImportRegistrationImplTest.java    |  6 ++--
 .../aries/rsa/core/event/EventProducerTest.java |  4 +--
 .../exporter/EndpointListenerNotifier.java      |  9 ++++++
 .../exporter/EndpointRepository.java            |  6 +++-
 9 files changed, 65 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java b/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
index 7018804..454aabb 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
@@ -21,14 +21,17 @@ package org.apache.aries.rsa.core;
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.aries.rsa.core.event.EventProducer;
 import org.apache.aries.rsa.spi.Endpoint;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.remoteserviceadmin.EndpointDescription;
 import org.osgi.service.remoteserviceadmin.ExportReference;
 import org.osgi.service.remoteserviceadmin.ExportRegistration;
+import org.osgi.service.remoteserviceadmin.RemoteServiceAdminEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,8 +49,15 @@ public class ExportRegistrationImpl implements ExportRegistration {
     private int instanceCount;
     private volatile boolean closed;
 
-    private ExportRegistrationImpl(ExportRegistrationImpl parent, RemoteServiceAdminCore rsaCore,
-            ExportReferenceImpl exportReference, Closeable server, Throwable exception) {
+    private EventProducer sender;
+
+    private ExportRegistrationImpl(ExportRegistrationImpl parent, 
+            RemoteServiceAdminCore rsaCore,
+            EventProducer sender,
+            ExportReferenceImpl exportReference, 
+            Closeable server, 
+            Throwable exception) {
+        this.sender = sender;
         this.parent = parent != null ? parent.parent : this; // a parent points to itself
         this.parent.addInstance();
         this.rsaCore = rsaCore;
@@ -58,18 +68,18 @@ public class ExportRegistrationImpl implements ExportRegistration {
 
     // create a clone of the provided ExportRegistrationImpl that is linked to it
     public ExportRegistrationImpl(ExportRegistrationImpl parent) {
-        this(parent, parent.rsaCore, new ExportReferenceImpl(parent.exportReference),
+        this(parent, parent.rsaCore, parent.sender, new ExportReferenceImpl(parent.exportReference),
             parent.server, parent.exception);
     }
 
     // create a new (parent) instance which was exported successfully with the given server
-    public ExportRegistrationImpl(ServiceReference sref, Endpoint endpoint, RemoteServiceAdminCore rsaCore) {
-        this(null, rsaCore, new ExportReferenceImpl(sref, endpoint.description()), endpoint, null);
+    public ExportRegistrationImpl(ServiceReference sref, Endpoint endpoint, RemoteServiceAdminCore rsaCore, EventProducer sender) {
+        this(null, rsaCore, sender, new ExportReferenceImpl(sref, endpoint.description()), endpoint, null);
     }
 
     // create a new (parent) instance which failed to be exported with the given exception
-    public ExportRegistrationImpl(RemoteServiceAdminCore rsaCore, Throwable exception) {
-        this(null, rsaCore, null, null, exception);
+    public ExportRegistrationImpl(RemoteServiceAdminCore rsaCore, EventProducer sender, Throwable exception) {
+        this(null, rsaCore, sender, null, null, exception);
     }
 
     private void ensureParent() {
@@ -164,7 +174,11 @@ public class ExportRegistrationImpl implements ExportRegistration {
 
     @Override
     public EndpointDescription update(Map<String, ?> properties) {
-        // TODO Auto-generated method stub
-        return null;
+        Map<String, Object> newProps = new HashMap<String, Object>(getExportReference().getExportedEndpoint().getProperties()); 
+        for (String key : properties.keySet()) {
+            newProps.put(key, properties.get(key));
+        }
+        this.sender.notifyUpdate(this.getExportReference());
+        return new EndpointDescription(newProps);
     }
 }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java b/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java
index 5d8a072..0d703ef 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java
@@ -19,8 +19,10 @@
 package org.apache.aries.rsa.core;
 
 import java.util.ArrayList;
+import java.util.Hashtable;
 import java.util.List;
 
+import org.apache.aries.rsa.core.event.EventProducer;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.remoteserviceadmin.EndpointDescription;
@@ -45,14 +47,17 @@ public class ImportRegistrationImpl implements ImportRegistration, ImportReferen
     private ImportRegistrationImpl parent;
     private List<ImportRegistrationImpl> children; // used only in parent
 
+    private EventProducer eventProducer;
+
     public ImportRegistrationImpl(Throwable ex) {
         exception = ex;
         initParent();
     }
 
-    public ImportRegistrationImpl(EndpointDescription endpoint, RemoteServiceAdminCore rsac) {
+    public ImportRegistrationImpl(EndpointDescription endpoint, RemoteServiceAdminCore rsac, EventProducer eventProducer) {
         this.endpoint = endpoint;
         this.rsaCore = rsac;
+        this.eventProducer = eventProducer;
         initParent();
     }
 
@@ -230,7 +235,8 @@ public class ImportRegistrationImpl implements ImportRegistration, ImportReferen
 
     @Override
     public boolean update(EndpointDescription endpoint) {
-        // TODO Auto-generated method stub
-        return false;
+        importedService.setProperties(new Hashtable<>(endpoint.getProperties()));
+        eventProducer.notifyUpdate(this);
+        return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java b/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
index 3f2359f..7b7b38d 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
@@ -214,9 +214,9 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
             if (endpoint == null) {
                 return null;
             }
-            return new ExportRegistrationImpl(serviceReference, endpoint, this);
+            return new ExportRegistrationImpl(serviceReference, endpoint, this, eventProducer);
         } catch (Exception e) {
-            return new ExportRegistrationImpl(this, e);
+            return new ExportRegistrationImpl(this, eventProducer, e);
         }
     }
     
@@ -414,7 +414,7 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
     protected ImportRegistrationImpl exposeServiceFactory(String[] interfaceNames,
                                             EndpointDescription epd,
                                             DistributionProvider handler) {
-        ImportRegistrationImpl imReg = new ImportRegistrationImpl(epd, this);
+        ImportRegistrationImpl imReg = new ImportRegistrationImpl(epd, this, eventProducer);
         try {
             EndpointDescription endpoint = imReg.getImportedEndpointDescription();
             Dictionary<String, Object> serviceProps = new Hashtable<String, Object>(endpoint.getProperties());

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java b/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java
index 1ad79d4..94aacd3 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java
@@ -20,6 +20,7 @@ package org.apache.aries.rsa.core.event;
 
 import java.util.List;
 
+import org.apache.aries.rsa.core.ExportRegistrationImpl;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
@@ -120,4 +121,13 @@ public class EventProducer {
         }
         eventAdminSender.send(rsae);
     }
+
+    public void notifyUpdate(ExportReference exportRef) {
+        notify(RemoteServiceAdminEvent.EXPORT_UPDATE, exportRef, null);
+    }
+
+    public void notifyUpdate(ImportRegistration importReg) {
+        notify(RemoteServiceAdminEvent.IMPORT_UPDATE, importReg.getImportReference(), importReg.getException());
+        
+    }
 }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/rsa/src/test/java/org/apache/aries/rsa/core/ClientServiceFactoryTest.java
----------------------------------------------------------------------
diff --git a/rsa/src/test/java/org/apache/aries/rsa/core/ClientServiceFactoryTest.java b/rsa/src/test/java/org/apache/aries/rsa/core/ClientServiceFactoryTest.java
index cd692e6..5c83b7f 100644
--- a/rsa/src/test/java/org/apache/aries/rsa/core/ClientServiceFactoryTest.java
+++ b/rsa/src/test/java/org/apache/aries/rsa/core/ClientServiceFactoryTest.java
@@ -48,7 +48,7 @@ public class ClientServiceFactoryTest extends TestCase {
 
         IMocksControl control = EasyMock.createControl();
         EndpointDescription endpoint = createTestEndpointDesc();
-        ImportRegistrationImpl iri = new ImportRegistrationImpl(endpoint, null);
+        ImportRegistrationImpl iri = new ImportRegistrationImpl(endpoint, null, null);
 
         BundleContext consumerContext = control.createMock(BundleContext.class);
         Bundle consumerBundle = control.createMock(Bundle.class);

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java
----------------------------------------------------------------------
diff --git a/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java b/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java
index ce7c19c..49aae53 100644
--- a/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java
+++ b/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java
@@ -53,7 +53,7 @@ public class ImportRegistrationImplTest {
 
         c.replay();
 
-        ImportRegistrationImpl i = new ImportRegistrationImpl(endpoint, rsac);
+        ImportRegistrationImpl i = new ImportRegistrationImpl(endpoint, rsac, null);
 
         assertNull(i.getException());
         assertEquals(i, i.getParent());
@@ -73,7 +73,7 @@ public class ImportRegistrationImplTest {
 
         c.replay();
 
-        ImportRegistrationImpl i1 = new ImportRegistrationImpl(endpoint, rsac);
+        ImportRegistrationImpl i1 = new ImportRegistrationImpl(endpoint, rsac, null);
 
         ImportRegistrationImpl i2 = new ImportRegistrationImpl(i1);
 
@@ -143,7 +143,7 @@ public class ImportRegistrationImplTest {
 
         c.replay();
 
-        ImportRegistrationImpl i1 = new ImportRegistrationImpl(endpoint, rsac);
+        ImportRegistrationImpl i1 = new ImportRegistrationImpl(endpoint, rsac, null);
 
         ImportRegistrationImpl i2 = new ImportRegistrationImpl(i1);
 

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java
----------------------------------------------------------------------
diff --git a/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java b/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java
index 602bcbe..6bb693e 100644
--- a/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java
+++ b/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java
@@ -103,7 +103,7 @@ public class EventProducerTest {
         EasyMock.replay(bc);
         EventProducer eventProducer = new EventProducer(bc);
 
-        ExportRegistrationImpl ereg = new ExportRegistrationImpl(sref, endpoint, rsaCore);
+        ExportRegistrationImpl ereg = new ExportRegistrationImpl(sref, endpoint, rsaCore, eventProducer);
         eventProducer.publishNotification(ereg);
 
         EasyMock.verify(rsaCore, sref, bundle, rsal, rsalSref, bc);
@@ -158,7 +158,7 @@ public class EventProducerTest {
         EasyMock.replay(bc);
         EventProducer eventProducer = new EventProducer(bc);
 
-        ExportRegistrationImpl ereg = new ExportRegistrationImpl(rsaCore, exportException);
+        ExportRegistrationImpl ereg = new ExportRegistrationImpl(rsaCore, eventProducer, exportException);
         eventProducer.publishNotification(Arrays.<ExportRegistration>asList(ereg));
 
         EasyMock.verify(rsaCore, sref, bundle, rsal, rsalSref, bc);

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointListenerNotifier.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointListenerNotifier.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointListenerNotifier.java
index 9b0386a..18a8ea2 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointListenerNotifier.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointListenerNotifier.java
@@ -83,6 +83,7 @@ public class EndpointListenerNotifier implements EndpointListener {
 
     @Override
     public void endpointRemoved(EndpointDescription endpoint, String matchedFilter) {
+        LOG.info("endpoint " + endpoint);
         notifyListeners(NotifyType.REMOVED, endpoint);
     }
 
@@ -107,6 +108,11 @@ public class EndpointListenerNotifier implements EndpointListener {
      */
     private void notifyListener(NotifyType type, EndpointListener listener, Set<Filter> filters, 
                         EndpointDescription endpoint) {
+        if (endpoint == null) {
+            throw new NullPointerException("Endpoint should not be null");
+            //LOG.warn("Endpoint should not be null");
+            //return;
+        }
         LOG.debug("Endpoint {}", type);
         Set<Filter> matchingFilters = getMatchingFilters(filters, endpoint);
         for (Filter filter : matchingFilters) {
@@ -120,6 +126,9 @@ public class EndpointListenerNotifier implements EndpointListener {
     
     private static Set<Filter> getMatchingFilters(Set<Filter> filters, EndpointDescription endpoint) {
         Set<Filter> matchingFilters = new HashSet<Filter>();
+        if (endpoint == null) {
+            return matchingFilters;
+        }
         Dictionary<String, Object> dict = new Hashtable<String, Object>(endpoint.getProperties());
         for (Filter filter : filters) {
             if (filter.match(dict)) {

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c8b8492e/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointRepository.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointRepository.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointRepository.java
index 71a9a29..5bebe4e 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointRepository.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/EndpointRepository.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.remoteserviceadmin.EndpointDescription;
 import org.osgi.service.remoteserviceadmin.EndpointListener;
@@ -87,7 +88,10 @@ public class EndpointRepository {
 
     public synchronized void addService(ServiceReference sref) {
         if (!exportedServices.containsKey(sref)) {
-            LOG.info("Marking service from bundle {} for export", sref.getBundle().getSymbolicName());
+            Bundle bundle = sref.getBundle();
+            if (bundle != null) {
+                LOG.info("Marking service from bundle {} for export", bundle.getSymbolicName());
+            }
             exportedServices.put(sref, new LinkedHashMap<RemoteServiceAdmin, Collection<EndpointDescription>>());
         }
     }