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/30 11:36:01 UTC
aries-rsa git commit: [ARIES-1763] Support both EndpointListener and
EndpointEventListener in TopologyManager import
Repository: aries-rsa
Updated Branches:
refs/heads/master 0fea532a9 -> ee64f9f43
[ARIES-1763] Support both EndpointListener and EndpointEventListener in TopologyManager import
Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/ee64f9f4
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/ee64f9f4
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/ee64f9f4
Branch: refs/heads/master
Commit: ee64f9f43c1839d6f55c86d7b10215b7d2e51784
Parents: 0fea532
Author: Christian Schneider <cs...@adobe.com>
Authored: Tue Jan 30 12:33:45 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Tue Jan 30 12:35:40 2018 +0100
----------------------------------------------------------------------
.../importer/TopologyManagerImport.java | 48 ++++++++++----------
.../importer/local/EndpointListenerManager.java | 33 ++++++++++++--
.../importer/TopologyManagerImportTest.java | 10 ++--
3 files changed, 60 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/ee64f9f4/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
index e6ab859..8e1a1b7 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
@@ -19,24 +19,18 @@
package org.apache.aries.rsa.topologymanager.importer;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.hooks.service.FindHook;
-import org.osgi.framework.hooks.service.ListenerHook;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
-import org.osgi.service.remoteserviceadmin.EndpointListener;
+import org.osgi.service.remoteserviceadmin.EndpointEvent;
+import org.osgi.service.remoteserviceadmin.EndpointEventListener;
import org.osgi.service.remoteserviceadmin.ImportReference;
import org.osgi.service.remoteserviceadmin.ImportRegistration;
import org.osgi.service.remoteserviceadmin.RemoteServiceAdmin;
@@ -50,7 +44,7 @@ import org.slf4j.LoggerFactory;
* the EndpointListenerManager.
* Manages local creation and destruction of service imports using the available RemoteServiceAdmin services.
*/
-public class TopologyManagerImport implements EndpointListener, RemoteServiceAdminListener {
+public class TopologyManagerImport implements EndpointEventListener, RemoteServiceAdminListener {
private static final Logger LOG = LoggerFactory.getLogger(TopologyManagerImport.class);
private ExecutorService execService;
@@ -85,20 +79,6 @@ public class TopologyManagerImport implements EndpointListener, RemoteServiceAdm
execService.shutdown();
}
- @Override
- public void endpointAdded(EndpointDescription endpoint, String filter) {
- LOG.debug("Endpoint added for filter {}, endpoint {}", filter, endpoint);
- importPossibilities.put(filter, endpoint);
- triggerSyncImports(filter);
- }
-
- @Override
- public void endpointRemoved(EndpointDescription endpoint, String filter) {
- LOG.debug("Endpoint removed for filter {}, endpoint {}", filter, endpoint);
- importPossibilities.remove(filter, endpoint);
- triggerSyncImports(filter);
- }
-
public void add(RemoteServiceAdmin rsa) {
rsaSet.add(rsa);
for (String filter : importPossibilities.keySet()) {
@@ -213,5 +193,27 @@ public class TopologyManagerImport implements EndpointListener, RemoteServiceAdm
ir.close();
}
}
+
+ @Override
+ public void endpointChanged(EndpointEvent event, String filter) {
+ EndpointDescription endpoint = event.getEndpoint();
+ LOG.debug("Endpoint event received type {}, filter {}, endpoint {}", event.getType(), filter, endpoint);
+ switch (event.getType()) {
+ case EndpointEvent.ADDED :
+ importPossibilities.put(filter, endpoint);
+ break;
+ case EndpointEvent.REMOVED :
+ importPossibilities.remove(filter, endpoint);
+ break;
+ case EndpointEvent.MODIFIED :
+ importPossibilities.remove(filter, endpoint);
+ importPossibilities.put(filter, endpoint);
+ break;
+ case EndpointEvent.MODIFIED_ENDMATCH :
+ importPossibilities.remove(filter, endpoint);
+ break;
+ }
+ triggerSyncImports(filter);
+ }
}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/ee64f9f4/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
index 93208f4..0731aab 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
@@ -24,9 +24,13 @@ import java.util.Hashtable;
import java.util.List;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceFactory;
import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.hooks.service.FindHook;
import org.osgi.framework.hooks.service.ListenerHook;
+import org.osgi.service.remoteserviceadmin.EndpointDescription;
+import org.osgi.service.remoteserviceadmin.EndpointEvent;
+import org.osgi.service.remoteserviceadmin.EndpointEventListener;
import org.osgi.service.remoteserviceadmin.EndpointListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -41,12 +45,28 @@ import org.slf4j.LoggerFactory;
*/
public class EndpointListenerManager implements ServiceInterestListener{
+ private final class EndpointListenerAdapter implements EndpointListener {
+ @Override
+ public void endpointRemoved(EndpointDescription endpoint, String matchedFilter) {
+ EndpointEvent event = new EndpointEvent(EndpointEvent.REMOVED, endpoint);
+ endpointListener.endpointChanged(event, matchedFilter);
+ }
+
+ @Override
+ public void endpointAdded(EndpointDescription endpoint, String matchedFilter) {
+ EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+ endpointListener.endpointChanged(event, matchedFilter);
+ }
+ }
+
private static final Logger LOG = LoggerFactory.getLogger(EndpointListenerManager.class);
private final BundleContext bctx;
private volatile ServiceRegistration<EndpointListener> serviceRegistration;
+ private volatile ServiceRegistration<EndpointEventListener> serviceRegistration2;
+
private final List<String> filters = new ArrayList<String>();
- private final EndpointListener endpointListener;
+ private final EndpointEventListener endpointListener;
private final ListenerHookImpl listenerHook;
private RSFindHook findHook;
@@ -55,7 +75,7 @@ public class EndpointListenerManager implements ServiceInterestListener{
*/
private final ReferenceCounter<String> importInterestsCounter = new ReferenceCounter<String>();
- public EndpointListenerManager(BundleContext bc, EndpointListener endpointListener) {
+ public EndpointListenerManager(BundleContext bc, EndpointEventListener endpointListener) {
this.bctx = bc;
this.endpointListener = endpointListener;
this.listenerHook = new ListenerHookImpl(bc, this);
@@ -63,8 +83,12 @@ public class EndpointListenerManager implements ServiceInterestListener{
}
public void start() {
- serviceRegistration = bctx.registerService(EndpointListener.class, endpointListener,
+ EndpointListener endpointListenerAdapter = new EndpointListenerAdapter();
+ serviceRegistration = bctx.registerService(EndpointListener.class, endpointListenerAdapter,
getRegistrationProperties());
+ serviceRegistration2 = bctx.registerService(EndpointEventListener.class, endpointListener,
+ getRegistrationProperties());
+
bctx.registerService(ListenerHook.class, listenerHook, null);
bctx.registerService(FindHook.class, findHook, null);
}
@@ -73,6 +97,9 @@ public class EndpointListenerManager implements ServiceInterestListener{
if (serviceRegistration != null) {
serviceRegistration.unregister();
}
+ if (serviceRegistration2 != null) {
+ serviceRegistration2.unregister();
+ }
}
protected void extendScope(String filter) {
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/ee64f9f4/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java b/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
index 8b8bbc2..32ba737 100644
--- a/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
+++ b/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
@@ -18,25 +18,24 @@
*/
package org.apache.aries.rsa.topologymanager.importer;
+import static org.junit.Assert.assertTrue;
+
import java.util.Dictionary;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
-import org.apache.aries.rsa.topologymanager.importer.TopologyManagerImport;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.easymock.IMocksControl;
import org.junit.Test;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
+import org.osgi.service.remoteserviceadmin.EndpointEvent;
import org.osgi.service.remoteserviceadmin.ImportReference;
import org.osgi.service.remoteserviceadmin.ImportRegistration;
import org.osgi.service.remoteserviceadmin.RemoteServiceAdmin;
-import static org.junit.Assert.assertTrue;
-
public class TopologyManagerImportTest {
@Test
@@ -59,7 +58,8 @@ public class TopologyManagerImportTest {
TopologyManagerImport tm = new TopologyManagerImport(bc);
tm.start();
- tm.endpointAdded(endpoint, "myFilter");
+ EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+ tm.endpointChanged(event, "myFilter");
tm.add(rsa);
assertTrue("rsa.ImportService should have been called",
sema.tryAcquire(100, TimeUnit.SECONDS));