8044473: Allow for extended set of platform MXBeans
Summary: add ExtendedPlatformComponent
Reviewed-by: dfuchs
--- a/jdk/src/java.management/share/classes/java/lang/management/ManagementFactory.java Fri Oct 24 22:54:16 2014 +0000
+++ b/jdk/src/java.management/share/classes/java/lang/management/ManagementFactory.java Fri Sep 05 09:45:13 2014 -0700
@@ -52,6 +52,7 @@
import java.security.PrivilegedExceptionAction;
import javax.management.JMX;
import sun.management.ManagementFactoryHelper;
+import sun.management.ExtendedPlatformComponent;
/**
* The {@code ManagementFactory} class is a factory class for getting
@@ -489,6 +490,12 @@
for (Map.Entry<ObjectName, DynamicMBean> e : dynmbeans.entrySet()) {
addDynamicMBean(platformMBeanServer, e.getValue(), e.getKey());
}
+ for (final PlatformManagedObject o :
+ ExtendedPlatformComponent.getMXBeans()) {
+ if (!platformMBeanServer.isRegistered(o.getObjectName())) {
+ addMXBean(platformMBeanServer, o);
+ }
+ }
}
return platformMBeanServer;
}
@@ -655,9 +662,14 @@
public static <T extends PlatformManagedObject>
T getPlatformMXBean(Class<T> mxbeanInterface) {
PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
- if (pc == null)
+ if (pc == null) {
+ T mbean = ExtendedPlatformComponent.getMXBean(mxbeanInterface);
+ if (mbean != null) {
+ return mbean;
+ }
throw new IllegalArgumentException(mxbeanInterface.getName() +
" is not a platform management interface");
+ }
if (!pc.isSingleton())
throw new IllegalArgumentException(mxbeanInterface.getName() +
" can have zero or more than one instances");
@@ -690,9 +702,14 @@
public static <T extends PlatformManagedObject> List<T>
getPlatformMXBeans(Class<T> mxbeanInterface) {
PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
- if (pc == null)
+ if (pc == null) {
+ T mbean = ExtendedPlatformComponent.getMXBean(mxbeanInterface);
+ if (mbean != null) {
+ return Collections.singletonList(mbean);
+ }
throw new IllegalArgumentException(mxbeanInterface.getName() +
" is not a platform management interface");
+ }
return Collections.unmodifiableList(pc.getMXBeans(mxbeanInterface));
}
@@ -737,9 +754,17 @@
throws java.io.IOException
{
PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
- if (pc == null)
+ if (pc == null) {
+ T mbean = ExtendedPlatformComponent.getMXBean(mxbeanInterface);
+ if (mbean != null) {
+ ObjectName on = mbean.getObjectName();
+ return ManagementFactory.newPlatformMXBeanProxy(connection,
+ on.getCanonicalName(),
+ mxbeanInterface);
+ }
throw new IllegalArgumentException(mxbeanInterface.getName() +
" is not a platform management interface");
+ }
if (!pc.isSingleton())
throw new IllegalArgumentException(mxbeanInterface.getName() +
" can have zero or more than one instances");
@@ -781,6 +806,13 @@
{
PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
if (pc == null) {
+ T mbean = ExtendedPlatformComponent.getMXBean(mxbeanInterface);
+ if (mbean != null) {
+ ObjectName on = mbean.getObjectName();
+ T proxy = ManagementFactory.newPlatformMXBeanProxy(connection,
+ on.getCanonicalName(), mxbeanInterface);
+ return Collections.singletonList(proxy);
+ }
throw new IllegalArgumentException(mxbeanInterface.getName() +
" is not a platform management interface");
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.management/share/classes/sun/management/ExtendedPlatformComponent.java Fri Sep 05 09:45:13 2014 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.management;
+
+import java.util.Collections;
+import java.util.List;
+import java.lang.management.PlatformManagedObject;
+
+/**
+ * Class to allow for an extended set of platform MXBeans
+ */
+public final class ExtendedPlatformComponent {
+ private ExtendedPlatformComponent() {} // Don't create any instances
+
+ /**
+ * Get the extended set of platform MXBeans that should be registered in the
+ * platform MBeanServer, or an empty list if there are no such MXBeans.
+ */
+ public static List<? extends PlatformManagedObject> getMXBeans() {
+ return Collections.emptyList();
+ }
+
+ /**
+ * Returns the extended platform MXBean implementing the given
+ * mxbeanInterface, or null if there is no such MXBean.
+ */
+ public static <T extends PlatformManagedObject>
+ T getMXBean(Class<T> mxbeanInterface) {
+ return null;
+ }
+}