[KARAF-3257] Do not hide events for services registered before the service guard
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/fbf557b1 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/fbf557b1 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/fbf557b1 Branch: refs/heads/karaf-2.x Commit: fbf557b1ff7e31b614d35f513313f5c5f39d6d92 Parents: 73e57b8 Author: Guillaume Nodet <[email protected]> Authored: Tue Oct 28 13:40:57 2014 +0100 Committer: Guillaume Nodet <[email protected]> Committed: Thu Feb 26 11:38:57 2015 +0100 ---------------------------------------------------------------------- .../karaf/service/guard/impl/GuardingEventHook.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/fbf557b1/service/guard/src/main/java/org/apache/karaf/service/guard/impl/GuardingEventHook.java ---------------------------------------------------------------------- diff --git a/service/guard/src/main/java/org/apache/karaf/service/guard/impl/GuardingEventHook.java b/service/guard/src/main/java/org/apache/karaf/service/guard/impl/GuardingEventHook.java index a37e863..356d654 100644 --- a/service/guard/src/main/java/org/apache/karaf/service/guard/impl/GuardingEventHook.java +++ b/service/guard/src/main/java/org/apache/karaf/service/guard/impl/GuardingEventHook.java @@ -23,12 +23,15 @@ import org.osgi.framework.hooks.service.ListenerHook; import java.util.Collection; import java.util.Iterator; import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentSkipListSet; public class GuardingEventHook implements EventListenerHook { private final BundleContext bundleContext; private final GuardProxyCatalog guardProxyCatalog; private final Filter servicesFilter; + private final Set<ServiceReference<?>> references = new ConcurrentSkipListSet<ServiceReference<?>>(); GuardingEventHook(BundleContext bundleContext, GuardProxyCatalog guardProxyCatalog, Filter securedServicesFilter) throws InvalidSyntaxException { this.bundleContext = bundleContext; @@ -47,6 +50,18 @@ public class GuardingEventHook implements EventListenerHook { return; } + if (event.getType() == ServiceEvent.REGISTERED) { + references.add(sr); + } else if (event.getType() == ServiceEvent.UNREGISTERING) { + if (!references.remove(sr)) { + return; + } + } else { + if (!references.contains(sr)) { + return; + } + } + for (Iterator<BundleContext> i = listeners.keySet().iterator(); i.hasNext(); ) { BundleContext bc = i.next(); if (bundleContext.equals(bc) || bc.getBundle().getBundleId() == 0L) {
