X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fosgi%2FConfigManagerActivator.java;h=c075b09df76d5ba0fd770ec9af2e4adfb0c28b7c;hp=be602e5b2a31fb07f90f837fc81ff63d8d16ebc4;hb=d9de6c2ddfb30eb2eee782c229f6e03cef352bbd;hpb=90c298fda86e8fa0df47a356e87cb34a20347beb 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 be602e5b2a..c075b09df7 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 @@ -8,12 +8,19 @@ package org.opendaylight.controller.config.manager.impl.osgi; import java.lang.management.ManagementFactory; +import java.util.Collection; +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.manager.impl.osgi.mapping.ModuleInfoBundleTracker; +import org.opendaylight.controller.config.manager.impl.osgi.mapping.RuntimeGeneratedMappingServiceActivator; import org.opendaylight.controller.config.spi.ModuleFactory; +import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.yang.binding.YangModuleInfo; +import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; @@ -22,47 +29,64 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ConfigManagerActivator implements BundleActivator { - private static final Logger logger = LoggerFactory - .getLogger(ConfigManagerActivator.class); + private static final Logger logger = LoggerFactory.getLogger(ConfigManagerActivator.class); - private ExtenderBundleTracker extenderBundleTracker; + private final MBeanServer configMBeanServer = ManagementFactory.getPlatformMBeanServer(); + private ExtensibleBundleTracker>> bundleTracker; private ConfigRegistryImpl configRegistry; private ConfigRegistryJMXRegistrator configRegistryJMXRegistrator; - private ServiceRegistration configRegistryServiceRegistration; + private ServiceRegistration configRegistryServiceRegistration; + private RuntimeGeneratedMappingServiceActivator mappingServiceActivator; @Override - public void start(BundleContext context) throws Exception { - BundleContextBackedModuleFactoriesResolver bundleContextBackedModuleFactoriesResolver = - new BundleContextBackedModuleFactoriesResolver(context); - MBeanServer configMBeanServer = ManagementFactory.getPlatformMBeanServer(); - configRegistry = new ConfigRegistryImpl( - bundleContextBackedModuleFactoriesResolver, configMBeanServer); + public void start(BundleContext context) { + + // track bundles containing YangModuleInfo + ModuleInfoBundleTracker moduleInfoBundleTracker = new ModuleInfoBundleTracker(); + mappingServiceActivator = new RuntimeGeneratedMappingServiceActivator(moduleInfoBundleTracker); + CodecRegistry codecRegistry = mappingServiceActivator.startRuntimeMappingService(context).getCodecRegistry(); + + // start config registry + BundleContextBackedModuleFactoriesResolver bundleContextBackedModuleFactoriesResolver = new BundleContextBackedModuleFactoriesResolver( + context); + configRegistry = new ConfigRegistryImpl(bundleContextBackedModuleFactoriesResolver, configMBeanServer, + codecRegistry); + + // track bundles containing factories + BlankTransactionServiceTracker blankTransactionServiceTracker = new BlankTransactionServiceTracker( + configRegistry); + ModuleFactoryBundleTracker moduleFactoryBundleTracker = new ModuleFactoryBundleTracker( + blankTransactionServiceTracker); + + // start extensible tracker + bundleTracker = new ExtensibleBundleTracker<>(context, moduleInfoBundleTracker, moduleFactoryBundleTracker); + bundleTracker.open(); // register config registry to OSGi configRegistryServiceRegistration = context.registerService(ConfigRegistryImpl.class, configRegistry, null); // register config registry to jmx configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(configMBeanServer); - configRegistryJMXRegistrator.registerToJMX(configRegistry); - - // track bundles containing factories - BlankTransactionServiceTracker blankTransactionServiceTracker = new BlankTransactionServiceTracker(configRegistry); - extenderBundleTracker = new ExtenderBundleTracker(context, blankTransactionServiceTracker); - extenderBundleTracker.open(); + try { + configRegistryJMXRegistrator.registerToJMX(configRegistry); + } catch (InstanceAlreadyExistsException e) { + throw new IllegalStateException("Config Registry was already registered to JMX", e); + } - ServiceTracker serviceTracker = new ServiceTracker(context, ModuleFactory.class, blankTransactionServiceTracker); + ServiceTracker serviceTracker = new ServiceTracker<>(context, ModuleFactory.class, + blankTransactionServiceTracker); serviceTracker.open(); } @Override - public void stop(BundleContext context) throws Exception { + public void stop(BundleContext context) { try { configRegistry.close(); } catch (Exception e) { logger.warn("Exception while closing config registry", e); } try { - extenderBundleTracker.close(); + bundleTracker.close(); } catch (Exception e) { logger.warn("Exception while closing extender", e); } @@ -78,5 +102,10 @@ public class ConfigManagerActivator implements BundleActivator { } catch (Exception e) { logger.warn("Exception while unregistering config registry", e); } + try { + mappingServiceActivator.close(); + } catch (Exception e) { + logger.warn("Exception while closing mapping service", e); + } } }