Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Alexander Kuppe2010-10-20 07:31:12 +0000
committerMarkus Alexander Kuppe2010-10-20 07:32:05 +0000
commit66956eecf9c51ef393d0a68a1e12948141fc1c61 (patch)
treebd597dd3bf09b7eca78e78bf38dfb1c637e93381 /framework/bundles/org.eclipse.ecf.discovery
parent4f65e6bd5343ffdee0d86930f176c2a942d43eea (diff)
downloadorg.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')
-rw-r--r--framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/discovery/AbstractDiscoveryContainerAdapter.java25
-rw-r--r--framework/bundles/org.eclipse.ecf.discovery/src/org/eclipse/ecf/internal/discovery/DiscoveryServiceListener.java6
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());

Back to the top