X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fosgi%2FConfigManagerActivator.java;h=308b137403fad9ec60b671813c752ebacf083629;hb=94b968f7454a2d677b1ac8fc4a81c10ecca03fa3;hp=e4e070885c44559336103542a6af269239313d60;hpb=065ef4acddbae75329e75562c533120d2d615efe;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 e4e070885c..308b137403 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 @@ -7,105 +7,86 @@ */ 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.manager.impl.osgi.mapping.CodecRegistryProvider; +import org.opendaylight.controller.config.manager.impl.osgi.mapping.ModuleInfoBundleTracker; +import org.opendaylight.controller.config.manager.impl.osgi.mapping.RefreshingSCPModuleInfoRegistry; +import org.opendaylight.controller.config.manager.impl.util.OsgiRegistrationUtil; 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.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext; +import org.opendaylight.yangtools.yang.binding.YangModuleInfo; 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; -public class ConfigManagerActivator implements BundleActivator { - private static final Logger logger = LoggerFactory - .getLogger(ConfigManagerActivator.class); +import javax.management.InstanceAlreadyExistsException; +import javax.management.MBeanServer; +import java.lang.management.ManagementFactory; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; - private ExtenderBundleTracker extenderBundleTracker; - private ConfigRegistryImpl configRegistry; - private ConfigRegistryJMXRegistrator configRegistryJMXRegistrator; - private ServiceRegistration configRegistryServiceRegistration; +import static org.opendaylight.controller.config.manager.impl.util.OsgiRegistrationUtil.registerService; +import static org.opendaylight.controller.config.manager.impl.util.OsgiRegistrationUtil.wrap; + +public class ConfigManagerActivator implements BundleActivator { + private final MBeanServer configMBeanServer = ManagementFactory.getPlatformMBeanServer(); - private ServiceTracker tracker; + private AutoCloseable autoCloseable; @Override - public void start(BundleContext context) throws Exception { - BindingIndependentMappingServiceTracker mappingServiceTracker = new BindingIndependentMappingServiceTracker( - context, this); - tracker = new ServiceTracker( - context, BindingIndependentMappingService.class, mappingServiceTracker); + public void start(BundleContext context) { - logger.debug("Waiting for codec registry"); + ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();// the inner strategy is backed by thread context cl? - tracker.open(); - } + RefreshingSCPModuleInfoRegistry moduleInfoRegistryWrapper = new RefreshingSCPModuleInfoRegistry( + moduleInfoBackedContext, moduleInfoBackedContext, context); + + ModuleInfoBundleTracker moduleInfoBundleTracker = new ModuleInfoBundleTracker(moduleInfoRegistryWrapper); - void initConfigManager(BundleContext context, CodecRegistry codecRegistry) { - BundleContextBackedModuleFactoriesResolver bundleContextBackedModuleFactoriesResolver = - new BundleContextBackedModuleFactoriesResolver(context); - MBeanServer configMBeanServer = ManagementFactory.getPlatformMBeanServer(); + CodecRegistryProvider codecRegistryProvider = new CodecRegistryProvider(moduleInfoBackedContext, context); + // start config registry + BundleContextBackedModuleFactoriesResolver bundleContextBackedModuleFactoriesResolver = new BundleContextBackedModuleFactoriesResolver( + context); + ConfigRegistryImpl configRegistry = new ConfigRegistryImpl(bundleContextBackedModuleFactoriesResolver, configMBeanServer, + codecRegistryProvider.getCodecRegistry()); - // TODO push codecRegistry/IdentityCodec to dependencyResolver + // track bundles containing factories + BlankTransactionServiceTracker blankTransactionServiceTracker = new BlankTransactionServiceTracker( + configRegistry); + ModuleFactoryBundleTracker moduleFactoryBundleTracker = new ModuleFactoryBundleTracker( + blankTransactionServiceTracker); - configRegistry = new ConfigRegistryImpl( - bundleContextBackedModuleFactoriesResolver, configMBeanServer, codecRegistry); + // start extensible tracker + ExtensibleBundleTracker>> bundleTracker = new ExtensibleBundleTracker<>(context, moduleInfoBundleTracker, moduleFactoryBundleTracker); + bundleTracker.open(); // register config registry to OSGi - configRegistryServiceRegistration = context.registerService(ConfigRegistryImpl.class, configRegistry, null); + AutoCloseable configRegReg = registerService(context, configRegistry, ConfigRegistryImpl.class); // register config registry to jmx - configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(configMBeanServer); + ConfigRegistryJMXRegistrator configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(configMBeanServer); try { configRegistryJMXRegistrator.registerToJMX(configRegistry); } catch (InstanceAlreadyExistsException e) { - throw new RuntimeException("Config Registry was already registered to JMX", e); + throw new IllegalStateException("Config Registry was already registered to JMX", e); } - // track bundles containing factories - BlankTransactionServiceTracker blankTransactionServiceTracker = new BlankTransactionServiceTracker(configRegistry); - extenderBundleTracker = new ExtenderBundleTracker(context, blankTransactionServiceTracker); - extenderBundleTracker.open(); - - ServiceTracker serviceTracker = new ServiceTracker(context, ModuleFactory.class, blankTransactionServiceTracker); + // TODO wire directly via moduleInfoBundleTracker + ServiceTracker serviceTracker = new ServiceTracker<>(context, ModuleFactory.class, + blankTransactionServiceTracker); serviceTracker.open(); + + List list = Arrays.asList( + codecRegistryProvider, configRegistry, wrap(bundleTracker), configRegReg, configRegistryJMXRegistrator, wrap(serviceTracker)); + autoCloseable = OsgiRegistrationUtil.aggregate(list); } @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) { - logger.warn("Exception while closing config registry", e); - } - try { - extenderBundleTracker.close(); - } catch (Exception e) { - logger.warn("Exception while closing extender", e); - } - try { - configRegistryJMXRegistrator.close(); - } catch (Exception e) { - logger.warn( - "Exception while closing config registry jmx registrator", - e); - } - try { - configRegistryServiceRegistration.unregister(); - } catch (Exception e) { - logger.warn("Exception while unregistering config registry", e); - } + autoCloseable.close(); } }