Promote AbstractMXBean
[controller.git] / opendaylight / md-sal / sal-common-util / src / main / java / org / opendaylight / controller / md / sal / common / util / jmx / AbstractMXBean.java
index a2db29d1e81c3d3e505a117bb93cefdd27faf9dc..53d7a2f22a95b65d003a4a2d7e836bc100162143 100644 (file)
@@ -5,26 +5,24 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.controller.md.sal.common.util.jmx;
 
 import java.lang.management.ManagementFactory;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import javax.management.InstanceAlreadyExistsException;
 import javax.management.InstanceNotFoundException;
 import javax.management.MBeanRegistrationException;
 import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
-
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.annotations.Beta;
-
 /**
  * Abstract base for an MXBean implementation class.
+ *
  * <p>
  * This class is not intended for use outside of MD-SAL and its part of private
  * implementation (still exported as public to be reused across MD-SAL implementation
@@ -33,38 +31,36 @@ import com.google.common.annotations.Beta;
  *
  * @author Thomas Pantelis
  */
-@Beta
 public abstract class AbstractMXBean {
-
     private static final Logger LOG = LoggerFactory.getLogger(AbstractMXBean.class);
 
-    public static String BASE_JMX_PREFIX = "org.opendaylight.controller:";
+    public static final String BASE_JMX_PREFIX = "org.opendaylight.controller:";
 
     private final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
 
-    private final String mBeanName;
-    private final String mBeanType;
-    private final String mBeanCategory;
+    private final String beanName;
+    private final String beanType;
+    private final String beanCategory;
 
     /**
      * Constructor.
      *
-     * @param mBeanName Used as the <code>name</code> property in the bean's ObjectName.
-     * @param mBeanType Used as the <code>type</code> property in the bean's ObjectName.
-     * @param mBeanCategory Used as the <code>Category</code> property in the bean's ObjectName.
+     * @param beanName Used as the <code>name</code> property in the bean's ObjectName.
+     * @param beanType Used as the <code>type</code> property in the bean's ObjectName.
+     * @param beanCategory Used as the <code>Category</code> property in the bean's ObjectName.
      */
-    protected AbstractMXBean(@Nonnull String mBeanName, @Nonnull String mBeanType,
-            @Nullable String mBeanCategory) {
-        this.mBeanName = mBeanName;
-        this.mBeanType = mBeanType;
-        this.mBeanCategory = mBeanCategory;
+    protected AbstractMXBean(@NonNull String beanName, @NonNull String beanType,
+            @Nullable String beanCategory) {
+        this.beanName = beanName;
+        this.beanType = beanType;
+        this.beanCategory = beanCategory;
     }
 
     private ObjectName getMBeanObjectName() throws MalformedObjectNameException {
         StringBuilder builder = new StringBuilder(BASE_JMX_PREFIX)
                 .append("type=").append(getMBeanType());
 
-        if(getMBeanCategory() != null) {
+        if (getMBeanCategory() != null) {
             builder.append(",Category=").append(getMBeanCategory());
         }
 
@@ -72,6 +68,14 @@ public abstract class AbstractMXBean {
         return new ObjectName(builder.toString());
     }
 
+    /**
+     * This method is a wrapper for registerMBean with void return type so it can be invoked by dependency
+     * injection frameworks such as Spring and Blueprint.
+     */
+    public void register() {
+        registerMBean();
+    }
+
     /**
      * Registers this bean with the platform MBean server with the domain defined by
      * {@link #BASE_JMX_PREFIX}.
@@ -82,51 +86,53 @@ public abstract class AbstractMXBean {
         boolean registered = false;
         try {
             // Object to identify MBean
-            final ObjectName mbeanName = this.getMBeanObjectName();
+            final ObjectName mbeanName = getMBeanObjectName();
 
             LOG.debug("Register MBean {}", mbeanName);
 
             // unregistered if already registered
-            if(server.isRegistered(mbeanName)) {
+            if (server.isRegistered(mbeanName)) {
 
                 LOG.debug("MBean {} found to be already registered", mbeanName);
 
                 try {
                     unregisterMBean(mbeanName);
-                } catch(Exception e) {
-
-                    LOG.warn("unregister mbean {} resulted in exception {} ", mbeanName, e);
+                } catch (MBeanRegistrationException | InstanceNotFoundException e) {
+                    LOG.warn("unregister mbean {} resulted in exception", mbeanName, e);
                 }
             }
             server.registerMBean(this, mbeanName);
             registered = true;
 
             LOG.debug("MBean {} registered successfully", mbeanName.getCanonicalName());
-        } catch(Exception e) {
-
-            LOG.error("registration failed {}", e);
-
+        } catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException
+                | MalformedObjectNameException e) {
+            LOG.error("registration failed", e);
         }
         return registered;
     }
 
+    /**
+     * This method is a wrapper for unregisterMBean with void return type so it can be invoked by dependency
+     * injection frameworks such as Spring and Blueprint.
+     */
+    public void unregister() {
+        unregisterMBean();
+    }
+
     /**
      * Unregisters this bean with the platform MBean server.
      *
      * @return true is successfully unregistered, false otherwise.
      */
     public boolean unregisterMBean() {
-        boolean unregister = false;
         try {
-            ObjectName mbeanName = this.getMBeanObjectName();
-            unregisterMBean(mbeanName);
-            unregister = true;
-        } catch(Exception e) {
-
-            LOG.error("Failed when unregistering MBean {}", e);
+            unregisterMBean(getMBeanObjectName());
+            return true;
+        } catch (MBeanRegistrationException | InstanceNotFoundException | MalformedObjectNameException e) {
+            LOG.debug("Failed when unregistering MBean", e);
+            return false;
         }
-
-        return unregister;
     }
 
     private void unregisterMBean(ObjectName mbeanName) throws MBeanRegistrationException,
@@ -138,20 +144,20 @@ public abstract class AbstractMXBean {
      * Returns the <code>name</code> property of the bean's ObjectName.
      */
     public String getMBeanName() {
-        return mBeanName;
+        return beanName;
     }
 
     /**
      * Returns the <code>type</code> property of the bean's ObjectName.
      */
     public String getMBeanType() {
-        return mBeanType;
+        return beanType;
     }
 
     /**
      * Returns the <code>Category</code> property of the bean's ObjectName.
      */
     public String getMBeanCategory() {
-        return mBeanCategory;
+        return beanCategory;
     }
 }