RemoteClassLoaderSpi.java

00001 
00026 package org.objectweb.jonas.server;
00027 
00028 import java.lang.reflect.Method;
00029 import java.net.MalformedURLException;
00030 import java.net.URLClassLoader;
00031 import java.rmi.server.RMIClassLoaderSpi;
00032 
00033 
00040 public class RemoteClassLoaderSpi extends RMIClassLoaderSpi {
00041 
00042 
00043     private static boolean carolIsInitialized = false;
00044     private static boolean carolIsOptimized = false;
00045 
00046 
00047     private RMIClassLoaderSpi defRMISpi;
00048 
00049     public RemoteClassLoaderSpi() {
00050         try {
00051             Class cl = Class.forName("java.rmi.server.RMIClassLoader");
00052             Method meth = cl.getMethod("getDefaultProviderInstance",  new Class [0]);
00053             this.defRMISpi = (RMIClassLoaderSpi) meth.invoke(cl, new Object[0]);
00054         } catch (Exception e) {
00055             //TraceCarol.error("RemoteClassLoaderSpi error", e);
00056         }
00057     }
00058 
00059     public Class loadClass(String codebase,
00060                            String name,
00061                            ClassLoader defaultLoader) throws MalformedURLException,
00062                                                              ClassNotFoundException {
00063         return defRMISpi.loadClass(codebase, name, defaultLoader);
00064     }
00065 
00066     public Class loadProxyClass(String codebase,
00067                                 String[] interfaces,
00068                                 ClassLoader defaultLoader) throws MalformedURLException,
00069                                                                   ClassNotFoundException {
00070         return defRMISpi.loadProxyClass(codebase, interfaces, defaultLoader);
00071     }
00072 
00073     public ClassLoader getClassLoader(String codebase) throws MalformedURLException {
00074         return defRMISpi.getClassLoader(codebase);
00075     }
00076 
00077 
00078     public String getClassAnnotation(Class cl) {
00079         ClassLoader loader = cl.getClassLoader();
00080 
00081         if (!carolIsInitialized) {
00082 
00083             String sValue = System.getProperty("rmi.local.call", "init");
00084             if (!sValue.equals("init")) {
00085                 carolIsOptimized = new Boolean(sValue).booleanValue();
00086                 carolIsInitialized = true;
00087             }
00088 
00089            }
00090 
00091         if (loader instanceof JClassLoader) {
00092             return null;
00093         } else if ((loader instanceof URLClassLoader)&&(carolIsOptimized)){
00094             return null;
00095         } else {
00096             return defRMISpi.getClassAnnotation(cl);
00097         }
00098     }
00099 }

Generated on Tue Feb 15 15:05:24 2005 for JOnAS by  doxygen 1.3.9.1