/*
* 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.
*/
package sun.management;
/**
* A CompositeData for ThreadInfo for the local management support.
* This class avoids the performance penalty paid to the
* construction of a CompositeData use in the local case.
*/
private final boolean currentVersion;
this.threadInfo = ti;
this.currentVersion = true;
}
this.threadInfo = null;
}
return threadInfo;
}
public boolean isCurrentVersion() {
return currentVersion;
}
return new ThreadInfoCompositeData(cd);
}
return ticd.getCompositeData();
}
// Convert StackTraceElement[] to CompositeData[]
}
// Convert MonitorInfo[] and LockInfo[] to CompositeData[]
// Convert MonitorInfo[] to CompositeData[]
}
// CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
// threadInfoItemNames!
final Object[] threadInfoItemValues = {
};
try {
return new CompositeDataSupport(threadInfoCompositeType,
} catch (OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
}
}
// Attribute names
};
// New attributes added in 6.0 ThreadInfo
};
// Current version of ThreadInfo
// Previous version of ThreadInfo
static {
try {
// Form a CompositeType for JDK 5.0 ThreadInfo version
int i = 0;
if (isV5Attribute(n)) {
v5ItemNames[i] = n;
i++;
}
}
new CompositeType("java.lang.management.ThreadInfo",
"J2SE 5.0 java.lang.management.ThreadInfo",
} catch (OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
}
// Each CompositeData object has its CompositeType associated
// with it. So we can get the CompositeType representing LockInfo
// from a mapped CompositeData for any LockInfo object.
// Thus we construct a random LockInfo object and pass it
// to LockDataConverter to do the conversion.
System.identityHashCode(o));
}
for (String n : threadInfoV6Attributes) {
return false;
}
}
return true;
}
throw new NullPointerException("Null CompositeData");
}
}
public long threadId() {
}
// The ThreadName item cannot be null so we check that
// it is present with a non-null value.
throw new IllegalArgumentException("Invalid composite data: " +
}
return name;
}
}
public long blockedTime() {
}
public long blockedCount() {
}
public long waitedTime() {
}
public long waitedCount() {
}
// The LockName and LockOwnerName can legitimately be null,
// we don't bother to check the value
}
public long lockOwnerId() {
}
}
public boolean suspended() {
}
public boolean inNative() {
}
// The StackTrace item cannot be null, but if it is we will get
// a NullPointerException when we ask for its length.
}
return stackTrace;
}
// 6.0 new attributes
}
// The LockedMonitors item cannot be null, but if it is we will get
// a NullPointerException when we ask for its length.
MonitorInfo[] monitors =
}
return monitors;
}
// The LockedSynchronizers item cannot be null, but if it is we will
// get a NullPointerException when we ask for its length.
}
/** Validate if the input CompositeData has the expected
* CompositeType (i.e. contain all attributes with expected
* names and types).
*/
throw new NullPointerException("Null CompositeData");
}
boolean currentVersion = true;
currentVersion = false;
// check if cd is an older version
throw new IllegalArgumentException(
"Unexpected composite type for ThreadInfo");
}
}
if (stackTraceData == null) {
throw new IllegalArgumentException(
"StackTraceElement[] is missing");
}
}
// validate v6 attributes
if (currentVersion) {
li.getCompositeType())) {
throw new IllegalArgumentException(
"Unexpected composite type for \"" +
LOCK_INFO + "\" attribute.");
}
}
throw new IllegalArgumentException("MonitorInfo[] is null");
}
}
throw new IllegalArgumentException("LockInfo[] is null");
}
throw new IllegalArgumentException(
"Unexpected composite type for \"" +
LOCKED_SYNCS + "\" attribute.");
}
}
}
}
}