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 <[email protected]> Authored: Mon Jan 29 17:57:38 2018 +0100 Committer: Christian Schneider <[email protected]> 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>>()); } }
