From 7a42cf963d2e289dbd66a094b419077db0c6fdba Mon Sep 17 00:00:00 2001 From: bchristi Date: Fri, 27 Jun 2014 12:17:58 -0700 Subject: [PATCH] 8044473: Allow for extended set of platform MXBeans Summary: add ExtendedPlatformComponent Reviewed-by: dfuchs --- make/CompileJavaClasses.gmk | 3 +- .../lang/management/ManagementFactory.java | 38 +++++++++++-- .../management/ExtendedPlatformComponent.java | 54 +++++++++++++++++++ 3 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 src/share/classes/sun/management/ExtendedPlatformComponent.java diff --git a/make/CompileJavaClasses.gmk b/make/CompileJavaClasses.gmk index e4c7b3aea..d7d565cf0 100644 --- a/make/CompileJavaClasses.gmk +++ b/make/CompileJavaClasses.gmk @@ -52,8 +52,9 @@ ifdef OPENJDK endif ifndef OPENJDK - # There exists two versions of this file... + # There exists two versions of these files... EXFILES := $(JDK_TOPDIR)/src/share/classes/javax/crypto/JarVerifier.java + EXFILES += $(JDK_TOPDIR)/src/share/classes/sun/management/ExtendedPlatformComponent.java ifeq ($(OPENJDK_TARGET_OS), windows) # This gets built on unix platforms implicitly in the old build even though diff --git a/src/share/classes/java/lang/management/ManagementFactory.java b/src/share/classes/java/lang/management/ManagementFactory.java index 0c7297abe..c44471354 100644 --- a/src/share/classes/java/lang/management/ManagementFactory.java +++ b/src/share/classes/java/lang/management/ManagementFactory.java @@ -52,6 +52,7 @@ import java.security.PrivilegedActionException; 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 @@ public class ManagementFactory { for (Map.Entry 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 class ManagementFactory { public static T getPlatformMXBean(Class 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 class ManagementFactory { public static List getPlatformMXBeans(Class 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 @@ public class ManagementFactory { 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 @@ public class ManagementFactory { { 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"); } diff --git a/src/share/classes/sun/management/ExtendedPlatformComponent.java b/src/share/classes/sun/management/ExtendedPlatformComponent.java new file mode 100644 index 000000000..ff33ff9b5 --- /dev/null +++ b/src/share/classes/sun/management/ExtendedPlatformComponent.java @@ -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 getMXBeans() { + return Collections.emptyList(); + } + + /** + * Returns the extended platform MXBean implementing the given + * mxbeanInterface, or null if there is no such MXBean. + */ + public static + T getMXBean(Class mxbeanInterface) { + return null; + } +} -- GitLab