diff options
author | Markus Alexander Kuppe | 2010-10-20 07:31:12 +0000 |
---|---|---|
committer | Markus Alexander Kuppe | 2010-10-20 07:32:05 +0000 |
commit | 66956eecf9c51ef393d0a68a1e12948141fc1c61 (patch) | |
tree | bd597dd3bf09b7eca78e78bf38dfb1c637e93381 /framework/bundles/org.eclipse.ecf.discovery | |
parent | 4f65e6bd5343ffdee0d86930f176c2a942d43eea (diff) | |
download | org.eclipse.ecf-66956eecf9c51ef393d0a68a1e12948141fc1c61.tar.gz org.eclipse.ecf-66956eecf9c51ef393d0a68a1e12948141fc1c61.tar.xz org.eclipse.ecf-66956eecf9c51ef393d0a68a1e12948141fc1c61.zip |
RESOLVED - bug 328142: [Discovery][Composite] Registering an IService(Type)Listener with OSGi service registry results in listeners notified twice
https://bugs.eclipse.org/bugs/show_bug.cgi?id=328142
Diffstat (limited to 'framework/bundles/org.eclipse.ecf.discovery')
2 files changed, 19 insertions, 12 deletions
diff --git a/framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/AbstractDiscoveryContainerAdapter.java b/framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/AbstractDiscoveryContainerAdapter.java index 3520055ac..6873c5af2 100644 --- a/framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/AbstractDiscoveryContainerAdapter.java +++ b/framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/AbstractDiscoveryContainerAdapter.java @@ -10,12 +10,6 @@ ******************************************************************************/ package org.eclipse.ecf.discovery; -import org.eclipse.ecf.internal.discovery.ServiceTypeComparator; - -import java.util.Iterator; - -import org.eclipse.ecf.internal.discovery.DiscoveryServiceListener; - import java.util.*; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IProgressMonitor; @@ -24,8 +18,7 @@ import org.eclipse.ecf.core.identity.*; import org.eclipse.ecf.core.util.Trace; import org.eclipse.ecf.discovery.identity.IServiceID; import org.eclipse.ecf.discovery.identity.IServiceTypeID; -import org.eclipse.ecf.internal.discovery.DiscoveryDebugOption; -import org.eclipse.ecf.internal.discovery.DiscoveryPlugin; +import org.eclipse.ecf.internal.discovery.*; import org.eclipse.equinox.concurrent.future.*; public abstract class AbstractDiscoveryContainerAdapter extends @@ -242,6 +235,12 @@ public abstract class AbstractDiscoveryContainerAdapter extends return null; } + /** + * @return The name of this discovery container + * @since 4.0 + */ + public abstract String getContainerName(); + // merges the allServiceListener with the serviceListeners for the given // type @@ -260,12 +259,14 @@ public abstract class AbstractDiscoveryContainerAdapter extends Assert.isNotNull(aServiceType); Collection listeners = new HashSet(); synchronized (serviceListeners) { - for (Iterator itr = serviceListeners.keySet().iterator(); itr.hasNext();) { + for (Iterator itr = serviceListeners.keySet().iterator(); itr + .hasNext();) { final IServiceTypeID typeID = (IServiceTypeID) itr.next(); - int compare = discoveryServiceListenerComparator.compare(aServiceType, typeID); - if(compare == 0) { + int compare = discoveryServiceListenerComparator.compare( + aServiceType, typeID); + if (compare == 0) { Collection collection = (Collection) serviceListeners - .get(typeID); + .get(typeID); if (collection != null) { listeners.addAll(collection); } diff --git a/framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/internal/discovery/DiscoveryServiceListener.java b/framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/internal/discovery/DiscoveryServiceListener.java index 530117984..de9793659 100644 --- a/framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/internal/discovery/DiscoveryServiceListener.java +++ b/framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/internal/discovery/DiscoveryServiceListener.java @@ -150,6 +150,12 @@ public class DiscoveryServiceListener implements ServiceListener { * ServiceEvent) */ public void serviceChanged(ServiceEvent event) { + // ignore events that are targeted at different discovery containers + final Object containerName = event.getServiceReference().getProperty( + IDiscoveryLocator.CONTAINER_NAME); + if (!discoveryContainer.getContainerName().equals(containerName)) { + return; + } switch (event.getType()) { case ServiceEvent.REGISTERED: addServiceListener(event.getServiceReference()); |