1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.backsource.utils.lang;
21 import java.net.URL;
22 import java.net.URLClassLoader;
23 /***
24 * Commpon functions needed when working whith classloader.
25 *
26 * @todo move in methods from other classes
27 * @author <a href="mailto:pra@mogul.com">Peter Antman</a>
28 * @version $Revision: 1.1.1.1 $
29 */
30
31 public class ClassLoaderUtil {
32
33 public static void printLoader(Object o ){
34 System.out.println(o + " loaded by " + o.getClass().getClassLoader() + " in context classloader " + Thread.currentThread().getContextClassLoader());
35 }
36
37 public static String getURLs(URL[] urls) {
38 if ( urls == null) {
39 return "{}";
40 }
41 StringBuffer b = new StringBuffer("{");
42 for ( int i = 0;i<urls.length;i++) {
43 b.append( urls[i] ).append(":");
44 }
45 b.append("}");
46 return b.toString();
47 }
48
49 public static void printClassLoaderTree(ClassLoader l) {
50 ClassLoader p = l.getParent();
51 if ( p!= null) {
52 printClassLoaderTree(p);
53 }
54 String u = "";
55 if ( l instanceof URLClassLoader) {
56 u = getURLs( ((URLClassLoader)l).getURLs());
57 }
58
59 System.out.println("\t|\n"+l+" " +u);
60 }
61 public static void printClassLoaderTree(Object o) {
62 System.out.println("\nClass loader tree");
63 printClassLoaderTree( o.getClass().getClassLoader());
64 System.out.println("\nContext loader tree");
65 ClassLoader l = Thread.currentThread().getContextClassLoader();
66 printClassLoaderTree(l );
67 }
68
69 }