diff -r 746229cc1ab0 -r cc29d7717e3a test/hotspot/jtreg/vmTestbase/nsk/monitoring/share/RuntimeMonitor.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/monitoring/share/RuntimeMonitor.java Wed May 02 16:43:56 2018 -0700
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2003, 2018, 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.
+ *
+ * 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 nsk.monitoring.share;
+
+import java.lang.management.*;
+import javax.management.*;
+import nsk.share.*;
+
+/**
+ * RuntimeMonitor
class is a wrapper of RuntimeMXBean
.
+ * Depending on command line arguments, an instance of this class redirects
+ * invocations to the RuntimeMXBean
interface. If
+ * -testMode="directly"
option is set, this instance directly
+ * invokes corresponding method of the RuntimeMXBean
interface. If
+ * -testMode="server"
option is set it will make invocations via
+ * MBeanServer. If -testMode="proxy"
option is set it will make
+ * invocations via MBeanServer proxy.
+ *
+ * @see ArgumentHandler
+ */
+public class RuntimeMonitor extends Monitor {
+ // An instance of ClassLoadingMBean
+ private final static RuntimeMXBean mbean
+ = ManagementFactory.getRuntimeMXBean();
+
+ // Name of an attribute of RuntimeMonitor
+ private static final String IS_BOOT = "BootClassPathSupported";
+
+ private RuntimeMXBean proxyInstance;
+
+ static {
+ Monitor.logPrefix = "RuntimeMonitor> ";
+ }
+
+ /**
+ * Creates a new RuntimeMonitor
object.
+ *
+ * @param log Log
object to print info to.
+ * @param argumentHandler ArgumentHandler
object that saves
+ * all info about test's arguments.
+ *
+ */
+ public RuntimeMonitor(Log log, ArgumentHandler argumentHandler) {
+ super(log, argumentHandler);
+ }
+
+ /**
+ *
+ * Return a proxy instance for a platform
+ * {@link java.lang.management.RuntimeMXBean
+ * RuntimeMXBean
} interface.
+ *
+ */
+ RuntimeMXBean getProxy() {
+ if (proxyInstance == null) {
+ // create proxy instance
+ try {
+ proxyInstance = (RuntimeMXBean)
+ ManagementFactory.newPlatformMXBeanProxy(
+ getMBeanServer(),
+ ManagementFactory.RUNTIME_MXBEAN_NAME,
+ RuntimeMXBean.class
+ );
+ } catch (java.io.IOException e) {
+ throw new Failure(e);
+ }
+ }
+ return proxyInstance;
+ }
+
+ /**
+ * Redirects the invocation to
+ * {@link java.lang.management.RuntimeMXBean#isBootClassPathSupported()
+ * RuntimeMXBean.isBootClassPathSupported()
}.
+ *
+ * @return true
, if the JVM supports the class path mechanism;
+ * flase
otherwise.
+ */
+ public boolean isBootClassPathSupported() {
+ int mode = getTestMode();
+
+ switch (mode) {
+ case DIRECTLY_MODE:
+ return mbean.isBootClassPathSupported();
+
+ case SERVER_MODE:
+ return getBooleanAttribute(mbeanObjectName, IS_BOOT);
+
+ case PROXY_MODE:
+ return getProxy().isBootClassPathSupported();
+ }
+
+ throw new TestBug("Unknown testMode " + mode);
+ }
+} // RuntimeMonitor