diff options
author | Markus Alexander Kuppe | 2010-10-13 14:51:03 +0000 |
---|---|---|
committer | Markus Alexander Kuppe | 2010-10-13 14:51:03 +0000 |
commit | 5a25a974b1c3b2a8ba04dc31216322e8af207dbd (patch) | |
tree | c6d4c017b27279c57cf848e93a3bf81de67e2216 | |
parent | 5b98b29381080a8ccd935edf40c99445dcff27a0 (diff) | |
parent | 74178e02d3d284863eadaf230773e520747a5166 (diff) | |
download | org.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
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"> |