private static void showThreads(PrintStream pw, ThreadGroup g, Thread current) { int nthreads = g.activeCount(); pw.println("\nThread Group = " + g.getName() + " activeCount= " + nthreads); Thread[] tarray = new Thread[nthreads]; int n = g.enumerate(tarray, false); for (int i = 0; i < n; i++) { Thread thread = tarray[i]; ClassLoader loader = thread.getContextClassLoader(); String loaderName = (loader == null) ? "Default" : loader.getClass().getName(); Thread.State state = thread.getState(); long id = thread.getId(); pw.print(" " + id + " " + thread.getName() + " " + state + " " + loaderName); if (thread == current) pw.println(" **** CURRENT ***"); else pw.println(); } int ngroups = g.activeGroupCount(); ThreadGroup[] garray = new ThreadGroup[ngroups]; int ng = g.enumerate(garray, false); for (int i = 0; i < ng; i++) { ThreadGroup nested = garray[i]; showThreads(pw, nested, current); } }
/** * Load the class with the specified name, searching using the following algorithm until it finds * and returns the class. If the class cannot be found, returns <code>ClassNotFoundException * </code>. * * <ul> * <li>Call <code>findLoadedClass(String)</code> to check if the class has already been loaded. * If it has, the same <code>Class</code> object is returned. * <li>If the <code>delegate</code> property is set to <code>true</code>, call the <code> * loadClass()</code> method of the parent class loader, if any. * <li>Call <code>findClass()</code> to find this class in our locally defined repositories. * <li>Call the <code>loadClass()</code> method of our parent class loader, if any. * </ul> * * If the class was found using the above steps, and the <code>resolve</code> flag is <code>true * </code>, this method will then call <code>resolveClass(Class)</code> on the resulting Class * object. * * @param name Name of the class to be loaded * @param resolve If <code>true</code> then resolve the class * @exception ClassNotFoundException if the class was not found */ public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { Class clazz = null; // (0) Check our previously loaded class cache clazz = findLoadedClass(name); if (clazz != null) { if (resolve) resolveClass(clazz); return (clazz); } // (.5) Permission to access this class when using a SecurityManager int dot = name.lastIndexOf('.'); if (System.getSecurityManager() != null) { if (dot >= 0) { try { securityManager.checkPackageAccess(name.substring(0, dot)); } catch (SecurityException se) { String error = "Security Violation, attempt to use " + "Restricted Class: " + name; System.out.println(error); throw new ClassNotFoundException(error); } } } // Class is in a package, delegate to thread context class loader if (!name.startsWith(Constants.JSP_PACKAGE_NAME)) { ClassLoader classLoader = null; if (System.getSecurityManager() != null) { classLoader = (ClassLoader) AccessController.doPrivileged(privLoadClass); } else { classLoader = Thread.currentThread().getContextClassLoader(); } clazz = classLoader.loadClass(name); if (resolve) resolveClass(clazz); return clazz; } // Only load classes for this JSP page if (name.startsWith(className)) { String classFile = name.substring(Constants.JSP_PACKAGE_NAME.length() + 1) + ".class"; byte[] cdata = loadClassDataFromFile(classFile); if (cdata == null) throw new ClassNotFoundException(name); if (System.getSecurityManager() != null) { ProtectionDomain pd = new ProtectionDomain(codeSource, permissionCollection); clazz = defineClass(name, cdata, 0, cdata.length, pd); } else { clazz = defineClass(name, cdata, 0, cdata.length); } if (clazz != null) { if (resolve) resolveClass(clazz); return clazz; } } throw new ClassNotFoundException(name); }
private static synchronized String getJavascript() { if (jstext == null) { InputStream istr = null; try { ClassLoader loader = Thread.currentThread().getContextClassLoader(); istr = loader.getResourceAsStream(JAVASCRIPT_RESOURCE); jstext = StringUtil.fromInputStream(istr); istr.close(); } catch (Exception e) { log.error("Can't load javascript", e); } finally { IOUtil.safeClose(istr); } } return jstext; }