1 | import java.io.ByteArrayInputStream;
|
---|
2 | import java.io.FileInputStream;
|
---|
3 | public class Loader2 extends ClassLoader {
|
---|
4 | int _recur;
|
---|
5 | public void print( String msg ) {
|
---|
6 | for( int i=0; i<_recur; i++ )
|
---|
7 | System.out.print(" ");
|
---|
8 | System.out.println(">>Loader2>> "+msg);
|
---|
9 | }
|
---|
10 |
|
---|
11 | protected Class findClass2(String name) throws ClassNotFoundException {
|
---|
12 | print("Fetching the implementation of "+name);
|
---|
13 | int old = _recur;
|
---|
14 | try {
|
---|
15 | FileInputStream fi = new FileInputStream(name+".impl2");
|
---|
16 | byte result[] = new byte[fi.available()];
|
---|
17 | fi.read(result);
|
---|
18 |
|
---|
19 | print("DefineClass1 on "+name);
|
---|
20 | _recur++;
|
---|
21 | Class clazz = defineClass(name, result, 0, result.length);
|
---|
22 | _recur = old;
|
---|
23 | print("Returning newly loaded class.");
|
---|
24 | return clazz;
|
---|
25 | } catch (Exception e) {
|
---|
26 | _recur = old;
|
---|
27 | print("Not found on disk.");
|
---|
28 | // If we caught an exception, either the class was not found or
|
---|
29 | // it was unreadable by our process.
|
---|
30 | return null;
|
---|
31 | //throw new ClassNotFoundException(e.toString());
|
---|
32 | }
|
---|
33 | }
|
---|
34 |
|
---|
35 | protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
|
---|
36 | // Attempt a disk load first
|
---|
37 | Class c = findClass2(name);
|
---|
38 | if( c == null ) {
|
---|
39 | // check if the class has already been loaded
|
---|
40 | print("Checking for prior loaded class "+name);
|
---|
41 | c = findLoadedClass(name);
|
---|
42 | print("Letting super-loader load "+name);
|
---|
43 | int old = _recur;
|
---|
44 | _recur++;
|
---|
45 | c = super.loadClass(name, false);
|
---|
46 | _recur=old;
|
---|
47 | }
|
---|
48 | if (resolve) { print("Resolving class "+name); resolveClass(c); }
|
---|
49 | print("Returning clazz "+c.getClassLoader()+":"+name);
|
---|
50 | return c;
|
---|
51 | }
|
---|
52 | }
|
---|