package org.apache.aries.subsystem.scope.internal; import org.apache.aries.subsystem.scope.Scope; import org.apache.aries.subsystem.scope.impl.ScopeManager; import org.osgi.framework.Bundle; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceFactory; import org.osgi.framework.ServiceRegistration; import org.osgi.framework.hooks.bundle.EventHook; import org.osgi.framework.hooks.resolver.ResolverHookFactory; import org.osgi.framework.hooks.service.EventListenerHook; public class Activator implements BundleActivator, ServiceFactory<Scope> { private static volatile BundleContext bundleContext; public static BundleContext getBundleContext() { return bundleContext; } private ScopeManager scopeManager; private ServiceRegistration<?> scopeManagerReg; private ServiceRegistration<Scope> scopeFactoryReg; public Scope getService(Bundle b, ServiceRegistration<Scope> sr) { return scopeManager.getScope(b); } @SuppressWarnings("unchecked") public void start(BundleContext bundleContext) throws Exception { Activator.bundleContext = bundleContext; scopeManager = new ScopeManager(bundleContext); scopeManagerReg = bundleContext.registerService( new String[] { EventHook.class.getName(), EventListenerHook.class.getName(), org.osgi.framework.hooks.bundle.FindHook.class.getName(), org.osgi.framework.hooks.service.FindHook.class.getName(), ResolverHookFactory.class.getName(), }, scopeManager, null); scopeFactoryReg = (ServiceRegistration<Scope>)bundleContext.registerService(Scope.class.getName(), this, null); } public void stop(BundleContext bc) throws Exception { unregisterQuietly(); scopeManager.shutdown(); Activator.bundleContext = null; } public void ungetService(Bundle b, ServiceRegistration<Scope> sr, Scope s) { } private void unregisterQuietly() { unregisterQuietly(scopeFactoryReg); unregisterQuietly(scopeManagerReg); } private void unregisterQuietly(ServiceRegistration<?> serviceRegistration) { try { serviceRegistration.unregister(); } catch (Exception e) { // ignore } } }