KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nanocontainer > booter > BrownBear


1 package org.nanocontainer.booter;
2
3 import java.io.IOException JavaDoc;
4 import java.lang.reflect.InvocationTargetException JavaDoc;
5 import java.lang.reflect.Method JavaDoc;
6 import java.net.MalformedURLException JavaDoc;
7 import java.net.Socket JavaDoc;
8 import java.net.URL JavaDoc;
9 import java.net.URLClassLoader JavaDoc;
10 import java.security.AccessControlException JavaDoc;
11 import java.security.AllPermission JavaDoc;
12 import java.util.HashMap JavaDoc;
13 import java.util.Map JavaDoc;
14
15 import org.picocontainer.MutablePicoContainer;
16 import org.picocontainer.PicoContainer;
17 import org.picocontainer.Startable;
18 import org.picocontainer.defaults.CustomPermissionsURLClassLoader;
19 import org.picocontainer.defaults.DefaultPicoContainer;
20
21 public class BrownBear implements Startable {
22
23     private MutablePicoContainer subContainer;
24
25     public BrownBear(Honey honey) throws NoSuchMethodException JavaDoc, IllegalAccessException JavaDoc, InvocationTargetException JavaDoc, InstantiationException JavaDoc, MalformedURLException JavaDoc, ClassNotFoundException JavaDoc {
26
27         try {
28             new Socket JavaDoc("google.com", 80);
29             System.out.println("BrownBear: 'socket open' NOT blocked to google.com:80 (wrong)");
30         } catch (AccessControlException JavaDoc e) {
31             System.out.println("BrownBear: 'socket open' blocked to google.com:80 (correct)");
32         } catch (IOException JavaDoc e) {
33             e.printStackTrace();
34         }
35
36         try {
37             new Socket JavaDoc("yahoo.com", 80);
38             System.out.println("BrownBear: 'socket open' NOT blocked to yahoo.com:80 (correct)");
39         } catch (AccessControlException JavaDoc e) {
40             e.printStackTrace();
41             System.out.println("BrownBear: 'socket open' blocked to yahoo.com:80 (wrong)");
42         } catch (IOException JavaDoc e) {
43             e.printStackTrace();
44         }
45
46         //try {
47
// param2.getClass().getClassLoader();
48
// System.out.println("BrownBear: Can access classloader of class *not* in BrownBear's tree (wrong)");
49
//} catch (AccessControlException e) {
50
// System.out.println("BrownBear: Can't access classloader of class *not* in BrownBear's tree (correct)");
51
//}
52

53         this.getClass().getClassLoader();
54         System.out.println("BrownBear: Can access classloader of this class (correct)");
55
56         System.out.println("BrownBear: I have eaten " + honey.eatSome() + " calories of Honey (of unknown type)");
57         Class JavaDoc clazz = null;
58         try {
59             clazz = this.getClass().getClassLoader().loadClass("org.nanocontainer.boot.BeeHiveHoney");
60         } catch (ClassNotFoundException JavaDoc cnfe) {
61         }
62         System.out.println("BrownBear: Can see class for BeeHiveHoney ? - " + (clazz != null));
63         System.out.println("BrownBear: honey instance's class type - " + honey.getClass());
64         Method JavaDoc nonInterfaceMethod = null;
65         try {
66             nonInterfaceMethod = honey.getClass().getMethod("nonInterfaceMethod", new Class JavaDoc[0]);
67         } catch (NoSuchMethodException JavaDoc exception) {
68         }
69         System.out.println("BrownBear: Can see honey instance's 'nonInterfaceMethod'? - " + (nonInterfaceMethod != null));
70         boolean invoked = false;
71         try {
72             nonInterfaceMethod.invoke(honey, new Object JavaDoc[0]);
73             invoked = true;
74         } catch (Exception JavaDoc e) {
75         }
76         System.out.println("BrownBear: Can invoke honey instance's 'nonInterfaceMethod'? - " + invoked);
77         nonInterfaceMethod = null;
78         if (clazz != null) {
79             nonInterfaceMethod = clazz.getMethod("nonInterfaceMethod", new Class JavaDoc[0]);
80         }
81         System.out.println("BrownBear: Can see HoneyBeeHoney.nonInterfaceMethod()? - " + (nonInterfaceMethod != null));
82         invoked = false;
83         try {
84             nonInterfaceMethod.invoke(honey, new Object JavaDoc[0]);
85             invoked = true;
86         } catch (Exception JavaDoc e) {
87         }
88         System.out.println("BrownBear: Can invoke HoneyBeeHoney class' 'nonInterfaceMethod' against honey's instance? - " + invoked);
89         System.out.println("BrownBear: Can leverage any implementation detail from honey instance? - false");
90
91         subContainer = new DefaultPicoContainer();
92         subContainer.registerComponentImplementation(Map JavaDoc.class, HashMap JavaDoc.class);
93         subContainer.registerComponentImplementation(PicoContainer.class, DefaultPicoContainer.class);
94         subContainer.getComponentInstance(Map JavaDoc.class);
95         subContainer.getComponentInstance(PicoContainer.class);
96
97         System.out.println("BrownBear: Can instantiate new DefaultPicoContainer (sub-container)");
98
99         try {
100             new BrownBearHelper();
101             System.out.println("BrownBear: Can instantiate new DefaultNanoContainer (sub-container) - wrong, DefaultNanoContainer should not be in the classpath");
102         } catch (NoClassDefFoundError JavaDoc e) {
103             System.out.println("BrownBear: Cannot instantiate new DefaultNanoContainer (sub-container) - correct, DefaultNanoContainer is not in the classpath");
104         } catch (ClassNotFoundException JavaDoc e) {
105             System.out.println("BrownBear: Cannot instantiate new HashMap (error!)");
106         }
107
108         String JavaDoc qdox = "http://www.ibiblio.org/maven/qdox/jars/qdox-1.5.jar";
109         try {
110             URLClassLoader JavaDoc urlClassLoader = new URLClassLoader JavaDoc(new URL JavaDoc[] {new URL JavaDoc(qdox)} );
111             Class JavaDoc qdoxClass = urlClassLoader.loadClass("com.thoughtworks.qdox.JavaDocBuilder");
112             qdoxClass.newInstance();
113             System.out.println("BrownBear: Can instantiate new URLClassLoader (incorrect)");
114         } catch (AccessControlException JavaDoc e) {
115             System.out.println("BrownBear: Cannot instantiate new URLClassLoader (correct)");
116         }
117
118         Map JavaDoc permissionsMap = new HashMap JavaDoc();
119         permissionsMap.put(qdox, new AllPermission JavaDoc());
120
121         try {
122             URLClassLoader JavaDoc urlClassLoader = new CustomPermissionsURLClassLoader(new URL JavaDoc[] {new URL JavaDoc(qdox)}, permissionsMap, this.getClass().getClassLoader() );
123             Class JavaDoc qdoxClass = urlClassLoader.loadClass("com.thoughtworks.qdox.JavaDocBuilder");
124             qdoxClass.newInstance();
125             System.out.println("BrownBear: Can instantiate new CustomPermissionsURLClassLoader (incorrect)");
126         } catch (AccessControlException JavaDoc e) {
127             System.out.println("BrownBear: Cannot instantiate new CustomPermissionsURLClassLoader (correct)");
128         }
129
130     }
131
132     public void start() {
133         subContainer.start();
134         System.out.println("BrownBear: Started sub-container");
135     }
136
137     public void stop() {
138         subContainer.stop();
139     }
140 }
Popular Tags