Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Alexander Kuppe2010-10-13 14:51:03 +0000
committerMarkus Alexander Kuppe2010-10-13 14:51:03 +0000
commit5a25a974b1c3b2a8ba04dc31216322e8af207dbd (patch)
treec6d4c017b27279c57cf848e93a3bf81de67e2216
parent5b98b29381080a8ccd935edf40c99445dcff27a0 (diff)
parent74178e02d3d284863eadaf230773e520747a5166 (diff)
downloadorg.eclipse.ecf-5a25a974b1c3b2a8ba04dc31216322e8af207dbd.tar.gz
org.eclipse.ecf-5a25a974b1c3b2a8ba04dc31216322e8af207dbd.tar.xz
org.eclipse.ecf-5a25a974b1c3b2a8ba04dc31216322e8af207dbd.zip
Merge branch 'master' of ssh://git.eclipse.org/gitroot/ecf/org.eclipse.ecf
-rw-r--r--compendium/bundles/org.eclipse.ecf.osgi.services.distribution/src/org/eclipse/ecf/internal/osgi/services/distribution/DiscoveredServiceTrackerImpl.java131
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java72
-rw-r--r--releng/org.eclipse.ecf.releng.bm/ecf.rmap9
3 files changed, 75 insertions, 137 deletions
diff --git a/compendium/bundles/org.eclipse.ecf.osgi.services.distribution/src/org/eclipse/ecf/internal/osgi/services/distribution/DiscoveredServiceTrackerImpl.java b/compendium/bundles/org.eclipse.ecf.osgi.services.distribution/src/org/eclipse/ecf/internal/osgi/services/distribution/DiscoveredServiceTrackerImpl.java
index 644bbf26d..771038df9 100644
--- a/compendium/bundles/org.eclipse.ecf.osgi.services.distribution/src/org/eclipse/ecf/internal/osgi/services/distribution/DiscoveredServiceTrackerImpl.java
+++ b/compendium/bundles/org.eclipse.ecf.osgi.services.distribution/src/org/eclipse/ecf/internal/osgi/services/distribution/DiscoveredServiceTrackerImpl.java
@@ -12,7 +12,6 @@ package org.eclipse.ecf.internal.osgi.services.distribution;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.HashMap;
@@ -55,8 +54,7 @@ public class DiscoveredServiceTrackerImpl implements DiscoveredServiceTracker {
private DistributionProviderImpl distributionProvider;
private List serviceLocations = new ArrayList();
// <Map<containerID><RemoteServiceRegistration>
- private Map discoveredRemoteServiceRegistrations = Collections
- .synchronizedMap(new HashMap());
+ private Map discoveredRemoteServiceRegistrations = new HashMap();
private List ecfRemoteServiceProperties = Arrays.asList(new String[] {
Constants.SERVICE_ID, Constants.OBJECTCLASS,
org.eclipse.ecf.remoteservice.Constants.SERVICE_ID,
@@ -119,14 +117,8 @@ public class DiscoveredServiceTrackerImpl implements DiscoveredServiceTracker {
eventManager = null;
queue = null;
}
- if (serviceLocations != null) {
- serviceLocations.clear();
- serviceLocations = null;
- }
- if (discoveredRemoteServiceRegistrations != null) {
- discoveredRemoteServiceRegistrations.clear();
- discoveredRemoteServiceRegistrations = null;
- }
+ serviceLocations.clear();
+ discoveredRemoteServiceRegistrations.clear();
}
/*
@@ -429,37 +421,42 @@ public class DiscoveredServiceTrackerImpl implements DiscoveredServiceTracker {
private boolean findProxyServiceRegistration(
RemoteServiceEndpointDescription sed) {
- for (Iterator i = discoveredRemoteServiceRegistrations.keySet()
- .iterator(); i.hasNext();) {
- ID containerID = (ID) i.next();
- RemoteServiceRegistration reg = (RemoteServiceRegistration) discoveredRemoteServiceRegistrations
- .get(containerID);
- if (reg.hasRSED(sed))
- return true;
+ synchronized (discoveredRemoteServiceRegistrations) {
+ for (Iterator i = discoveredRemoteServiceRegistrations.keySet()
+ .iterator(); i.hasNext();) {
+ ID containerID = (ID) i.next();
+ RemoteServiceRegistration reg = (RemoteServiceRegistration) discoveredRemoteServiceRegistrations
+ .get(containerID);
+ if (reg.hasRSED(sed))
+ return true;
+ }
+ return false;
}
- return false;
}
private ServiceRegistration[] removeProxyServiceRegistrations(
RemoteServiceEndpointDescription sed) {
List results = new ArrayList();
- for (Iterator i = discoveredRemoteServiceRegistrations.keySet()
- .iterator(); i.hasNext();) {
- ID containerID = (ID) i.next();
- RemoteServiceRegistration reg = (RemoteServiceRegistration) discoveredRemoteServiceRegistrations
- .get(containerID);
- if (reg != null) {
- ServiceRegistration sr = reg.removeServiceRegistration(sed);
- if (sr != null)
- results.add(sr);
- if (reg.isEmpty()) {
- reg.dispose();
- discoveredRemoteServiceRegistrations.remove(containerID);
+ synchronized (discoveredRemoteServiceRegistrations) {
+ for (Iterator i = discoveredRemoteServiceRegistrations.keySet()
+ .iterator(); i.hasNext();) {
+ ID containerID = (ID) i.next();
+ RemoteServiceRegistration reg = (RemoteServiceRegistration) discoveredRemoteServiceRegistrations
+ .get(containerID);
+ if (reg != null) {
+ ServiceRegistration sr = reg.removeServiceRegistration(sed);
+ if (sr != null)
+ results.add(sr);
+ if (reg.isEmpty()) {
+ reg.dispose();
+ discoveredRemoteServiceRegistrations
+ .remove(containerID);
+ }
}
}
+ return (ServiceRegistration[]) results
+ .toArray(new ServiceRegistration[] {});
}
- return (ServiceRegistration[]) results
- .toArray(new ServiceRegistration[] {});
}
class RemoteServiceReferenceUnregisteredListener implements
@@ -478,22 +475,26 @@ public class DiscoveredServiceTrackerImpl implements DiscoveredServiceTracker {
// this is going on...as it can be invoked by an arbitrary
RemoteServiceRegistration.RSEDAndSRAssoc[] assocs = null;
synchronized (serviceLocations) {
- RemoteServiceRegistration rsRegs = (RemoteServiceRegistration) discoveredRemoteServiceRegistrations
- .get(localContainerID);
- // If we've got any remote service registrations for the
- // containerID
- if (rsRegs != null) {
- assocs = rsRegs.removeServiceRegistration(reference);
- // If this removes *all* references for this
- // registration
- if (rsRegs.isEmpty()) {
- rsRegs.dispose();
- discoveredRemoteServiceRegistrations
- .remove(localContainerID);
- }
- if (assocs != null) {
- for (int i = 0; i < assocs.length; i++) {
- removeDiscoveredServiceID(assocs[i].getRSED());
+ synchronized (discoveredRemoteServiceRegistrations) {
+ RemoteServiceRegistration rsRegs = (RemoteServiceRegistration) discoveredRemoteServiceRegistrations
+ .get(localContainerID);
+ // If we've got any remote service registrations for the
+ // containerID
+ if (rsRegs != null) {
+ assocs = rsRegs
+ .removeServiceRegistration(reference);
+ // If this removes *all* references for this
+ // registration
+ if (rsRegs.isEmpty()) {
+ rsRegs.dispose();
+ discoveredRemoteServiceRegistrations
+ .remove(localContainerID);
+ }
+ if (assocs != null) {
+ for (int i = 0; i < assocs.length; i++) {
+ removeDiscoveredServiceID(assocs[i]
+ .getRSED());
+ }
}
}
}
@@ -605,21 +606,7 @@ public class DiscoveredServiceTrackerImpl implements DiscoveredServiceTracker {
.getContext()
.registerService(clazzes, proxy, properties);
- // Get localcontainerID
- ID localContainerID = remoteServiceContainer.getContainer()
- .getID();
- // Get a remote service registration for this remote service
- // container
- RemoteServiceRegistration reg = (RemoteServiceRegistration) discoveredRemoteServiceRegistrations
- .get(localContainerID);
- // If there is none, then create one
- if (reg == null) {
- reg = new RemoteServiceRegistration(
- remoteServiceContainer,
- new RemoteServiceReferenceUnregisteredListener());
- discoveredRemoteServiceRegistrations.put(
- localContainerID, reg);
- }
+ RemoteServiceRegistration reg = getProxyServiceRegistration(remoteServiceContainer);
reg.addServiceRegistration(remoteReferences[i], sed,
registration);
// And add to distribution provider
@@ -644,6 +631,22 @@ public class DiscoveredServiceTrackerImpl implements DiscoveredServiceTracker {
}
}
+ private RemoteServiceRegistration getProxyServiceRegistration(
+ IRemoteServiceContainer rsContainer) {
+ ID localContainerID = rsContainer.getContainer().getID();
+ synchronized (discoveredRemoteServiceRegistrations) {
+ RemoteServiceRegistration reg = (RemoteServiceRegistration) discoveredRemoteServiceRegistrations
+ .get(localContainerID);
+ // If there is none, then create one
+ if (reg == null) {
+ reg = new RemoteServiceRegistration(rsContainer,
+ new RemoteServiceReferenceUnregisteredListener());
+ discoveredRemoteServiceRegistrations.put(localContainerID, reg);
+ }
+ return reg;
+ }
+ }
+
private boolean isRemoteServiceProperty(String propertyKey) {
return ecfRemoteServiceProperties.contains(propertyKey);
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java b/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java
index 7bfcc159b..bc0548699 100644
--- a/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java
@@ -202,14 +202,8 @@ final class R_OSGiRemoteServiceContainer implements IOSGiRemoteServiceContainerA
}
public IRemoteServiceReference[] getRemoteServiceReferences(ID target, ID[] idFilter, String clazz, String filter) throws InvalidSyntaxException, ContainerConnectException {
- if (target == null)
- return getRemoteServiceReferences(idFilter, clazz, filter);
- if (idFilter == null)
- return getRemoteServiceReferences(target, clazz, filter);
- List idsList = Arrays.asList(idFilter);
- // add target
- idsList.add(target);
- return getRemoteServiceReferences((ID[]) idsList.toArray(new ID[] {}), clazz, filter);
+ // r-osgi does not support the idFilter, since it does not support pub/sub
+ return getRemoteServiceReferences(target, clazz, filter);
}
/**
@@ -229,21 +223,12 @@ final class R_OSGiRemoteServiceContainer implements IOSGiRemoteServiceContainerA
* java.lang.String, java.lang.String)
*/
public IRemoteServiceReference[] getRemoteServiceReferences(final ID[] idFilter, final String clazz, final String filter) throws InvalidSyntaxException {
- if (clazz == null)
- return null;
+ // r-osgi does not support the idFilter, since it does not support pub/sub
IRemoteFilter remoteFilter = (filter == null) ? null : createRemoteFilter(filter);
- if (idFilter == null) {
- IRemoteServiceReference[] refs = (IRemoteServiceReference[]) getRemoteServiceReferencesConnected(clazz, remoteFilter).toArray(new IRemoteServiceReference[] {});
- return (refs.length == 0) ? null : refs;
- }
- synchronized (this) {
- List results = new ArrayList();
- for (int i = 0; i < idFilter.length; i++) {
- results.addAll(connectAndGetRemoteServiceReferencesForTarget(getConnectedID(), idFilter[i], clazz, remoteFilter));
- }
- IRemoteServiceReference[] refs = (IRemoteServiceReference[]) results.toArray(new IRemoteServiceReference[] {});
- return (refs.length == 0) ? null : refs;
- }
+ List results = getRemoteServiceReferencesConnected(clazz, remoteFilter);
+ if (results == null)
+ return null;
+ return (IRemoteServiceReference[]) results.toArray(new IRemoteServiceReference[] {});
}
public IRemoteServiceReference[] getRemoteServiceReferences(ID targetID, String clazz, String filter) throws InvalidSyntaxException, ContainerConnectException {
@@ -294,49 +279,6 @@ final class R_OSGiRemoteServiceContainer implements IOSGiRemoteServiceContainerA
return new LocalRemoteServiceReferenceImpl(createRemoteServiceID(containerID, (Long) ref.getProperty(Constants.SERVICE_ID)), ref);
}
- private List /*IRemoteServiceReference*/connectAndGetRemoteServiceReferencesForTarget(ID currentlyConnectedID, ID targetID, String clazz, IRemoteFilter remoteFilter) {
- List results = new ArrayList();
- if (currentlyConnectedID != null) {
- if (targetID.equals(currentlyConnectedID))
- results.addAll(getRemoteServiceReferencesConnected(clazz, remoteFilter));
- else {
- disconnect();
- results.addAll(connectAndGetRemoteServiceReferencesForTarget(targetID, clazz, remoteFilter, true));
- // try to reconnect to original
- try {
- connect(currentlyConnectedID, connectContext);
- } catch (ContainerConnectException e) {
- logException("connectAndGetRemoteServiceReferencesForTarget. Could not reconnect to " + currentlyConnectedID, e); //$NON-NLS-1$
- }
- }
- } else {
- results.addAll(connectAndGetRemoteServiceReferencesForTarget(targetID, clazz, remoteFilter, false));
- }
- return results;
- }
-
- private List /*IRemoteServiceReference[]*/connectAndGetRemoteServiceReferencesForTarget(ID targetID, String clazz, IRemoteFilter remoteFilter, boolean doDisconnect) {
- List results = new ArrayList();
- try {
- // we first connect
- connect(targetID, connectContext);
- // get remote services references...assuming we're connected
- results.addAll(getRemoteServiceReferencesConnected(clazz, remoteFilter));
- // then disconnect
- if (doDisconnect)
- disconnect();
- } catch (ContainerConnectException e) {
- logException("connectAndGetRemoteServiceReferencesForTarget=" + targetID + ",class=" + clazz + ",remoteFilter=" + remoteFilter, e); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- return results;
- }
-
- private void logException(String message, Throwable e) {
- System.err.println(message);
- if (e != null)
- e.printStackTrace(System.err);
- }
-
private synchronized List getRemoteServiceReferencesConnected(final String clazz, IRemoteFilter filter) {
List results = new ArrayList();
if (connectedID == null) {
diff --git a/releng/org.eclipse.ecf.releng.bm/ecf.rmap b/releng/org.eclipse.ecf.releng.bm/ecf.rmap
index e01114215..1e19aa623 100644
--- a/releng/org.eclipse.ecf.releng.bm/ecf.rmap
+++ b/releng/org.eclipse.ecf.releng.bm/ecf.rmap
@@ -10,10 +10,7 @@
<!-- org.eclipse -->
<searchPath name="org.eclipse">
<provider readerType="p2" componentTypes="osgi.bundle,eclipse.feature,buckminster" mutable="false" source="false">
- <uri format="http://download.eclipse.org/eclipse/updates/3.5/?importType=binary"/>
- </provider>
- <provider readerType="p2" componentTypes="osgi.bundle,eclipse.feature,buckminster" mutable="false" source="false">
- <uri format="http://download.eclipse.org/eclipse/updates/3.6/?importType=binary"/>
+ <uri format="http://download.eclipse.org/eclipse/updates/3.6/R-3.6.1-201009090800/?importType=binary"/>
</provider>
<!-- dev.eclipse.org PDEMapProvider -->
<provider xsi:type="pmp:PDEMapProvider" readerType="cvs" componentTypes="osgi.bundle,eclipse.feature" mutable="false" source="true">
@@ -87,10 +84,6 @@
<!-- default -->
<searchPath name="default">
<provider readerType="p2" componentTypes="osgi.bundle" mutable="false" source="false">
- <uri format="http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/updateSite/?importType=binary"/>
- </provider>
- <!-- RC3 -->
- <provider readerType="p2" componentTypes="osgi.bundle" mutable="false" source="false">
<uri format="http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/updateSite/?importType=binary"/>
</provider>
<provider readerType="p2" componentTypes="osgi.bundle" mutable="false" source="false">

Back to the top