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/02/12 17:02:52 UTC
[2/2] aries-rsa git commit: [ARIES-1778] Improved naming and
documentation
[ARIES-1778] Improved naming and documentation
Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/d5bfc376
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/d5bfc376
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/d5bfc376
Branch: refs/heads/master
Commit: d5bfc3769bb3ed501f41927766a0b9d02ebd3a70
Parents: de9f1a4
Author: Christian Schneider <cs...@adobe.com>
Authored: Mon Feb 12 18:02:44 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Mon Feb 12 18:02:44 2018 +0100
----------------------------------------------------------------------
.../discovery/zookeeper/ZooKeeperDiscovery.java | 6 +-
.../subscribe/EndpointListenerTracker.java | 7 +-
.../zookeeper/subscribe/InterestManager.java | 164 ++++++++++++++++++
.../subscribe/InterfaceMonitorManager.java | 165 -------------------
.../subscribe/InterfaceMonitorManagerTest.java | 2 +-
5 files changed, 171 insertions(+), 173 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d5bfc376/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/ZooKeeperDiscovery.java
----------------------------------------------------------------------
diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/ZooKeeperDiscovery.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/ZooKeeperDiscovery.java
index 50d9598..5e55d8c 100644
--- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/ZooKeeperDiscovery.java
+++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/ZooKeeperDiscovery.java
@@ -28,7 +28,7 @@ import java.util.Map;
import org.apache.aries.rsa.discovery.zookeeper.publish.PublishingEndpointListener;
import org.apache.aries.rsa.discovery.zookeeper.repository.ZookeeperEndpointRepository;
import org.apache.aries.rsa.discovery.zookeeper.subscribe.EndpointListenerTracker;
-import org.apache.aries.rsa.discovery.zookeeper.subscribe.InterfaceMonitorManager;
+import org.apache.aries.rsa.discovery.zookeeper.subscribe.InterestManager;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
@@ -49,7 +49,7 @@ public class ZooKeeperDiscovery implements Watcher, ManagedService {
private PublishingEndpointListener endpointListener;
private ServiceTracker<?, ?> endpointListenerTracker;
- private InterfaceMonitorManager imManager;
+ private InterestManager imManager;
private ZooKeeper zkClient;
private boolean closed;
private boolean started;
@@ -98,7 +98,7 @@ public class ZooKeeperDiscovery implements Watcher, ManagedService {
repository = new ZookeeperEndpointRepository(zkClient);
endpointListener = new PublishingEndpointListener(repository);
endpointListener.start(bctx);
- imManager = new InterfaceMonitorManager(repository);
+ imManager = new InterestManager(repository);
repository.addListener(imManager);
endpointListenerTracker = new EndpointListenerTracker(bctx, imManager);
endpointListenerTracker.open();
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d5bfc376/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/EndpointListenerTracker.java
----------------------------------------------------------------------
diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/EndpointListenerTracker.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/EndpointListenerTracker.java
index d4805d0..4bb37cf 100644
--- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/EndpointListenerTracker.java
+++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/EndpointListenerTracker.java
@@ -28,14 +28,13 @@ import org.osgi.service.remoteserviceadmin.EndpointListener;
import org.osgi.util.tracker.ServiceTracker;
/**
- * Tracks interest in EndpointListeners. Delegates to InterfaceMonitorManager to manage
- * interest in the scopes of each EndpointListener.
+ * Tracks EndpointListeners and EndpointEventListeners. Delegates to InterestManager to handle them
*/
@SuppressWarnings({ "rawtypes", "deprecation", "unchecked" })
public class EndpointListenerTracker extends ServiceTracker {
- private final InterfaceMonitorManager imManager;
+ private final InterestManager imManager;
- public EndpointListenerTracker(BundleContext bctx, InterfaceMonitorManager imManager) {
+ public EndpointListenerTracker(BundleContext bctx, InterestManager imManager) {
super(bctx, getfilter(), null);
this.imManager = imManager;
}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d5bfc376/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterestManager.java
----------------------------------------------------------------------
diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterestManager.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterestManager.java
new file mode 100644
index 0000000..cf5d5fb
--- /dev/null
+++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterestManager.java
@@ -0,0 +1,164 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.rsa.discovery.zookeeper.subscribe;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.aries.rsa.discovery.zookeeper.ZooKeeperDiscovery;
+import org.apache.aries.rsa.discovery.zookeeper.repository.ZookeeperEndpointRepository;
+import org.apache.aries.rsa.util.StringPlus;
+import org.osgi.framework.ServiceReference;
+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;
+
+/**
+ * Manages the EndpointEventListeners and the scopes they are interested in.
+ * Establishes a listener with the repository to be called back on all changes in the repo.
+ * Events from repository are then forwarded to all interested EndpointEventListeners.
+ */
+@SuppressWarnings({"deprecation", "rawtypes"})
+public class InterestManager implements EndpointEventListener {
+ private static final Logger LOG = LoggerFactory.getLogger(InterestManager.class);
+
+ private final ZookeeperEndpointRepository repository;
+ private final Map<ServiceReference, Interest> interests = new HashMap<ServiceReference, Interest>();
+
+ protected static class Interest {
+ List<String> scopes;
+ Object epListener;
+ }
+
+ public InterestManager(ZookeeperEndpointRepository repository) {
+ this.repository = repository;
+ }
+
+ public void addInterest(ServiceReference<?> sref, Object epListener) {
+ if (isOurOwnEndpointEventListener(sref)) {
+ LOG.debug("Skipping our own EndpointEventListener");
+ return;
+ }
+ List<String> scopes = getScopes(sref);
+ LOG.debug("adding Interests: {}", scopes);
+
+ // get or create interest for given scope and add listener to it
+ Interest interest = interests.get(epListener);
+ if (interest == null) {
+ // create interest, add listener and start monitor
+ interest = new Interest();
+ interest.epListener = epListener;
+ interest.scopes = scopes;
+ interests.put(sref, interest);
+ sendExistingEndpoints(scopes, epListener);
+ }
+ }
+
+ private void sendExistingEndpoints(List<String> scopes, Object epListener) {
+ for (EndpointDescription endpoint : repository.getAll()) {
+ EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+ notifyListener(event, scopes, epListener);
+ }
+ }
+
+ private static boolean isOurOwnEndpointEventListener(ServiceReference<?> EndpointEventListener) {
+ return Boolean.parseBoolean(String.valueOf(
+ EndpointEventListener.getProperty(ZooKeeperDiscovery.DISCOVERY_ZOOKEEPER_ID)));
+ }
+
+ public synchronized void removeInterest(ServiceReference<EndpointEventListener> epListenerRef) {
+ LOG.info("removing EndpointEventListener interests: {}", epListenerRef);
+ interests.remove(epListenerRef);
+ }
+
+ @Override
+ public void endpointChanged(EndpointEvent event, String filter) {
+ for (Interest interest : interests.values()) {
+ notifyListener(event, interest.scopes, interest.epListener);
+ }
+ }
+
+ private void notifyListener(EndpointEvent event, List<String> scopes, Object service) {
+ EndpointDescription endpoint = event.getEndpoint();
+ String currentScope = getFirstMatch(scopes, endpoint);
+ if (currentScope == null) {
+ return;
+ }
+ LOG.debug("Matched {} against {}", endpoint, currentScope);
+ if (service instanceof EndpointEventListener) {
+ notifyEEListener(event, currentScope, (EndpointEventListener)service);
+ } else if (service instanceof EndpointListener) {
+ notifyEListener(event, currentScope, (EndpointListener)service);
+ }
+ }
+
+ private String getFirstMatch(List<String> scopes, EndpointDescription endpoint) {
+ for (String scope : scopes) {
+ if (endpoint.matches(scope)) {
+ return scope;
+ }
+ }
+ return null;
+ }
+
+ private void notifyEEListener(EndpointEvent event, String currentScope, EndpointEventListener listener) {
+ EndpointDescription endpoint = event.getEndpoint();
+ LOG.info("Calling endpointchanged on class {} for filter {}, type {}, endpoint {} ", listener, currentScope, endpoint);
+ listener.endpointChanged(event, currentScope);
+ }
+
+ private void notifyEListener(EndpointEvent event, String currentScope, EndpointListener listener) {
+ EndpointDescription endpoint = event.getEndpoint();
+ LOG.info("Calling old listener on class {} for filter {}, type {}, endpoint {} ", listener, currentScope, endpoint);
+ switch (event.getType()) {
+ case EndpointEvent.ADDED:
+ listener.endpointAdded(endpoint, currentScope);
+ break;
+
+ case EndpointEvent.MODIFIED:
+ listener.endpointAdded(endpoint, currentScope);
+ listener.endpointRemoved(endpoint, currentScope);
+ break;
+
+ case EndpointEvent.REMOVED:
+ listener.endpointRemoved(endpoint, currentScope);
+ break;
+ }
+ }
+
+ public synchronized void close() {
+ interests.clear();
+ }
+
+ /**
+ * Only for test case!
+ */
+ protected synchronized Map<ServiceReference, Interest> getInterests() {
+ return interests;
+ }
+
+ protected List<String> getScopes(ServiceReference<?> sref) {
+ return StringPlus.normalize(sref.getProperty(EndpointEventListener.ENDPOINT_LISTENER_SCOPE));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d5bfc376/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManager.java
----------------------------------------------------------------------
diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManager.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManager.java
deleted file mode 100644
index 7b5c7d2..0000000
--- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManager.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.aries.rsa.discovery.zookeeper.subscribe;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.aries.rsa.discovery.zookeeper.ZooKeeperDiscovery;
-import org.apache.aries.rsa.discovery.zookeeper.repository.ZookeeperEndpointRepository;
-import org.apache.aries.rsa.util.StringPlus;
-import org.osgi.framework.ServiceReference;
-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;
-
-/**
- * Manages the EndpointEventListeners and the scopes they are interested in.
- * For each scope with interested EndpointEventListeners an InterfaceMonitor is created.
- * The InterfaceMonitor calls back when it detects added or removed external Endpoints.
- * These events are then forwarded to all interested EndpointEventListeners.
- */
-@SuppressWarnings({"deprecation", "rawtypes"})
-public class InterfaceMonitorManager implements EndpointEventListener {
- private static final Logger LOG = LoggerFactory.getLogger(InterfaceMonitorManager.class);
-
- private final ZookeeperEndpointRepository repository;
- private final Map<ServiceReference, Interest> interests = new HashMap<ServiceReference, Interest>();
-
- protected static class Interest {
- List<String> scopes;
- Object epListener;
- }
-
- public InterfaceMonitorManager(ZookeeperEndpointRepository repository) {
- this.repository = repository;
- }
-
- public void addInterest(ServiceReference<?> sref, Object epListener) {
- if (isOurOwnEndpointEventListener(sref)) {
- LOG.debug("Skipping our own EndpointEventListener");
- return;
- }
- List<String> scopes = getScopes(sref);
- LOG.debug("adding Interests: {}", scopes);
-
- // get or create interest for given scope and add listener to it
- Interest interest = interests.get(epListener);
- if (interest == null) {
- // create interest, add listener and start monitor
- interest = new Interest();
- interest.epListener = epListener;
- interest.scopes = scopes;
- interests.put(sref, interest);
- sendExistingEndpoints(scopes, epListener);
- }
- }
-
- private void sendExistingEndpoints(List<String> scopes, Object epListener) {
- for (EndpointDescription endpoint : repository.getAll()) {
- EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
- notifyListener(event, scopes, epListener);
- }
- }
-
- private static boolean isOurOwnEndpointEventListener(ServiceReference<?> EndpointEventListener) {
- return Boolean.parseBoolean(String.valueOf(
- EndpointEventListener.getProperty(ZooKeeperDiscovery.DISCOVERY_ZOOKEEPER_ID)));
- }
-
- public synchronized void removeInterest(ServiceReference<EndpointEventListener> epListenerRef) {
- LOG.info("removing EndpointEventListener interests: {}", epListenerRef);
- interests.remove(epListenerRef);
- }
-
- @Override
- public void endpointChanged(EndpointEvent event, String filter) {
- for (Interest interest : interests.values()) {
- notifyListener(event, interest.scopes, interest.epListener);
- }
- }
-
- private void notifyListener(EndpointEvent event, List<String> scopes, Object service) {
- EndpointDescription endpoint = event.getEndpoint();
- String currentScope = getFirstMatch(scopes, endpoint);
- if (currentScope == null) {
- return;
- }
- LOG.debug("Matched {} against {}", endpoint, currentScope);
- if (service instanceof EndpointEventListener) {
- notifyEEListener(event, currentScope, (EndpointEventListener)service);
- } else if (service instanceof EndpointListener) {
- notifyEListener(event, currentScope, (EndpointListener)service);
- }
- }
-
- private String getFirstMatch(List<String> scopes, EndpointDescription endpoint) {
- for (String scope : scopes) {
- if (endpoint.matches(scope)) {
- return scope;
- }
- }
- return null;
- }
-
- private void notifyEEListener(EndpointEvent event, String currentScope, EndpointEventListener listener) {
- EndpointDescription endpoint = event.getEndpoint();
- LOG.info("Calling endpointchanged on class {} for filter {}, type {}, endpoint {} ", listener, currentScope, endpoint);
- listener.endpointChanged(event, currentScope);
- }
-
- private void notifyEListener(EndpointEvent event, String currentScope, EndpointListener listener) {
- EndpointDescription endpoint = event.getEndpoint();
- LOG.info("Calling old listener on class {} for filter {}, type {}, endpoint {} ", listener, currentScope, endpoint);
- switch (event.getType()) {
- case EndpointEvent.ADDED:
- listener.endpointAdded(endpoint, currentScope);
- break;
-
- case EndpointEvent.MODIFIED:
- listener.endpointAdded(endpoint, currentScope);
- listener.endpointRemoved(endpoint, currentScope);
- break;
-
- case EndpointEvent.REMOVED:
- listener.endpointRemoved(endpoint, currentScope);
- break;
- }
- }
-
- public synchronized void close() {
- interests.clear();
- }
-
- /**
- * Only for test case!
- */
- protected synchronized Map<ServiceReference, Interest> getInterests() {
- return interests;
- }
-
- protected List<String> getScopes(ServiceReference<?> sref) {
- return StringPlus.normalize(sref.getProperty(EndpointEventListener.ENDPOINT_LISTENER_SCOPE));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d5bfc376/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java
----------------------------------------------------------------------
diff --git a/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java b/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java
index 41b0795..79b2d8d 100644
--- a/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java
+++ b/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java
@@ -48,7 +48,7 @@ public class InterfaceMonitorManagerTest {
c.replay();
- InterfaceMonitorManager eltc = new InterfaceMonitorManager(repository);
+ InterestManager eltc = new InterestManager(repository);
// sref has no scope -> nothing should happen
assertEquals(0, eltc.getInterests().size());