/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* 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.
*/
// java imports
//
// jmx imports
//
// jdmk imports
//
/**
* The class is used for implementing the "JvmThreadInstanceTable" group.
*/
public class JvmThreadInstanceTableMetaImpl
extends JvmThreadInstanceTableMeta {
/**
* Maximum depth of the stacktrace that might be returned through
* SNMP.
*
* Since we do not export the stack trace through SNMP, we set
* MAX_STACK_TRACE_DEPTH=0 so that ThreadMXBean.getThreadInfo(long) does
* not compute the stack trace.
*
**/
/**
* Translate from a long to a Oid. Arc follow the long big-endian order.
* @param l The long to make the index from
* @return The arc array.
*/
long[] x = new long [8];
x[0] = (l >> 56) & 0xFF;
x[1] = (l >> 48) & 0x00FF;
x[2] = (l >> 40) & 0x0000FF;
x[3] = (l >> 32) & 0x000000FF;
x[4] = (l >> 24) & 0x00000000FF;
x[5] = (l >> 16) & 0x0000000000FF;
x[6] = (l >> 8) & 0x000000000000FF;
x[7] = l & 0x00000000000000FF;
return new SnmpOid(x);
}
/**
* Translate an Oid to a thread id. Arc follow the long big-endian order.
* @param oid The oid to make the id from
* @return The thread id.
*/
long id = 0;
return id;
}
/**
* A concrete implementation of {@link SnmpTableCache}, for the
* JvmThreadInstanceTable.
**/
private static class JvmThreadInstanceTableCache
extends SnmpTableCache {
/**
* Create a weak cache for the JvmThreadInstanceTable.
* @param validity validity of the cached data, in ms.
**/
long validity) {
}
/**
* Call <code>getTableDatas(JvmContextFactory.getUserData())</code>.
**/
return getTableDatas(userData);
}
/**
* Return a table handler containing the Thread indexes.
* Indexes are computed from the ThreadId.
**/
// We are getting all the thread ids. WARNING.
// Some of them will be not valid when accessed for data...
// See getEntry
// Time stamp for the cache
//indexes[i] = makeOid(id[i]);
}
}
}
// The weak cache for this table.
/**
* Constructor for the table. Initialize metadata for
* "JvmThreadInstanceTableMeta".
* The reference on the MBean server is updated so the entries created
* through an SNMP SET will be AUTOMATICALLY REGISTERED in Java DMK.
*/
cache = new JvmThreadInstanceTableCache(this,
}
// See com.sun.jmx.snmp.agent.SnmpMibTable
throws SnmpStatusException {
// null means get the first OID.
}
// See com.sun.jmx.snmp.agent.SnmpMibTable
throws SnmpStatusException {
// Get the data handler.
//
// This should never happen.
// If we get here it's a bug.
//
}
// Get the next oid
//
while(true) {
}
// if next is null: we reached the end of the table.
//
return next;
}
// See com.sun.jmx.snmp.agent.SnmpMibTable
// Get the handler.
//
// handler should never be null.
//
return false;
return false;
}
// See com.sun.jmx.snmp.agent.SnmpMibTable
throws SnmpStatusException {
}
// Get the request contextual cache (userData).
//
// Get the handler.
//
// handler should never be null.
//
return entry;
}
/**
* Get the SnmpTableHandler that holds the jvmThreadInstanceTable data.
* First look it up in the request contextual cache, and if it is
* not found, obtain it from the weak cache.
* <br>The request contextual cache will be released at the end of the
* current requests, and is used only to process this request.
* <br>The weak cache is shared by all requests, and is only
* recomputed when it is found to be obsolete.
* <br>Note that the data put in the request contextual cache is
* never considered to be obsolete, in order to preserve data
* coherency.
**/
else m=null;
// Look in the contextual cache.
if (m != null) {
final SnmpTableHandler handler =
}
// No handler in contextual cache, make a new one.
return handler;
}
return JvmThreadingImpl.getThreadMXBean().
}
}
// the request contextual cache.
//
// Revisit: Probably better programming to put all these strings
// in some interface.
//
}
// If the entry is in the cache, simply return it.
//
"Entry found in cache: " + entryTag);
return cached;
}
oid + "] is not in cache");
// Entry not in cache. We will create one if needed.
//
try {
} catch (RuntimeException r) {
"Failed to get thread info for rowOid: " + oid);
}
// No thread by that id => no entry.
//
return null;
}
return cached;
}
new MibLogger(JvmThreadInstanceTableMetaImpl.class);
}