--- old/src/jdk.snmp/share/classes/sun/management/snmp/jvminstr/JvmThreadingImpl.java 2014-10-15 14:07:01.000000000 +0200 +++ /dev/null 2014-10-15 14:07:01.000000000 +0200 @@ -1,364 +0,0 @@ -/* - * Copyright (c) 2003, 2004, 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.snmp.jvminstr; - -// java imports -// -import java.io.Serializable; - -import java.lang.management.ThreadMXBean; -import java.lang.management.ManagementFactory; - -// jmx imports -// -import javax.management.MBeanServer; -import com.sun.jmx.snmp.SnmpString; -import com.sun.jmx.snmp.SnmpStatusException; - -// jdmk imports -// -import com.sun.jmx.snmp.agent.SnmpMib; -import com.sun.jmx.snmp.SnmpDefinitions; - -import sun.management.snmp.jvmmib.JvmThreadingMBean; -import sun.management.snmp.jvmmib.EnumJvmThreadCpuTimeMonitoring; -import sun.management.snmp.jvmmib.EnumJvmThreadContentionMonitoring; -import sun.management.snmp.util.MibLogger; - -/** - * The class is used for implementing the "JvmThreading" group. - */ -public class JvmThreadingImpl implements JvmThreadingMBean { - - /** - * Variable for storing the value of "JvmThreadCpuTimeMonitoring". - * - * "The state of the Thread CPU Time Monitoring feature. - * This feature can be: - * - * unsupported: The JVM does not support Thread CPU Time Monitoring. - * enabled : The JVM supports Thread CPU Time Monitoring, and it - * is enabled. - * disabled : The JVM supports Thread CPU Time Monitoring, and it - * is disabled. - * - * Only enabled(3) and disabled(4) may be supplied as values to a - * SET request. unsupported(1) can only be set internally by the - * agent. - * - * See java.lang.management.ThreadMXBean.isThreadCpuTimeSupported(), - * java.lang.management.ThreadMXBean.isThreadCpuTimeEnabled(), - * java.lang.management.ThreadMXBean.setThreadCpuTimeEnabled() - * " - * - */ - final static EnumJvmThreadCpuTimeMonitoring - JvmThreadCpuTimeMonitoringUnsupported = - new EnumJvmThreadCpuTimeMonitoring("unsupported"); - final static EnumJvmThreadCpuTimeMonitoring - JvmThreadCpuTimeMonitoringEnabled = - new EnumJvmThreadCpuTimeMonitoring("enabled"); - final static EnumJvmThreadCpuTimeMonitoring - JvmThreadCpuTimeMonitoringDisabled = - new EnumJvmThreadCpuTimeMonitoring("disabled"); - - - /** - * Variable for storing the value of "JvmThreadContentionMonitoring". - * - * "The state of the Thread Contention Monitoring feature. - * This feature can be: - * - * unsupported: The JVM does not support Thread Contention Monitoring. - * enabled : The JVM supports Thread Contention Monitoring, and it - * is enabled. - * disabled : The JVM supports Thread Contention Monitoring, and it - * is disabled. - * - * Only enabled(3) and disabled(4) may be supplied as values to a - * SET request. unsupported(1) can only be set internally by the - * agent. - * - * See java.lang.management.ThreadMXBean.isThreadContentionMonitoringSupported(), - * java.lang.management.ThreadMXBean.isThreadContentionMonitoringEnabled(), - * java.lang.management.ThreadMXBean.setThreadContentionMonitoringEnabled() - * " - * - */ - static final EnumJvmThreadContentionMonitoring - JvmThreadContentionMonitoringUnsupported = - new EnumJvmThreadContentionMonitoring("unsupported"); - static final EnumJvmThreadContentionMonitoring - JvmThreadContentionMonitoringEnabled = - new EnumJvmThreadContentionMonitoring("enabled"); - static final EnumJvmThreadContentionMonitoring - JvmThreadContentionMonitoringDisabled = - new EnumJvmThreadContentionMonitoring("disabled"); - - /** - * Constructor for the "JvmThreading" group. - * If the group contains a table, the entries created through an SNMP SET - * will not be registered in Java DMK. - */ - public JvmThreadingImpl(SnmpMib myMib) { - log.debug("JvmThreadingImpl","Constructor"); - } - - - /** - * Constructor for the "JvmThreading" group. - * If the group contains a table, the entries created through an SNMP SET - * will be AUTOMATICALLY REGISTERED in Java DMK. - */ - public JvmThreadingImpl(SnmpMib myMib, MBeanServer server) { - log.debug("JvmThreadingImpl","Constructor with server"); - } - - /** - * ThreadMXBean accessor. It is acquired from the - * java.lang.management.ManagementFactory - * @return The local ThreadMXBean. - */ - static ThreadMXBean getThreadMXBean() { - return ManagementFactory.getThreadMXBean(); - } - - /** - * Getter for the "JvmThreadCpuTimeMonitoring" variable. - */ - public EnumJvmThreadCpuTimeMonitoring getJvmThreadCpuTimeMonitoring() - throws SnmpStatusException { - - ThreadMXBean mbean = getThreadMXBean(); - - if(!mbean.isThreadCpuTimeSupported()) { - log.debug("getJvmThreadCpuTimeMonitoring", - "Unsupported ThreadCpuTimeMonitoring"); - return JvmThreadCpuTimeMonitoringUnsupported; - } - - try { - if(mbean.isThreadCpuTimeEnabled()) { - log.debug("getJvmThreadCpuTimeMonitoring", - "Enabled ThreadCpuTimeMonitoring"); - return JvmThreadCpuTimeMonitoringEnabled; - } else { - log.debug("getJvmThreadCpuTimeMonitoring", - "Disabled ThreadCpuTimeMonitoring"); - return JvmThreadCpuTimeMonitoringDisabled; - } - }catch(UnsupportedOperationException e) { - log.debug("getJvmThreadCpuTimeMonitoring", - "Newly unsupported ThreadCpuTimeMonitoring"); - - return JvmThreadCpuTimeMonitoringUnsupported; - } - } - - /** - * Setter for the "JvmThreadCpuTimeMonitoring" variable. - */ - public void setJvmThreadCpuTimeMonitoring(EnumJvmThreadCpuTimeMonitoring x) - throws SnmpStatusException { - - ThreadMXBean mbean = getThreadMXBean(); - - // We can trust the received value, it has been checked in - // checkJvmThreadCpuTimeMonitoring - if(JvmThreadCpuTimeMonitoringEnabled.intValue() == x.intValue()) - mbean.setThreadCpuTimeEnabled(true); - else - mbean.setThreadCpuTimeEnabled(false); - } - - /** - * Checker for the "JvmThreadCpuTimeMonitoring" variable. - */ - public void checkJvmThreadCpuTimeMonitoring(EnumJvmThreadCpuTimeMonitoring - x) - throws SnmpStatusException { - - //Can't be set externaly to unsupported state. - if(JvmThreadCpuTimeMonitoringUnsupported.intValue() == x.intValue()) { - log.debug("checkJvmThreadCpuTimeMonitoring", - "Try to set to illegal unsupported value"); - throw new SnmpStatusException(SnmpDefinitions.snmpRspWrongValue); - } - - if ((JvmThreadCpuTimeMonitoringEnabled.intValue() == x.intValue()) || - (JvmThreadCpuTimeMonitoringDisabled.intValue() == x.intValue())) { - - // The value is a valid value. But is the feature supported? - ThreadMXBean mbean = getThreadMXBean(); - if(mbean.isThreadCpuTimeSupported()) return; - - // Not supported. - log.debug("checkJvmThreadCpuTimeMonitoring", - "Unsupported operation, can't set state"); - throw new - SnmpStatusException(SnmpDefinitions.snmpRspInconsistentValue); - } - - // Unknown value. - log.debug("checkJvmThreadCpuTimeMonitoring", - "unknown enum value "); - throw new SnmpStatusException(SnmpDefinitions.snmpRspWrongValue); - } - - /** - * Getter for the "JvmThreadContentionMonitoring" variable. - */ - public EnumJvmThreadContentionMonitoring getJvmThreadContentionMonitoring() - throws SnmpStatusException { - - ThreadMXBean mbean = getThreadMXBean(); - - if(!mbean.isThreadContentionMonitoringSupported()) { - log.debug("getJvmThreadContentionMonitoring", - "Unsupported ThreadContentionMonitoring"); - return JvmThreadContentionMonitoringUnsupported; - } - - if(mbean.isThreadContentionMonitoringEnabled()) { - log.debug("getJvmThreadContentionMonitoring", - "Enabled ThreadContentionMonitoring"); - return JvmThreadContentionMonitoringEnabled; - } else { - log.debug("getJvmThreadContentionMonitoring", - "Disabled ThreadContentionMonitoring"); - return JvmThreadContentionMonitoringDisabled; - } - } - - /** - * Setter for the "JvmThreadContentionMonitoring" variable. - */ - public void setJvmThreadContentionMonitoring( - EnumJvmThreadContentionMonitoring x) - throws SnmpStatusException { - ThreadMXBean mbean = getThreadMXBean(); - - // We can trust the received value, it has been checked in - // checkJvmThreadContentionMonitoring - if(JvmThreadContentionMonitoringEnabled.intValue() == x.intValue()) - mbean.setThreadContentionMonitoringEnabled(true); - else - mbean.setThreadContentionMonitoringEnabled(false); - } - - /** - * Checker for the "JvmThreadContentionMonitoring" variable. - */ - public void checkJvmThreadContentionMonitoring( - EnumJvmThreadContentionMonitoring x) - throws SnmpStatusException { - //Can't be set externaly to unsupported state. - if(JvmThreadContentionMonitoringUnsupported.intValue()==x.intValue()) { - log.debug("checkJvmThreadContentionMonitoring", - "Try to set to illegal unsupported value"); - throw new SnmpStatusException(SnmpDefinitions.snmpRspWrongValue); - } - - if ((JvmThreadContentionMonitoringEnabled.intValue()==x.intValue()) || - (JvmThreadContentionMonitoringDisabled.intValue()==x.intValue())) { - - // The value is valid, but is the feature supported ? - ThreadMXBean mbean = getThreadMXBean(); - if(mbean.isThreadContentionMonitoringSupported()) return; - - log.debug("checkJvmThreadContentionMonitoring", - "Unsupported operation, can't set state"); - throw new - SnmpStatusException(SnmpDefinitions.snmpRspInconsistentValue); - } - - log.debug("checkJvmThreadContentionMonitoring", - "Try to set to unknown value"); - throw new SnmpStatusException(SnmpDefinitions.snmpRspWrongValue); - } - - /** - * Getter for the "JvmThreadTotalStartedCount" variable. - */ - public Long getJvmThreadTotalStartedCount() throws SnmpStatusException { - return getThreadMXBean().getTotalStartedThreadCount(); - } - - /** - * Getter for the "JvmThreadPeakCount" variable. - */ - public Long getJvmThreadPeakCount() throws SnmpStatusException { - return (long)getThreadMXBean().getPeakThreadCount(); - } - - /** - * Getter for the "JvmThreadDaemonCount" variable. - */ - public Long getJvmThreadDaemonCount() throws SnmpStatusException { - return (long)getThreadMXBean().getDaemonThreadCount(); - } - - /** - * Getter for the "JvmThreadCount" variable. - */ - public Long getJvmThreadCount() throws SnmpStatusException { - return (long)getThreadMXBean().getThreadCount(); - } - - /** - * Getter for the "JvmThreadPeakCountReset" variable. - */ - public synchronized Long getJvmThreadPeakCountReset() - throws SnmpStatusException { - return jvmThreadPeakCountReset; - } - - /** - * Setter for the "JvmThreadPeakCountReset" variable. - */ - public synchronized void setJvmThreadPeakCountReset(Long x) - throws SnmpStatusException { - final long l = x.longValue(); - if (l > jvmThreadPeakCountReset) { - final long stamp = System.currentTimeMillis(); - getThreadMXBean().resetPeakThreadCount(); - jvmThreadPeakCountReset = stamp; - log.debug("setJvmThreadPeakCountReset", - "jvmThreadPeakCountReset="+stamp); - } - } - - /** - * Checker for the "JvmThreadPeakCountReset" variable. - */ - public void checkJvmThreadPeakCountReset(Long x) - throws SnmpStatusException { - } - - /* Last time thread peak count was reset */ - private long jvmThreadPeakCountReset=0; - - static final MibLogger log = new MibLogger(JvmThreadingImpl.class); -}