Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java')
-rw-r--r--bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java33
1 files changed, 32 insertions, 1 deletions
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java
index 6c8e325c1..509d77514 100644
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java
+++ b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java
@@ -11,18 +11,26 @@
package org.eclipse.equinox.internal.ds;
import java.util.List;
+import org.apache.felix.scr.ScrService;
import org.eclipse.osgi.service.environment.EnvironmentInfo;
import org.osgi.framework.*;
import org.osgi.framework.namespace.BundleNamespace;
import org.osgi.framework.startlevel.BundleStartLevel;
import org.osgi.framework.wiring.BundleWire;
import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.component.runtime.ServiceComponentRuntime;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
-public class Activator implements BundleActivator {
+@SuppressWarnings("deprecation")
+public class Activator implements BundleActivator, ServiceTrackerCustomizer<ServiceComponentRuntime, ServiceRegistration<ScrService>> {
+ private BundleContext bc;
private Bundle scr;
+ private ServiceTracker<ServiceComponentRuntime, ServiceRegistration<ScrService>> tracker;
public void start(BundleContext context) throws Exception {
+ this.bc = context;
ServiceReference<EnvironmentInfo> envInfoRef = context.getServiceReference(EnvironmentInfo.class);
EnvironmentInfo envInfo = null;
if (envInfoRef != null) {
@@ -50,10 +58,33 @@ public class Activator implements BundleActivator {
BundleStartLevel scrStartLevel = scr.adapt(BundleStartLevel.class);
scrStartLevel.setStartLevel(equinoxSDstartLevel.getStartLevel());
scr.start(Bundle.START_TRANSIENT);
+ tracker = new ServiceTracker<ServiceComponentRuntime, ServiceRegistration<ScrService>>(context, ServiceComponentRuntime.class, this);
+ tracker.open();
}
public void stop(BundleContext context) throws Exception {
+ tracker.close();
scr.stop(Bundle.STOP_TRANSIENT);
}
+ @Override
+ public ServiceRegistration<ScrService> addingService(ServiceReference<ServiceComponentRuntime> reference) {
+ ServiceComponentRuntime scrService = bc.getService(reference);
+ if (scr != null) {
+ return bc.registerService(ScrService.class, new ScrServiceImpl(scrService, bc), null);
+ }
+ return null;
+ }
+
+ @Override
+ public void modifiedService(ServiceReference<ServiceComponentRuntime> reference, ServiceRegistration<ScrService> reg) {
+ // do nothing
+ }
+
+ @Override
+ public void removedService(ServiceReference<ServiceComponentRuntime> reference, ServiceRegistration<ScrService> reg) {
+ reg.unregister();
+ bc.ungetService(reference);
+ }
+
}

Back to the top