]> source.dussan.org Git - jgit.git/commitdiff
Fix MBean registration 94/154494/1
authorMatthias Sohn <matthias.sohn@sap.com>
Fri, 13 Dec 2019 16:32:51 +0000 (17:32 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Fri, 13 Dec 2019 16:32:51 +0000 (17:32 +0100)
Change-Id: I6f6b8641f6c3e8ab9f625594085014272305656a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCache.java
org.eclipse.jgit/src/org/eclipse/jgit/util/Monitoring.java

index 6cf5bd948aee354048fbd34a94d1fe234b5a42c6..797507dd119c5c49ab1b7671e220cef239d2f964 100644 (file)
@@ -458,7 +458,7 @@ public class WindowCache {
 
                mbean = new StatsRecorderImpl();
                statsRecorder = mbean;
-               Monitoring.registerMBean(WindowCacheStats.class, "block_cache"); //$NON-NLS-1$
+               Monitoring.registerMBean(mbean, "block_cache"); //$NON-NLS-1$
 
                if (maxFiles < 1)
                        throw new IllegalArgumentException(JGitText.get().openFilesMustBeAtLeast1);
index a3c8f3e047a9af1146d3001db6f58344fd6d319d..83bf695f70b2abf3f1af7f86e7745d48aa552c0d 100644 (file)
@@ -39,19 +39,26 @@ public class Monitoring {
         * Register a MBean with the platform MBean server
         *
         * @param mbean
-        *            the mbean interface to register
+        *            the mbean object to register
         * @param metricName
         *            name of the JGit metric, will be prefixed with
         *            "org.eclipse.jgit/"
         * @return the registered mbean's object instance
         */
-       public static @Nullable ObjectInstance registerMBean(Class mbean,
+       public static @Nullable ObjectInstance registerMBean(Object mbean,
                        String metricName) {
-               boolean register;
+               boolean register = false;
                try {
-                       register = SystemReader.getInstance().getUserConfig().getBoolean(
+                       Class<?> interfaces[] = mbean.getClass().getInterfaces();
+                       for (Class<?> i : interfaces) {
+                               register = SystemReader.getInstance().getUserConfig()
+                                               .getBoolean(
                                        ConfigConstants.CONFIG_JMX_SECTION,
-                                       mbean.getSimpleName(), false);
+                                                               i.getSimpleName(), false);
+                               if (register) {
+                                       break;
+                               }
+                       }
                } catch (IOException | ConfigInvalidException e) {
                        LOG.error(e.getMessage(), e);
                        return null;
@@ -61,7 +68,7 @@ public class Monitoring {
                }
                MBeanServer server = ManagementFactory.getPlatformMBeanServer();
                try {
-                       ObjectName mbeanName = objectName(mbean, metricName);
+                       ObjectName mbeanName = objectName(mbean.getClass(), metricName);
                        if (server.isRegistered(mbeanName)) {
                                server.unregisterMBean(mbeanName);
                        }