[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:
Andrew Haley 2007-02-16 13:51:04 +00:00 committed by Andrew Haley
parent 421076b552
commit 24d8ce15e2
20 changed files with 188 additions and 185 deletions

View file

@ -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);
}
}
}