Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractTopologyManager.java')
-rw-r--r--incubation/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/AbstractTopologyManager.java78
1 files changed, 38 insertions, 40 deletions
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 d72883a45..e1371db00 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
@@ -13,7 +13,8 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.DebugOptions;
import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.LogUtility;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
import org.osgi.util.tracker.ServiceTracker;
public abstract class AbstractTopologyManager {
@@ -25,16 +26,13 @@ public abstract class AbstractTopologyManager {
private ServiceTracker endpointDescriptionAdvertiserTracker;
private Object endpointDescriptionAdvertiserTrackerLock = new Object();
- private RemoteServiceAdmin remoteServiceAdmin;
- private Object remoteServiceAdminLock = new Object();
+ private ServiceTracker remoteServiceAdminTracker;
+ private Object remoteServiceAdminTrackerLock = new Object();
public AbstractTopologyManager(BundleContext context) {
this.context = context;
}
- public void start() throws Exception {
- }
-
protected BundleContext getContext() {
return context;
}
@@ -59,55 +57,55 @@ public abstract class AbstractTopologyManager {
endpointDescriptionAdvertiserTracker = null;
}
}
- context = null;
- }
-
- protected org.osgi.service.remoteserviceadmin.RemoteServiceAdmin selectExportRemoteServiceAdmin(
- ServiceReference serviceReference, String[] exportedInterfaces) {
- synchronized (remoteServiceAdminLock) {
- if (remoteServiceAdmin == null)
- remoteServiceAdmin = new RemoteServiceAdmin(getContext());
+ synchronized (remoteServiceAdminTrackerLock) {
+ if (remoteServiceAdminTracker != null) {
+ remoteServiceAdminTracker.close();
+ remoteServiceAdminTracker = null;
+ }
}
- return remoteServiceAdmin;
+ context = null;
}
- protected RemoteServiceAdmin selectUnexportRemoteServiceAdmin(
- ServiceReference serviceReference) {
- synchronized (remoteServiceAdminLock) {
- return remoteServiceAdmin;
- }
+ protected void logWarning(String methodName, String message) {
+ LogUtility.logWarning(methodName, DebugOptions.TOPOLOGY_MANAGER,
+ this.getClass(), message);
}
- protected RemoteServiceAdmin selectImportRemoteServiceAdmin(
- EndpointDescription endpoint) {
- synchronized (remoteServiceAdminLock) {
- if (remoteServiceAdmin == null)
- remoteServiceAdmin = new RemoteServiceAdmin(getContext());
+ protected Filter createRSAFilter() {
+ String filterString = "(&("
+ + org.osgi.framework.Constants.OBJECTCLASS
+ + "="
+ + org.osgi.service.remoteserviceadmin.RemoteServiceAdmin.class
+ .getName()
+ + ")("
+ + org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteServiceAdmin.SERVICE_PROP
+ + "=*))";
+ try {
+ return getContext().createFilter(filterString);
+ } catch (InvalidSyntaxException e) {
+ // Should never happen
+ return null;
}
- return remoteServiceAdmin;
}
- protected RemoteServiceAdmin selectUnimportRemoteServiceAdmin(
- EndpointDescription endpoint) {
- synchronized (remoteServiceAdminLock) {
- if (remoteServiceAdmin == null)
- remoteServiceAdmin = new RemoteServiceAdmin(getContext());
+ protected org.osgi.service.remoteserviceadmin.RemoteServiceAdmin getRemoteServiceAdmin() {
+ synchronized (remoteServiceAdminTrackerLock) {
+ if (remoteServiceAdminTracker == null) {
+ remoteServiceAdminTracker = new ServiceTracker(getContext(),
+ createRSAFilter(), null);
+ remoteServiceAdminTracker.open(true);
+ }
}
- return remoteServiceAdmin;
- }
-
- protected void logWarning(String methodName, String message) {
- LogUtility.logWarning(methodName, DebugOptions.TOPOLOGY_MANAGER,
- this.getClass(), message);
+ return (org.osgi.service.remoteserviceadmin.RemoteServiceAdmin) remoteServiceAdminTracker
+ .getService();
}
protected void advertiseEndpointDescription(
EndpointDescription endpointDescription) {
IEndpointDescriptionAdvertiser advertiser = getEndpointDescriptionAdvertiser();
if (advertiser == null) {
- logError(
- "advertiseExportedRegistration",
- "No endpoint description advertiser available to advertise endpointDescription="
+ logWarning("advertiseExportedRegistration",
+ "No endpoint description advertiser available for endpointDescription="
+ endpointDescription);
return;
}

Back to the top