/*
 * 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.
/** * 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() "
/** * 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() "
/** * 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.
/** * 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.
/** * 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
Returns:The local ThreadMXBean.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * Getter for the "JvmThreadTotalStartedCount" variable. */
public Long getJvmThreadTotalStartedCount() throws SnmpStatusException { return new Long(getThreadMXBean().getTotalStartedThreadCount()); }
Getter for the "JvmThreadPeakCount" variable.
/** * Getter for the "JvmThreadPeakCount" variable. */
public Long getJvmThreadPeakCount() throws SnmpStatusException { return new Long(getThreadMXBean().getPeakThreadCount()); }
Getter for the "JvmThreadDaemonCount" variable.
/** * Getter for the "JvmThreadDaemonCount" variable. */
public Long getJvmThreadDaemonCount() throws SnmpStatusException { return new Long(getThreadMXBean().getDaemonThreadCount()); }
Getter for the "JvmThreadCount" variable.
/** * Getter for the "JvmThreadCount" variable. */
public Long getJvmThreadCount() throws SnmpStatusException { return new Long(getThreadMXBean().getThreadCount()); }
Getter for the "JvmThreadPeakCountReset" variable.
/** * Getter for the "JvmThreadPeakCountReset" variable. */
public synchronized Long getJvmThreadPeakCountReset() throws SnmpStatusException { return new Long(jvmThreadPeakCountReset); }
Setter for the "JvmThreadPeakCountReset" variable.
/** * 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.
/** * 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); }