Reduce verbosity/criticality of inconsistent yangstore messages
[controller.git] / opendaylight / config / config-manager / src / main / java / org / opendaylight / controller / config / manager / impl / osgi / ConfigManagerActivator.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.config.manager.impl.osgi;
9
10 import java.lang.management.ManagementFactory;
11
12 import javax.management.InstanceAlreadyExistsException;
13 import javax.management.MBeanServer;
14
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;
26
27 public class ConfigManagerActivator implements BundleActivator {
28     private static final Logger logger = LoggerFactory
29             .getLogger(ConfigManagerActivator.class);
30
31     private ExtenderBundleTracker extenderBundleTracker;
32     private ConfigRegistryImpl configRegistry;
33     private ConfigRegistryJMXRegistrator configRegistryJMXRegistrator;
34     private ServiceRegistration configRegistryServiceRegistration;
35
36     private ServiceTracker<BindingIndependentMappingService, BindingIndependentMappingService> tracker;
37
38     @Override
39     public void start(BundleContext context) throws Exception {
40         BindingIndependentMappingServiceTracker mappingServiceTracker = new BindingIndependentMappingServiceTracker(
41                 context, this);
42         tracker = new ServiceTracker<BindingIndependentMappingService, BindingIndependentMappingService>(
43                 context, BindingIndependentMappingService.class, mappingServiceTracker);
44
45         logger.debug("Waiting for codec registry");
46
47         tracker.open();
48     }
49
50     void initConfigManager(BundleContext context, CodecRegistry codecRegistry) {
51         BundleContextBackedModuleFactoriesResolver bundleContextBackedModuleFactoriesResolver =
52                 new BundleContextBackedModuleFactoriesResolver(context);
53         MBeanServer configMBeanServer = ManagementFactory.getPlatformMBeanServer();
54
55
56         // TODO push codecRegistry/IdentityCodec to dependencyResolver
57
58         configRegistry = new ConfigRegistryImpl(
59                 bundleContextBackedModuleFactoriesResolver, configMBeanServer);
60
61         // register config registry to OSGi
62         configRegistryServiceRegistration = context.registerService(ConfigRegistryImpl.class, configRegistry, null);
63
64         // register config registry to jmx
65         configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(configMBeanServer);
66         try {
67             configRegistryJMXRegistrator.registerToJMX(configRegistry);
68         } catch (InstanceAlreadyExistsException e) {
69             throw new RuntimeException("Config Registry was already registered to JMX", e);
70         }
71
72         // track bundles containing factories
73         BlankTransactionServiceTracker blankTransactionServiceTracker = new BlankTransactionServiceTracker(configRegistry);
74         extenderBundleTracker = new ExtenderBundleTracker(context, blankTransactionServiceTracker);
75         extenderBundleTracker.open();
76
77         ServiceTracker<?, ?> serviceTracker = new ServiceTracker(context, ModuleFactory.class, blankTransactionServiceTracker);
78         serviceTracker.open();
79     }
80
81     @Override
82     public void stop(BundleContext context) throws Exception {
83         try {
84             tracker.close();
85         } catch (Exception e) {
86             logger.warn("Exception while closing tracker", e);
87         }
88         try {
89             configRegistry.close();
90         } catch (Exception e) {
91             logger.warn("Exception while closing config registry", e);
92         }
93         try {
94             extenderBundleTracker.close();
95         } catch (Exception e) {
96             logger.warn("Exception while closing extender", e);
97         }
98         try {
99             configRegistryJMXRegistrator.close();
100         } catch (Exception e) {
101             logger.warn(
102                     "Exception while closing config registry jmx registrator",
103                     e);
104         }
105         try {
106             configRegistryServiceRegistration.unregister();
107         } catch (Exception e) {
108             logger.warn("Exception while unregistering config registry", e);
109         }
110     }
111 }