2 * Copyright (c) 2014 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
10 package org.opendaylight.controller.cluster.datastore.jmx.mbeans;
13 import com.google.common.base.Preconditions;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
17 import javax.management.InstanceNotFoundException;
18 import javax.management.MBeanRegistrationException;
19 import javax.management.MBeanServer;
20 import javax.management.MalformedObjectNameException;
21 import javax.management.ObjectName;
22 import java.lang.management.ManagementFactory;
25 * All MBeans should extend this class that help in registering and
26 * unregistering the MBeans.
31 public abstract class AbstractBaseMBean {
34 public static String BASE_JMX_PREFIX = "org.opendaylight.controller:";
35 public static String JMX_TYPE_DISTRIBUTED_DATASTORE = "DistributedDatastore";
36 public static String JMX_CATEGORY_SHARD = "Shard";
38 private static final Logger LOG = LoggerFactory
39 .getLogger(AbstractBaseMBean.class);
41 MBeanServer server = ManagementFactory.getPlatformMBeanServer();
43 * gets the MBean ObjectName
45 * @return Object name of the MBean
46 * @throws MalformedObjectNameException - The bean name does not have the right format.
47 * @throws NullPointerException - The bean name is null
49 protected ObjectName getMBeanObjectName()
50 throws MalformedObjectNameException, NullPointerException {
51 String name = BASE_JMX_PREFIX + "type="+getMBeanType()+",Category="+
52 getMBeanCategory() + ",name="+
56 return new ObjectName(name);
59 public boolean registerMBean() {
60 boolean registered = false;
62 // Object to identify MBean
63 final ObjectName mbeanName = this.getMBeanObjectName();
65 Preconditions.checkArgument(mbeanName != null,
66 "Object name of the MBean cannot be null");
68 LOG.debug("Register MBean {}", mbeanName);
70 // unregistered if already registered
71 if (server.isRegistered(mbeanName)) {
73 LOG.debug("MBean {} found to be already registered", mbeanName);
76 unregisterMBean(mbeanName);
77 } catch (Exception e) {
79 LOG.warn("unregister mbean {} resulted in exception {} ", mbeanName,
83 server.registerMBean(this, mbeanName);
85 LOG.debug("MBean {} registered successfully",
86 mbeanName.getCanonicalName());
88 } catch (Exception e) {
90 LOG.error("registration failed {}", e);
97 public boolean unregisterMBean() {
98 boolean unregister = false;
100 ObjectName mbeanName = this.getMBeanObjectName();
102 unregisterMBean(mbeanName);
103 } catch (Exception e) {
105 LOG.error("Failed when unregistering MBean {}", e);
110 private void unregisterMBean(ObjectName mbeanName)
111 throws MBeanRegistrationException, InstanceNotFoundException {
113 server.unregisterMBean(mbeanName);
119 * @return name of bean
121 protected abstract String getMBeanName();
124 * @return type of the MBean
126 protected abstract String getMBeanType();
130 * @return Category name of teh bean
132 protected abstract String getMBeanCategory();
134 //require for test cases
135 public MBeanServer getMBeanServer() {