提交 7a42cf96 编写于 作者: B bchristi

8044473: Allow for extended set of platform MXBeans

Summary: add ExtendedPlatformComponent
Reviewed-by: dfuchs
上级 ef550c80
...@@ -52,8 +52,9 @@ ifdef OPENJDK ...@@ -52,8 +52,9 @@ ifdef OPENJDK
endif endif
ifndef OPENJDK 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/javax/crypto/JarVerifier.java
EXFILES += $(JDK_TOPDIR)/src/share/classes/sun/management/ExtendedPlatformComponent.java
ifeq ($(OPENJDK_TARGET_OS), windows) ifeq ($(OPENJDK_TARGET_OS), windows)
# This gets built on unix platforms implicitly in the old build even though # This gets built on unix platforms implicitly in the old build even though
......
...@@ -52,6 +52,7 @@ import java.security.PrivilegedActionException; ...@@ -52,6 +52,7 @@ import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction; import java.security.PrivilegedExceptionAction;
import javax.management.JMX; import javax.management.JMX;
import sun.management.ManagementFactoryHelper; import sun.management.ManagementFactoryHelper;
import sun.management.ExtendedPlatformComponent;
/** /**
* The {@code ManagementFactory} class is a factory class for getting * The {@code ManagementFactory} class is a factory class for getting
...@@ -489,6 +490,12 @@ public class ManagementFactory { ...@@ -489,6 +490,12 @@ public class ManagementFactory {
for (Map.Entry<ObjectName, DynamicMBean> e : dynmbeans.entrySet()) { for (Map.Entry<ObjectName, DynamicMBean> e : dynmbeans.entrySet()) {
addDynamicMBean(platformMBeanServer, e.getValue(), e.getKey()); addDynamicMBean(platformMBeanServer, e.getValue(), e.getKey());
} }
for (final PlatformManagedObject o :
ExtendedPlatformComponent.getMXBeans()) {
if (!platformMBeanServer.isRegistered(o.getObjectName())) {
addMXBean(platformMBeanServer, o);
}
}
} }
return platformMBeanServer; return platformMBeanServer;
} }
...@@ -655,9 +662,14 @@ public class ManagementFactory { ...@@ -655,9 +662,14 @@ public class ManagementFactory {
public static <T extends PlatformManagedObject> public static <T extends PlatformManagedObject>
T getPlatformMXBean(Class<T> mxbeanInterface) { T getPlatformMXBean(Class<T> mxbeanInterface) {
PlatformComponent pc = PlatformComponent.getPlatformComponent(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() + throw new IllegalArgumentException(mxbeanInterface.getName() +
" is not a platform management interface"); " is not a platform management interface");
}
if (!pc.isSingleton()) if (!pc.isSingleton())
throw new IllegalArgumentException(mxbeanInterface.getName() + throw new IllegalArgumentException(mxbeanInterface.getName() +
" can have zero or more than one instances"); " can have zero or more than one instances");
...@@ -690,9 +702,14 @@ public class ManagementFactory { ...@@ -690,9 +702,14 @@ public class ManagementFactory {
public static <T extends PlatformManagedObject> List<T> public static <T extends PlatformManagedObject> List<T>
getPlatformMXBeans(Class<T> mxbeanInterface) { getPlatformMXBeans(Class<T> mxbeanInterface) {
PlatformComponent pc = PlatformComponent.getPlatformComponent(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() + throw new IllegalArgumentException(mxbeanInterface.getName() +
" is not a platform management interface"); " is not a platform management interface");
}
return Collections.unmodifiableList(pc.getMXBeans(mxbeanInterface)); return Collections.unmodifiableList(pc.getMXBeans(mxbeanInterface));
} }
...@@ -737,9 +754,17 @@ public class ManagementFactory { ...@@ -737,9 +754,17 @@ public class ManagementFactory {
throws java.io.IOException throws java.io.IOException
{ {
PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface); 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() + throw new IllegalArgumentException(mxbeanInterface.getName() +
" is not a platform management interface"); " is not a platform management interface");
}
if (!pc.isSingleton()) if (!pc.isSingleton())
throw new IllegalArgumentException(mxbeanInterface.getName() + throw new IllegalArgumentException(mxbeanInterface.getName() +
" can have zero or more than one instances"); " can have zero or more than one instances");
...@@ -781,6 +806,13 @@ public class ManagementFactory { ...@@ -781,6 +806,13 @@ public class ManagementFactory {
{ {
PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface); PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
if (pc == null) { 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() + throw new IllegalArgumentException(mxbeanInterface.getName() +
" is not a platform management interface"); " is not a platform management interface");
} }
......
/*
* 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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册