diff options
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.java | 33 |
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); + } + } |