2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.manager.impl.osgi;
10 import java.lang.management.ManagementFactory;
12 import javax.management.InstanceAlreadyExistsException;
13 import javax.management.MBeanServer;
15 import org.opendaylight.controller.config.manager.impl.ConfigRegistryImpl;
16 import org.opendaylight.controller.config.manager.impl.jmx.ConfigRegistryJMXRegistrator;
17 import org.opendaylight.controller.config.spi.ModuleFactory;
18 import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService;
19 import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry;
20 import org.osgi.framework.BundleActivator;
21 import org.osgi.framework.BundleContext;
22 import org.osgi.framework.ServiceRegistration;
23 import org.osgi.util.tracker.ServiceTracker;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 public class ConfigManagerActivator implements BundleActivator {
28 private static final Logger logger = LoggerFactory
29 .getLogger(ConfigManagerActivator.class);
31 private ExtenderBundleTracker extenderBundleTracker;
32 private ConfigRegistryImpl configRegistry;
33 private ConfigRegistryJMXRegistrator configRegistryJMXRegistrator;
34 private ServiceRegistration configRegistryServiceRegistration;
36 private ServiceTracker<BindingIndependentMappingService, BindingIndependentMappingService> tracker;
39 public void start(BundleContext context) throws Exception {
40 BindingIndependentMappingServiceTracker mappingServiceTracker = new BindingIndependentMappingServiceTracker(
42 tracker = new ServiceTracker<BindingIndependentMappingService, BindingIndependentMappingService>(
43 context, BindingIndependentMappingService.class, mappingServiceTracker);
45 logger.debug("Waiting for codec registry");
50 void initConfigManager(BundleContext context, CodecRegistry codecRegistry) {
51 BundleContextBackedModuleFactoriesResolver bundleContextBackedModuleFactoriesResolver =
52 new BundleContextBackedModuleFactoriesResolver(context);
53 MBeanServer configMBeanServer = ManagementFactory.getPlatformMBeanServer();
56 // TODO push codecRegistry/IdentityCodec to dependencyResolver
58 configRegistry = new ConfigRegistryImpl(
59 bundleContextBackedModuleFactoriesResolver, configMBeanServer, codecRegistry);
61 // register config registry to OSGi
62 configRegistryServiceRegistration = context.registerService(ConfigRegistryImpl.class, configRegistry, null);
64 // register config registry to jmx
65 configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(configMBeanServer);
67 configRegistryJMXRegistrator.registerToJMX(configRegistry);
68 } catch (InstanceAlreadyExistsException e) {
69 throw new RuntimeException("Config Registry was already registered to JMX", e);
72 // track bundles containing factories
73 BlankTransactionServiceTracker blankTransactionServiceTracker = new BlankTransactionServiceTracker(configRegistry);
74 extenderBundleTracker = new ExtenderBundleTracker(context, blankTransactionServiceTracker);
75 extenderBundleTracker.open();
77 ServiceTracker<?, ?> serviceTracker = new ServiceTracker(context, ModuleFactory.class, blankTransactionServiceTracker);
78 serviceTracker.open();
82 public void stop(BundleContext context) throws Exception {
85 } catch (Exception e) {
86 logger.warn("Exception while closing tracker", e);
89 configRegistry.close();
90 } catch (Exception e) {
91 logger.warn("Exception while closing config registry", e);
94 extenderBundleTracker.close();
95 } catch (Exception e) {
96 logger.warn("Exception while closing extender", e);
99 configRegistryJMXRegistrator.close();
100 } catch (Exception e) {
102 "Exception while closing config registry jmx registrator",
106 configRegistryServiceRegistration.unregister();
107 } catch (Exception e) {
108 logger.warn("Exception while unregistering config registry", e);