X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-common-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fcommon%2Futil%2Fjmx%2FAbstractMXBean.java;h=d60623aba09a279e688b255d97855a3fb1cae9b8;hb=6cf8d0045fd9f41dc6fbb32ebee2fc8c2dcf78e2;hp=a2db29d1e81c3d3e505a117bb93cefdd27faf9dc;hpb=1d639169d7afd590f4f756242031768e97d95b61;p=controller.git diff --git a/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/md/sal/common/util/jmx/AbstractMXBean.java b/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/md/sal/common/util/jmx/AbstractMXBean.java index a2db29d1e8..d60623aba0 100644 --- a/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/md/sal/common/util/jmx/AbstractMXBean.java +++ b/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/md/sal/common/util/jmx/AbstractMXBean.java @@ -8,23 +8,23 @@ package org.opendaylight.controller.md.sal.common.util.jmx; +import com.google.common.annotations.Beta; 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.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.annotations.Beta; - /** * Abstract base for an MXBean implementation class. + * *
* 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
@@ -42,29 +42,29 @@ public abstract class AbstractMXBean {
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 name
property in the bean's ObjectName.
- * @param mBeanType Used as the type
property in the bean's ObjectName.
- * @param mBeanCategory Used as the Category
property in the bean's ObjectName.
+ * @param beanName Used as the name
property in the bean's ObjectName.
+ * @param beanType Used as the type
property in the bean's ObjectName.
+ * @param beanCategory Used as the Category
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 +72,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}.
@@ -87,14 +95,13 @@ public abstract class AbstractMXBean {
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) {
-
+ } catch (MBeanRegistrationException | InstanceNotFoundException e) {
LOG.warn("unregister mbean {} resulted in exception {} ", mbeanName, e);
}
}
@@ -102,14 +109,21 @@ public abstract class AbstractMXBean {
registered = true;
LOG.debug("MBean {} registered successfully", mbeanName.getCanonicalName());
- } catch(Exception 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.
*
@@ -121,9 +135,8 @@ public abstract class AbstractMXBean {
ObjectName mbeanName = this.getMBeanObjectName();
unregisterMBean(mbeanName);
unregister = true;
- } catch(Exception e) {
-
- LOG.error("Failed when unregistering MBean {}", e);
+ } catch (MBeanRegistrationException | InstanceNotFoundException | MalformedObjectNameException e) {
+ LOG.debug("Failed when unregistering MBean {}", e);
}
return unregister;
@@ -138,20 +151,20 @@ public abstract class AbstractMXBean {
* Returns the name
property of the bean's ObjectName.
*/
public String getMBeanName() {
- return mBeanName;
+ return beanName;
}
/**
* Returns the type
property of the bean's ObjectName.
*/
public String getMBeanType() {
- return mBeanType;
+ return beanType;
}
/**
* Returns the Category
property of the bean's ObjectName.
*/
public String getMBeanCategory() {
- return mBeanCategory;
+ return beanCategory;
}
}