This is an automated email from the ASF dual-hosted git repository. amichair pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/aries-rsa.git
commit 084ab478aa52f71f970b18945b6690190feb9f04 Author: Amichai Rothman <[email protected]> AuthorDate: Thu Mar 19 00:40:47 2026 +0200 Simplify zookeeper Interest/InterestManager --- .../aries/rsa/discovery/zookeeper/Interest.java | 59 ++++------------------ .../rsa/discovery/zookeeper/InterestManager.java | 50 ++++++++---------- .../discovery/zookeeper/InterestManagerTest.java | 2 +- 3 files changed, 31 insertions(+), 80 deletions(-) diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java index 4f539f9d..da659d59 100644 --- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java +++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java @@ -21,8 +21,6 @@ package org.apache.aries.rsa.discovery.zookeeper; import static org.osgi.service.remoteserviceadmin.EndpointEventListener.ENDPOINT_LISTENER_SCOPE; import java.util.List; -import java.util.Objects; -import java.util.Optional; import org.apache.aries.rsa.util.StringPlus; import org.osgi.framework.ServiceReference; @@ -32,67 +30,28 @@ import org.osgi.service.remoteserviceadmin.EndpointEventListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@SuppressWarnings("deprecation") public class Interest { private static final Logger LOG = LoggerFactory.getLogger(Interest.class); - private final ServiceReference<?> sref; private final List<String> scopes; - private final EndpointEventListener epListener; + private final EndpointEventListener listener; - public Interest(ServiceReference<?> sref) { - this(sref, null); - } - - public Interest(ServiceReference<?> sref, EndpointEventListener epListener) { - this.sref = sref; + public Interest(ServiceReference<?> sref, EndpointEventListener listener) { this.scopes = StringPlus.normalize(sref.getProperty(ENDPOINT_LISTENER_SCOPE)); - this.epListener = epListener; - } - - public List<String> getScopes() { - return scopes; + this.listener = listener; } public void notifyListener(EndpointEvent event) { EndpointDescription endpoint = event.getEndpoint(); - Optional<String> currentScope = getFirstMatch(endpoint); - if (currentScope.isPresent()) { - LOG.debug("Matched {} against {}", endpoint, currentScope); - String scope = currentScope.get(); - LOG.info("Calling endpointchanged on class {} for filter {}, type {}, endpoint {} ", - epListener, scope, event.getType(), endpoint); - epListener.endpointChanged(event, scope); - } - } - - private Optional<String> getFirstMatch(EndpointDescription endpoint) { - return scopes.stream().filter(endpoint::matches).findFirst(); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((sref == null) ? 0 : sref.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Interest other = (Interest) obj; - return Objects.equals(sref, other.sref); + scopes.stream().filter(endpoint::matches).findFirst().ifPresent(scope -> { // notify with first scope + LOG.info("Calling endpointChanged on {} for filter {}, type {}, endpoint {}", + listener, scope, event.getType(), endpoint); + listener.endpointChanged(event, scope); + }); } @Override public String toString() { - return "Interest [scopes=" + scopes + ", epListener=" + epListener.getClass() + "]"; + return "Interest [scopes=" + scopes + ", listener=" + listener.getClass() + "]"; } - } diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java index d223782f..f8812612 100644 --- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java +++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java @@ -18,7 +18,7 @@ */ package org.apache.aries.rsa.discovery.zookeeper; -import java.util.Set; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.aries.rsa.discovery.zookeeper.client.ClientManager; @@ -40,14 +40,13 @@ import org.slf4j.LoggerFactory; * Establishes a listener with the {@link ZookeeperEndpointRepository} to be called back on all changes in the repository. * Events from repository are then forwarded to all interested {@link EndpointEventListener}s. */ -@SuppressWarnings("deprecation") @Component(immediate = true) public class InterestManager { private static final Logger LOG = LoggerFactory.getLogger(InterestManager.class); - private Set<Interest> interests = ConcurrentHashMap.newKeySet(); + private final Map<ServiceReference<EndpointEventListener>, Interest> interests = new ConcurrentHashMap<>(); - private ZookeeperEndpointListener listener; + private ZookeeperEndpointListener zkListener; public InterestManager() { } @@ -55,59 +54,52 @@ public class InterestManager { // Using ARepository name to make sure it is injected first @Reference public void bindARepository(ZookeeperEndpointRepository repository) { - this.listener = repository.createListener(this::onEndpointEvent); + zkListener = repository.createListener(this::onEndpointEvent); } @Deactivate public void deactivate() { - this.listener.close(); + zkListener.close(); interests.clear(); } private void onEndpointEvent(EndpointEvent event) { - interests.forEach(interest -> interest.notifyListener(event)); + interests.values().forEach(interest -> interest.notifyListener(event)); } @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC) - public void bindEndpointEventListener(ServiceReference<EndpointEventListener> sref, EndpointEventListener epListener) { - addInterest(sref, epListener); + public void bindEndpointEventListener(ServiceReference<EndpointEventListener> sref, EndpointEventListener listener) { + addInterest(sref, listener); } - public void updatedEndpointEventListener(ServiceReference<EndpointEventListener> sref, EndpointEventListener epListener) { - addInterest(sref, epListener); + public void updatedEndpointEventListener(ServiceReference<EndpointEventListener> sref, EndpointEventListener listener) { + addInterest(sref, listener); } public void unbindEndpointEventListener(ServiceReference<EndpointEventListener> sref) { - interests.remove(new Interest(sref)); + interests.remove(sref); } - private void addInterest(ServiceReference<?> sref, EndpointEventListener epListener) { + private void addInterest(ServiceReference<EndpointEventListener> sref, EndpointEventListener listener) { if (isOurOwnEndpointEventListener(sref)) { LOG.debug("Skipping our own EndpointEventListener"); return; } - Interest interest = new Interest(sref, epListener); - update(interest); - if (listener != null) { - listener.getEndpoints().stream() + Interest interest = new Interest(sref, listener); + boolean exists = interests.put(sref, interest) != null; + LOG.debug("{} Interest: {}", exists ? "Updating" : "Adding", interest); + if (zkListener != null) { + zkListener.getEndpoints().stream() .map(endpoint -> new EndpointEvent(EndpointEvent.ADDED, endpoint)) .forEach(interest::notifyListener); } } - private void update(Interest interest) { - boolean present = interests.remove(interest); - LOG.debug("{} Interest: {}", present ? "Adding" : "Updating", interest); - interests.add(interest); + private static boolean isOurOwnEndpointEventListener(ServiceReference<EndpointEventListener> sref) { + return Boolean.parseBoolean(String.valueOf(sref.getProperty(ClientManager.DISCOVERY_ZOOKEEPER_ID))); } - private static boolean isOurOwnEndpointEventListener(ServiceReference<?> endpointEventListener) { - return Boolean.parseBoolean(String.valueOf( - endpointEventListener.getProperty(ClientManager.DISCOVERY_ZOOKEEPER_ID))); + int size() { + return interests.size(); } - - Set<Interest> getInterests() { - return interests; - } - } diff --git a/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java b/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java index 63fddbd4..793bb35d 100644 --- a/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java +++ b/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java @@ -81,7 +81,7 @@ public class InterestManagerTest { } private void assertNumInterests(int expectedNum) { - assertEquals(expectedNum, im.getInterests().size()); + assertEquals(expectedNum, im.size()); } @SuppressWarnings("unchecked")
