X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fosgi%2FConfigManagerActivator.java;h=e4e070885c44559336103542a6af269239313d60;hb=20500c9eb46d1ceb99d742d1c110dcb7c558dc2b;hp=81b9ea96060e59c5d2ddbf69313eafa0f27e8e4b;hpb=9fb64948564e252018f9b1e13e7cea2c92f991aa;p=controller.git diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ConfigManagerActivator.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ConfigManagerActivator.java index 81b9ea9606..e4e070885c 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ConfigManagerActivator.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ConfigManagerActivator.java @@ -9,12 +9,18 @@ package org.opendaylight.controller.config.manager.impl.osgi; import java.lang.management.ManagementFactory; +import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanServer; import org.opendaylight.controller.config.manager.impl.ConfigRegistryImpl; import org.opendaylight.controller.config.manager.impl.jmx.ConfigRegistryJMXRegistrator; +import org.opendaylight.controller.config.spi.ModuleFactory; +import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService; +import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; +import org.osgi.util.tracker.ServiceTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,28 +31,60 @@ public class ConfigManagerActivator implements BundleActivator { private ExtenderBundleTracker extenderBundleTracker; private ConfigRegistryImpl configRegistry; private ConfigRegistryJMXRegistrator configRegistryJMXRegistrator; + private ServiceRegistration configRegistryServiceRegistration; + + private ServiceTracker tracker; @Override public void start(BundleContext context) throws Exception { - extenderBundleTracker = new ExtenderBundleTracker(context); - extenderBundleTracker.open(); - BundleContextBackedModuleFactoriesResolver bundleContextBackedModuleFactoriesResolver = new BundleContextBackedModuleFactoriesResolver( - context); + BindingIndependentMappingServiceTracker mappingServiceTracker = new BindingIndependentMappingServiceTracker( + context, this); + tracker = new ServiceTracker( + context, BindingIndependentMappingService.class, mappingServiceTracker); + + logger.debug("Waiting for codec registry"); + + tracker.open(); + } + + void initConfigManager(BundleContext context, CodecRegistry codecRegistry) { + BundleContextBackedModuleFactoriesResolver bundleContextBackedModuleFactoriesResolver = + new BundleContextBackedModuleFactoriesResolver(context); + MBeanServer configMBeanServer = ManagementFactory.getPlatformMBeanServer(); + + + // TODO push codecRegistry/IdentityCodec to dependencyResolver - MBeanServer configMBeanServer = ManagementFactory - .getPlatformMBeanServer(); configRegistry = new ConfigRegistryImpl( - bundleContextBackedModuleFactoriesResolver, context, - configMBeanServer); + bundleContextBackedModuleFactoriesResolver, configMBeanServer, codecRegistry); + + // register config registry to OSGi + configRegistryServiceRegistration = context.registerService(ConfigRegistryImpl.class, configRegistry, null); + // register config registry to jmx + configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(configMBeanServer); + try { + configRegistryJMXRegistrator.registerToJMX(configRegistry); + } catch (InstanceAlreadyExistsException e) { + throw new RuntimeException("Config Registry was already registered to JMX", e); + } - configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator( - configMBeanServer); - configRegistryJMXRegistrator.registerToJMX(configRegistry); + // track bundles containing factories + BlankTransactionServiceTracker blankTransactionServiceTracker = new BlankTransactionServiceTracker(configRegistry); + extenderBundleTracker = new ExtenderBundleTracker(context, blankTransactionServiceTracker); + extenderBundleTracker.open(); + + ServiceTracker serviceTracker = new ServiceTracker(context, ModuleFactory.class, blankTransactionServiceTracker); + serviceTracker.open(); } @Override public void stop(BundleContext context) throws Exception { + try { + tracker.close(); + } catch (Exception e) { + logger.warn("Exception while closing tracker", e); + } try { configRegistry.close(); } catch (Exception e) { @@ -64,5 +102,10 @@ public class ConfigManagerActivator implements BundleActivator { "Exception while closing config registry jmx registrator", e); } + try { + configRegistryServiceRegistration.unregister(); + } catch (Exception e) { + logger.warn("Exception while unregistering config registry", e); + } } }