[multiple changes]
2007-02-15 Andrew Haley <aph@redhat.com> * Makefile.am (nat_source_files): Remove java/lang/management/natVMManagementFactory.cc. * java/lang/Thread.java (getStackTrace): Use reflection to call the ManagementFactory. * java/lang/management/VMManagementFactory.java: Remove native methods. * java/lang/management/natVMManagementFactory.cc: Deleted. * sources.am: Regnerate. * scripts/makemake.tcl: Add new "bcheaders" type. Move java/lang/management and gnu/classpath/management to "bc". Move gnu/java/lang/management to "bcheaders". 2007-02-16 Andrew Haley <aph@redhat.com> * gnu/java/lang/management/MemoryMXBeanImpl.java, javax/management/MBeanServerDelegate.java: Use gnu.javax.management.ListenerData rather than gnu.classpath.ListenerData. * gnu/javax/management/ListenerData.java: Move here from gnu/classpath/ListenerData.java. From-SVN: r122041
This commit is contained in:
parent
421076b552
commit
24d8ce15e2
20 changed files with 188 additions and 185 deletions
|
@ -50,6 +50,9 @@ import java.lang.management.ThreadMXBean;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
|
||||
* "The Java Language Specification", ISBN 0-201-63451-1
|
||||
* plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
|
||||
|
@ -1291,9 +1294,43 @@ public class Thread implements Runnable
|
|||
SecurityManager sm = SecurityManager.current; // Be thread-safe.
|
||||
if (sm != null)
|
||||
sm.checkPermission(new RuntimePermission("getStackTrace"));
|
||||
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
|
||||
ThreadInfo info = bean.getThreadInfo(getId(), Integer.MAX_VALUE);
|
||||
return info.getStackTrace();
|
||||
}
|
||||
|
||||
// Calling java.lang.management via reflection means that
|
||||
// javax.management be overridden in the endorsed directory.
|
||||
|
||||
// This is the equivalent code:
|
||||
//
|
||||
// ThreadMXBean bean = ManagementFactory.getThreadMXBean();
|
||||
// ThreadInfo info = bean.getThreadInfo(getId(), Integer.MAX_VALUE);
|
||||
// return info.getStackTrace();
|
||||
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
Object bean
|
||||
= (Class.forName("java.lang.management.ManagementFactory")
|
||||
.getDeclaredMethod("getThreadMXBean")
|
||||
.invoke(null));
|
||||
Object info = bean.getClass()
|
||||
.getDeclaredMethod("getThreadInfo", long.class, int.class)
|
||||
.invoke(bean, new Long(getId()), new Integer(Integer.MAX_VALUE));
|
||||
Object trace = info.getClass()
|
||||
.getDeclaredMethod("getStackTrace").invoke(info);
|
||||
return (StackTraceElement[])trace;
|
||||
}
|
||||
catch (InvocationTargetException e)
|
||||
{
|
||||
throw (Exception)e.getTargetException();
|
||||
}
|
||||
}
|
||||
catch (UnsupportedOperationException e)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new UnsupportedOperationException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue