diff options
author | slewis@composent.com | 2010-11-26 20:51:28 +0000 |
---|---|---|
committer | slewis@composent.com | 2010-11-26 20:51:28 +0000 |
commit | 822042ebb34381e637c36a057e4748fd93e1b199 (patch) | |
tree | 1f20728a014d3f4fec5058c0ac260bd92fef3a66 /incubation | |
parent | 6effe7ad4e6e4e0530abaab1350ac20e0ef43e2e (diff) | |
download | org.eclipse.ecf-822042ebb34381e637c36a057e4748fd93e1b199.tar.gz org.eclipse.ecf-822042ebb34381e637c36a057e4748fd93e1b199.tar.xz org.eclipse.ecf-822042ebb34381e637c36a057e4748fd93e1b199.zip |
rsa additions/refactorings
Diffstat (limited to 'incubation')
14 files changed, 283 insertions, 77 deletions
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Activator.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Activator.java index 19df8f6b7..f2c5a3713 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Activator.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Activator.java @@ -23,6 +23,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.ecf.core.IContainerManager; import org.eclipse.ecf.core.util.LogHelper; import org.eclipse.ecf.core.util.SystemLogService; +import org.eclipse.ecf.osgi.services.remoteserviceadmin.TopologyManager; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -44,8 +45,8 @@ public class Activator implements BundleActivator { return instance; } - private DiscoveryImpl discovery; - private TopologyManagerImpl topologyManager; + private Discovery discovery; + private TopologyManager topologyManager; /* * (non-Javadoc) @@ -57,8 +58,8 @@ public class Activator implements BundleActivator { public void start(BundleContext bundleContext) throws Exception { Activator.context = bundleContext; Activator.instance = this; - discovery = new DiscoveryImpl(context); - topologyManager = new TopologyManagerImpl(context, discovery); + discovery = new Discovery(context); + topologyManager = new TopologyManager(context, discovery); // start discovery discovery.start(); // start topology manager diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/DiscoveryImpl.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Discovery.java index 57a41d887..0bf256ace 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/DiscoveryImpl.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Discovery.java @@ -46,7 +46,7 @@ import org.osgi.util.tracker.BundleTracker; import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
-public class DiscoveryImpl {
+public class Discovery {
private static final boolean DEBUG = false;
@@ -86,7 +86,7 @@ public class DiscoveryImpl { private BundleTracker bundleTracker;
private EndpointDescriptionBundleTrackerCustomizer bundleTrackerCustomizer;
- public DiscoveryImpl(BundleContext context) {
+ public Discovery(BundleContext context) {
this.context = context;
this.executor = new ThreadsExecutor();
}
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/EndpointListenerTrackerCustomizer.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/EndpointListenerTrackerCustomizer.java index 741623619..349287fdc 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/EndpointListenerTrackerCustomizer.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/EndpointListenerTrackerCustomizer.java @@ -18,9 +18,9 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer; public class EndpointListenerTrackerCustomizer implements
ServiceTrackerCustomizer {
- private DiscoveryImpl discovery;
+ private Discovery discovery;
- public EndpointListenerTrackerCustomizer(DiscoveryImpl discovery) {
+ public EndpointListenerTrackerCustomizer(Discovery discovery) {
this.discovery = discovery;
}
@@ -32,7 +32,7 @@ public class EndpointListenerTrackerCustomizer implements if (listener == null)
return null;
for (org.osgi.service.remoteserviceadmin.EndpointDescription ed : allDiscoveredEndpointDescriptions) {
- DiscoveryImpl.EndpointListenerHolder[] endpointListenerHolders = discovery
+ Discovery.EndpointListenerHolder[] endpointListenerHolders = discovery
.getMatchingEndpointListenerHolders(
new ServiceReference[] { reference }, ed);
if (endpointListenerHolders != null) {
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/LocatorServiceListener.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/LocatorServiceListener.java index 0099e6394..ccd124910 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/LocatorServiceListener.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/LocatorServiceListener.java @@ -29,16 +29,15 @@ class LocatorServiceListener implements IServiceListener { private Object listenerLock = new Object(); private IDiscoveryLocator locator; - private DiscoveryImpl discovery; + private Discovery discovery; private List<org.osgi.service.remoteserviceadmin.EndpointDescription> discoveredEndpointDescriptions = new ArrayList(); - public LocatorServiceListener(DiscoveryImpl discovery) { + public LocatorServiceListener(Discovery discovery) { this(discovery, null); } - public LocatorServiceListener(DiscoveryImpl discovery, - IDiscoveryLocator locator) { + public LocatorServiceListener(Discovery discovery, IDiscoveryLocator locator) { this.discovery = discovery; this.locator = locator; } diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractMetadataFactory.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractMetadataFactory.java index e2701b9ca..ca7f8e376 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractMetadataFactory.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractMetadataFactory.java @@ -389,7 +389,7 @@ public abstract class AbstractMetadataFactory { encodeLong(result, RemoteConstants.ENDPOINT_REMOTESERVICE_ID, new Long(
remoteServiceId));
// ECF connectTargetID = endpointDescription.getConnectTargetID()
- ID connectTargetID = endpointDescription.getTargetID();
+ ID connectTargetID = endpointDescription.getConnectTargetID();
if (connectTargetID != null) {
// external form of ID
encodeString(result, RemoteConstants.ENDPOINT_CONNECTTARGET_ID,
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractRemoteServiceAdmin.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractRemoteServiceAdmin.java index b9835f7e6..f5c905026 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractRemoteServiceAdmin.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractRemoteServiceAdmin.java @@ -13,6 +13,8 @@ import java.util.Map; import org.eclipse.core.runtime.IStatus;
import org.eclipse.ecf.core.identity.ID;
+import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.DebugOptions;
+import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.LogUtility;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
import org.eclipse.ecf.remoteservice.IRemoteServiceID;
import org.eclipse.ecf.remoteservice.IRemoteServiceRegistration;
@@ -31,24 +33,24 @@ public abstract class AbstractRemoteServiceAdmin { return context;
}
- protected void logError(String method, String message, IStatus result) {
- // TODO Auto-generated method stub
- logError(method, method);
-
+ protected void logError(String methodName, String message, IStatus status) {
+ LogUtility.logError(methodName, DebugOptions.REMOTE_SERVICE_ADMIN,
+ this.getClass(), status);
}
- protected void trace(String method, String message) {
- // TODO Auto-generated method stub
- System.out.println("TopologyManager." + method + ": " + message);
+ protected void trace(String methodName, String message) {
+ LogUtility.trace(methodName, DebugOptions.REMOTE_SERVICE_ADMIN,
+ this.getClass(), message);
}
- protected void logWarning(String string) {
- System.out.println(string);
+ protected void logWarning(String methodName, String message) {
+ LogUtility.logWarning(methodName, DebugOptions.REMOTE_SERVICE_ADMIN,
+ this.getClass(), message);
}
- protected void logError(String method, String message) {
- // TODO Auto-generated method stub
-
+ protected void logError(String methodName, String message) {
+ LogUtility.logError(methodName, DebugOptions.REMOTE_SERVICE_ADMIN,
+ this.getClass(), message);
}
protected Object getService(ServiceReference serviceReference) {
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractTopologyManager.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractTopologyManager.java index 820932d41..b3f7245a1 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractTopologyManager.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractTopologyManager.java @@ -17,7 +17,7 @@ import java.util.Properties; import org.eclipse.core.runtime.IStatus;
import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.DebugOptions;
-import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.DiscoveryImpl;
+import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.Discovery;
import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.LogUtility;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
import org.osgi.framework.BundleContext;
@@ -31,7 +31,7 @@ public abstract class AbstractTopologyManager { public static final String SERVICE_EXPORTED_INTERFACES_WILDCARD = "*";
private BundleContext context;
- private DiscoveryImpl discovery;
+ private Discovery discovery;
private boolean hostAutoCreateContainer = new Boolean(
System.getProperty(
@@ -65,8 +65,7 @@ public abstract class AbstractTopologyManager { private org.osgi.service.remoteserviceadmin.RemoteServiceAdmin remoteServiceAdmin;
private Object remoteServiceAdminLock = new Object();
- public AbstractTopologyManager(BundleContext context,
- DiscoveryImpl discovery) {
+ public AbstractTopologyManager(BundleContext context, Discovery discovery) {
this.context = context;
this.discovery = discovery;
}
@@ -121,7 +120,7 @@ public abstract class AbstractTopologyManager { return context;
}
- protected DiscoveryImpl getDiscovery() {
+ protected Discovery getDiscovery() {
return discovery;
}
@@ -224,7 +223,7 @@ public abstract class AbstractTopologyManager { context = null;
}
- protected org.osgi.service.remoteserviceadmin.RemoteServiceAdmin selectRemoteServiceAdmin(
+ protected org.osgi.service.remoteserviceadmin.RemoteServiceAdmin selectExportRemoteServiceAdmin(
ServiceReference serviceReference, String[] exportedInterfaces,
String[] exportedConfigs, String[] serviceIntents,
IRemoteServiceContainer[] rsContainers) {
@@ -235,6 +234,15 @@ public abstract class AbstractTopologyManager { return remoteServiceAdmin;
}
+ protected org.osgi.service.remoteserviceadmin.RemoteServiceAdmin selectImportRemoteServiceAdmin(
+ EndpointDescription endpoint, IRemoteServiceContainer[] rsContainers) {
+ synchronized (remoteServiceAdminLock) {
+ if (remoteServiceAdmin == null)
+ remoteServiceAdmin = new RemoteServiceAdmin(getContext());
+ }
+ return remoteServiceAdmin;
+ }
+
protected String[] getStringArrayFromPropertyValue(Object value) {
if (value == null)
return null;
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/ConsumerContainerSelector.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/ConsumerContainerSelector.java index a3692314a..6c729e997 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/ConsumerContainerSelector.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/ConsumerContainerSelector.java @@ -36,7 +36,7 @@ public class ConsumerContainerSelector extends String[] remoteSupportedConfigs = (String[]) remoteSupportedConfigsList
.toArray();
// Get connect targetID
- ID connectTargetID = endpointDescription.getTargetID();
+ ID connectTargetID = endpointDescription.getConnectTargetID();
// Find any/all existing containers for the proxy that
// match the endpointID namespace and the remoteSupportedConfigs
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java index b91d7c7a3..c21e39af1 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescription.java @@ -14,6 +14,7 @@ import java.util.Map; import org.eclipse.core.runtime.Assert; import org.eclipse.ecf.core.identity.ID; +import org.eclipse.ecf.remoteservice.IRemoteServiceContainer; import org.osgi.framework.ServiceReference; public class EndpointDescription extends @@ -80,7 +81,7 @@ public class EndpointDescription extends return containerID; } - public ID getTargetID() { + public ID getConnectTargetID() { return connectTargetID; } @@ -96,6 +97,17 @@ public class EndpointDescription extends return rsFilter; } + private IRemoteServiceContainer rsContainer; + + public IRemoteServiceContainer getImportRemoteServiceContainer() { + return rsContainer; + } + + public void setImportRemoteServiceContainer( + IRemoteServiceContainer rsContainer) { + this.rsContainer = rsContainer; + } + public String toString() { return "ECFEndpointDescription[properties=" + super.toString() + ",containerID=" + containerID + ", remoteServiceId=" diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescriptionAdvertiser.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescriptionAdvertiser.java index ae1028898..85afc8c95 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescriptionAdvertiser.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/EndpointDescriptionAdvertiser.java @@ -19,15 +19,15 @@ import org.eclipse.core.runtime.Status; import org.eclipse.ecf.discovery.IDiscoveryAdvertiser;
import org.eclipse.ecf.discovery.IServiceInfo;
import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.Activator;
-import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.DiscoveryImpl;
+import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.Discovery;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
public class EndpointDescriptionAdvertiser implements
IEndpointDescriptionAdvertiser {
- private DiscoveryImpl discovery;
+ private Discovery discovery;
- public EndpointDescriptionAdvertiser(DiscoveryImpl discovery) {
+ public EndpointDescriptionAdvertiser(Discovery discovery) {
this.discovery = discovery;
}
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/ImportRegistration.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/ImportRegistration.java index 99d650616..5d6d901b0 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/ImportRegistration.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/ImportRegistration.java @@ -9,36 +9,37 @@ ******************************************************************************/
package org.eclipse.ecf.osgi.services.remoteserviceadmin;
-import org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter;
+import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
import org.eclipse.ecf.remoteservice.IRemoteServiceReference;
-import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
public class ImportRegistration implements
org.osgi.service.remoteserviceadmin.ImportRegistration {
- private IRemoteServiceContainerAdapter containerAdapter;
+ private IRemoteServiceContainer rsContainer;
private IRemoteServiceReference rsReference;
+ private ServiceRegistration importRegistration;
private ImportReference importReference;
private Throwable throwable;
private final Object closeLock = new Object();
- protected ImportRegistration(
- IRemoteServiceContainerAdapter containerAdapter,
+ protected ImportRegistration(IRemoteServiceContainer rsContainer,
IRemoteServiceReference rsReference,
- ServiceReference serviceReference,
- EndpointDescription endpointDescription) {
- this.containerAdapter = containerAdapter;
+ EndpointDescription endpointDescription,
+ ServiceRegistration importRegistration) {
+ this.rsContainer = rsContainer;
this.rsReference = rsReference;
- this.importReference = new ImportReference(serviceReference,
- endpointDescription);
+ this.importRegistration = importRegistration;
+ this.importReference = new ImportReference(
+ importRegistration.getReference(), endpointDescription);
}
public IRemoteServiceReference getRemoteServiceReference() {
return rsReference;
}
- public IRemoteServiceContainerAdapter getContainerAdapter() {
- return containerAdapter;
+ public IRemoteServiceContainer getRemoteServiceContainer() {
+ return rsContainer;
}
public ImportReference getImportReference() {
@@ -54,10 +55,15 @@ public class ImportRegistration implements public void close() {
synchronized (closeLock) {
+ if (importRegistration != null) {
+ importRegistration.unregister();
+ importRegistration = null;
+ }
if (rsReference != null) {
- containerAdapter.ungetRemoteService(rsReference);
+ rsContainer.getContainerAdapter().ungetRemoteService(
+ rsReference);
rsReference = null;
- containerAdapter = null;
+ rsContainer = null;
}
if (importReference != null) {
importReference.close();
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteConstants.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteConstants.java index 30e323a8e..6ad0e8dfc 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteConstants.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteConstants.java @@ -31,23 +31,23 @@ public class RemoteConstants { public static final String ENDPOINT_CONNECTTARGET_ID_NAMESPACE = "ecf.endpoint.connecttarget.id.ns";
// id filter. Value of type ID[]
public static final String ENDPOINT_IDFILTER_IDS = "ecf.endpoint.idfilter.ids";
-
+ // id filter array length count. Value of type String (representing Integer)
public static final String ENDPOINT_IDFILTER_IDARRAY_COUNT = "ecf.endpoint.idfilter.id.n";
- // id filter external form
+ // id filter external form. Value of type String
public static final String ENDPOINT_IDFILTER_IDARRAY_NAME_ = "ecf.endpoint.idfilter.id.name.";
- // id filter namespaces
+ // id filter namespaces. Value of type String.
public static final String ENDPOINT_IDFILTER_IDARRAY_NAMESPACE_ = "ecf.endpoint.idfilter.id.ns.";
- // remote service filter
+ // remote service filter. Value of type String
public static final String ENDPOINT_REMOTESERVICE_FILTER = "ecf.endpoint.rsfilter";
-
+ // Value of type IRemoteServiceContainer[]
public static final String RSA_CONTAINERS = "ecf.rsa.containers";
-
+ // Value of type String[]
public static final String RSA_EXPORTED_INTERFACES = "ecf.rsa.exportedInterfaces";
-
+ // Value of type String,ID,or Object[]
public static final String EXPORTED_CONTAINER_FACTORY_ARGS = "ecf.exported.containerfactoryargs";
-
+ // Value of type IConnectContext
public static final String EXPORTED_CONTAINER_CONNECT_CONTEXT = "ecf.exported.containerconnectcontext";
-
+ // Value of type ID
public static final String EXPORTED_CONTAINER_ID = "ecf.exported.containerid";
}
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java index 44574b766..b714879b2 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java @@ -14,18 +14,25 @@ import java.util.Collection; import java.util.Dictionary;
import java.util.Map;
+import org.eclipse.ecf.core.identity.ID;
+import org.eclipse.ecf.core.util.ECFException;
import org.eclipse.ecf.remoteservice.IOSGiRemoteServiceContainerAdapter;
+import org.eclipse.ecf.remoteservice.IRemoteService;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter;
+import org.eclipse.ecf.remoteservice.IRemoteServiceReference;
import org.eclipse.ecf.remoteservice.IRemoteServiceRegistration;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
public class RemoteServiceAdmin extends AbstractRemoteServiceAdmin implements
org.osgi.service.remoteserviceadmin.RemoteServiceAdmin {
private Collection<ExportRegistration> exportedRegistrations = new ArrayList<ExportRegistration>();
+ private Collection<ImportRegistration> importedRegistrations = new ArrayList<ImportRegistration>();
+
public RemoteServiceAdmin(BundleContext context) {
super(context);
}
@@ -118,6 +125,132 @@ public class RemoteServiceAdmin extends AbstractRemoteServiceAdmin implements public org.osgi.service.remoteserviceadmin.ImportRegistration importService(
org.osgi.service.remoteserviceadmin.EndpointDescription endpoint) {
+ EndpointDescription ed = (EndpointDescription) endpoint;
+ IRemoteServiceContainer rsContainer = ed
+ .getImportRemoteServiceContainer();
+ if (rsContainer == null) {
+ logError(
+ "importService",
+ "endpoint description getImportRemoteServiceContainer return value must be non-null");
+ return null;
+ }
+ ImportRegistration result = null;
+ synchronized (importedRegistrations) {
+ try {
+ result = doImportService(ed, rsContainer);
+ if (result != null)
+ importedRegistrations.add(result);
+ } catch (ECFException e) {
+ result = handleImportServiceException(ed, rsContainer, e);
+ }
+ }
+ return result;
+ }
+
+ private ImportRegistration handleImportServiceException(
+ EndpointDescription endpoint,
+ IRemoteServiceContainer iRemoteServiceContainer, Exception e) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ private String getFullRemoteServicesFilter(String remoteServicesFilter,
+ long remoteServiceId) {
+ if (remoteServiceId < 0)
+ return remoteServicesFilter;
+ StringBuffer filter = new StringBuffer("(&(") //$NON-NLS-1$
+ .append(org.eclipse.ecf.remoteservice.Constants.SERVICE_ID)
+ .append("=").append(remoteServiceId).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (remoteServicesFilter != null)
+ filter.append(remoteServicesFilter);
+ filter.append(")"); //$NON-NLS-1$
+ return filter.toString();
+ }
+
+ private ImportRegistration doImportService(
+ EndpointDescription endpointDescription,
+ IRemoteServiceContainer rsContainer) throws ECFException {
+ Collection<String> interfaces = endpointDescription.getInterfaces();
+ ID endpointID = endpointDescription.getContainerID();
+ ID targetID = endpointDescription.getConnectTargetID();
+ ID[] idFilter = endpointDescription.getIDFilter();
+ if (idFilter == null)
+ idFilter = new ID[] { endpointID };
+
+ String rsFilter = getFullRemoteServicesFilter(
+ endpointDescription.getRemoteServiceFilter(),
+ endpointDescription.getRemoteServiceId());
+
+ Collection<IRemoteServiceReference> rsRefs = new ArrayList<IRemoteServiceReference>();
+ IRemoteServiceContainerAdapter containerAdapter = rsContainer
+ .getContainerAdapter();
+
+ for (String intf : interfaces) {
+ try {
+ IRemoteServiceReference[] refs = containerAdapter
+ .getRemoteServiceReferences(targetID, idFilter, intf,
+ rsFilter);
+ if (refs == null || refs.length == 0) {
+ logWarning("doImportService",
+ "getRemoteServiceReferences targetID=" + targetID
+ + ",idFilter=" + idFilter + ",intf=" + intf
+ + ",rsFilter=" + rsFilter
+ + " on rsContainer="
+ + rsContainer.getContainer().getID()
+ + " return null");
+ continue;
+ }
+ for (int i = 0; i < refs.length; i++)
+ rsRefs.add(refs[i]);
+ } catch (Exception e) {
+
+ }
+ }
+ if (rsRefs.size() == 0) {
+ // This is an error...as no remote service reference was
+ // available/reachable with given endpointDescription
+ logError("doImportService",
+ "remote service reference not found for targetID="
+ + targetID + ",idFilter=" + idFilter
+ + ",interfaces=" + interfaces + ",rsFilter="
+ + rsFilter + " on rsContainer="
+ + rsContainer.getContainer().getID());
+ return null;
+ }
+ // The rsRefs collection should have a single reference in it. If it has
+ // more than one, then something is wrong.
+ if (rsRefs.size() > 1) {
+ logWarning("doImportService",
+ "getRemoteServiceReferences for interfaces=" + interfaces
+ + " returned multiple rsRefs=" + rsRefs);
+ }
+ // Now get first/only one
+ IRemoteServiceReference rsReference = rsRefs.iterator().next();
+ IRemoteService rs = rsContainer.getContainerAdapter().getRemoteService(
+ rsReference);
+ if (rs == null)
+ throw new ECFException("getRemoteService for rsReference="
+ + rsReference + " returned null for rsContainer="
+ + rsContainer);
+
+ Object proxy = rs.getProxy();
+ if (proxy == null)
+ throw new ECFException("getProxy() returned null for rsReference="
+ + rsReference + " and rsContainer=" + rsContainer);
+
+ Dictionary proxyProperties = getProxyProperties(rsContainer,
+ endpointDescription, rsReference);
+
+ ServiceRegistration proxyRegistration = getContext().registerService(
+ (String[]) interfaces.toArray(), proxy, proxyProperties);
+ // Now create import registration for newly registered proxy
+ return new ImportRegistration(rsContainer, rsReference,
+ endpointDescription, proxyRegistration);
+ }
+
+ private Dictionary getProxyProperties(IRemoteServiceContainer rsContainer,
+ EndpointDescription endpointDescription,
+ IRemoteServiceReference rsReference) {
// TODO Auto-generated method stub
return null;
}
@@ -140,15 +273,31 @@ public class RemoteServiceAdmin extends AbstractRemoteServiceAdmin implements return results;
}
+ public Collection<org.eclipse.ecf.osgi.services.remoteserviceadmin.ImportRegistration> getImportedRegistrations() {
+ Collection<org.eclipse.ecf.osgi.services.remoteserviceadmin.ImportRegistration> results = new ArrayList<org.eclipse.ecf.osgi.services.remoteserviceadmin.ImportRegistration>();
+ synchronized (importedRegistrations) {
+ results.addAll(importedRegistrations);
+ }
+ return results;
+ }
+
public Collection<org.osgi.service.remoteserviceadmin.ImportReference> getImportedEndpoints() {
- // TODO Auto-generated method stub
- return null;
+ Collection<org.osgi.service.remoteserviceadmin.ImportReference> results = new ArrayList<org.osgi.service.remoteserviceadmin.ImportReference>();
+ synchronized (importedRegistrations) {
+ for (ImportRegistration reg : importedRegistrations) {
+ results.add(reg.getImportReference());
+ }
+ }
+ return results;
}
public void close() {
synchronized (exportedRegistrations) {
exportedRegistrations.clear();
}
+ synchronized (importedRegistrations) {
+ importedRegistrations.clear();
+ }
super.close();
}
}
diff --git a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/TopologyManagerImpl.java b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/TopologyManager.java index 604e46558..f89e825a5 100644 --- a/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/TopologyManagerImpl.java +++ b/incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/TopologyManager.java @@ -7,17 +7,14 @@ * Contributors:
* Composent, Inc. - initial API and implementation
******************************************************************************/
-package org.eclipse.ecf.internal.osgi.services.remoteserviceadmin;
+package org.eclipse.ecf.osgi.services.remoteserviceadmin;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
-import org.eclipse.ecf.osgi.services.remoteserviceadmin.AbstractTopologyManager;
-import org.eclipse.ecf.osgi.services.remoteserviceadmin.EndpointDescription;
-import org.eclipse.ecf.osgi.services.remoteserviceadmin.IHostContainerSelector;
-import org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteConstants;
+import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.Discovery;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceEvent;
@@ -25,15 +22,16 @@ import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.hooks.service.EventHook;
import org.osgi.service.remoteserviceadmin.EndpointListener;
+import org.osgi.service.remoteserviceadmin.ImportRegistration;
-public class TopologyManagerImpl extends AbstractTopologyManager implements
+public class TopologyManager extends AbstractTopologyManager implements
EventHook, EndpointListener {
private ServiceRegistration endpointListenerRegistration;
private ServiceRegistration eventHookRegistration;
- public TopologyManagerImpl(BundleContext context, DiscoveryImpl discovery) {
+ public TopologyManager(BundleContext context, Discovery discovery) {
super(context, discovery);
}
@@ -91,8 +89,37 @@ public class TopologyManagerImpl extends AbstractTopologyManager implements }
private void handleEndpointAdded(EndpointDescription endpoint) {
- // TODO Auto-generated method stub
trace("handleEndpointAdded", "endpoint=" + endpoint);
+ IConsumerContainerSelector consumerContainerSelector = getConsumerContainerSelector();
+ if (consumerContainerSelector == null) {
+ logError("handleEndpointAdded",
+ "No consumerContainerSelector available");
+ return;
+ }
+ IRemoteServiceContainer[] rsContainers = consumerContainerSelector
+ .selectConsumerContainers(endpoint);
+ // If none found, log a warning and we're done
+ if (rsContainers == null || rsContainers.length == 0) {
+ logWarning(
+ "handleEndpointAdded", "No remote service containers found for endpoint=" //$NON-NLS-1$
+ + endpoint + ". Remote service NOT IMPORTED"); //$NON-NLS-1$
+ return;
+ }
+
+ org.osgi.service.remoteserviceadmin.RemoteServiceAdmin rsa = selectImportRemoteServiceAdmin(
+ endpoint, rsContainers);
+ for (int i = 0; i < rsContainers.length; i++) {
+ endpoint.setImportRemoteServiceContainer(rsContainers[i]);
+ // now call rsa.import
+ ImportRegistration importRegistration = rsa.importService(endpoint);
+ if (importRegistration == null) {
+ logError("handleEndpointAdded",
+ "Import registration is null for endpoint=" + endpoint
+ + " and rsa=" + rsa);
+ } else
+ trace("handleEndpointAdded", "Import registration="
+ + importRegistration + " for endpoint=" + endpoint);
+ }
}
private void handleEndpointRemoved(EndpointDescription endpoint) {
@@ -103,7 +130,8 @@ public class TopologyManagerImpl extends AbstractTopologyManager implements private Map<String, Object> prepareExportProperties(
ServiceReference serviceReference, String[] exportedInterfaces,
String[] exportedConfigs, String[] serviceIntents,
- IRemoteServiceContainer[] rsContainers) {
+ IRemoteServiceContainer[] rsContainers,
+ org.osgi.service.remoteserviceadmin.RemoteServiceAdmin rsa) {
Map<String, Object> result = new HashMap<String, Object>();
result.put(RemoteConstants.RSA_CONTAINERS, rsContainers);
result.put(RemoteConstants.RSA_EXPORTED_INTERFACES, exportedInterfaces);
@@ -148,7 +176,7 @@ public class TopologyManagerImpl extends AbstractTopologyManager implements // Get a host container selector
IHostContainerSelector hostContainerSelector = getHostContainerSelector();
if (hostContainerSelector == null) {
- logError("selectRemoteServiceContainers",
+ logError("handleServiceRegistering",
"No hostContainerSelector available");
return;
}
@@ -165,16 +193,17 @@ public class TopologyManagerImpl extends AbstractTopologyManager implements + ". Remote service NOT EXPORTED"); //$NON-NLS-1$
return;
}
- // prepare export properties
- Map<String, Object> exportProperties = prepareExportProperties(
- serviceReference, exportedInterfaces, exportedConfigs,
- serviceIntents, rsContainers);
// Select remote service admin
- org.osgi.service.remoteserviceadmin.RemoteServiceAdmin rsa = selectRemoteServiceAdmin(
+ org.osgi.service.remoteserviceadmin.RemoteServiceAdmin rsa = selectExportRemoteServiceAdmin(
serviceReference, exportedInterfaces, exportedConfigs,
serviceIntents, rsContainers);
+ // prepare export properties
+ Map<String, Object> exportProperties = prepareExportProperties(
+ serviceReference, exportedInterfaces, exportedConfigs,
+ serviceIntents, rsContainers, rsa);
+
// if no remote service admin available, then log error and return
if (rsa == null) {
logError("handleServiceRegistered",
|