Bootstrap.java

00001 
00026 package org.objectweb.jonas.server;
00027 
00028 import java.lang.reflect.InvocationTargetException;
00029 import java.lang.reflect.Method;
00030 
00031 import org.objectweb.jonas.common.JProp;
00032 
00040 public class Bootstrap {
00041 
00045     private static final String JONAS_SERVER_CLASS = "org.objectweb.jonas.server.Server";
00046 
00050     private Bootstrap() {
00051     }
00052 
00057     public static void main(String[] args) {
00058         String classToRun = args[0];
00059 
00060         // JDK 1.4 or higher is required
00061         try {
00062             Package p = Package.getPackage("java.lang");
00063             if (!p.isCompatibleWith("1.4")) {
00064                 String implVer = p.getImplementationVersion();
00065                 String specVer = p.getSpecificationVersion();
00066                 System.err.println("A 1.4 JVM or higher is required for JOnAS. Current JVM implementation version is '"
00067                         + implVer + "' with specification '" + specVer + "'");
00068                 System.exit(0);
00069             }
00070         } catch (NumberFormatException nfe) {
00071             System.err.println("Cannot detect the running JVM version. Note that JOnAS requires a 1.4 or higher JVM.");
00072         }
00073 
00074         try {
00075 
00076             LoaderManager lm = LoaderManager.getInstance();
00077             lm.init(JProp.getInstance());
00078             JClassLoader jonasLoader = null;
00079 
00080             // TODO : Can specify classloader to use ?
00081             if (classToRun.equals(JONAS_SERVER_CLASS)) {
00082                 jonasLoader = lm.getAppsLoader();
00083             } else {
00084                 jonasLoader = lm.getToolsLoader();
00085             }
00086 
00087             Thread.currentThread().setContextClassLoader(jonasLoader);
00088 
00089             //jonasLoader.printURLs(); // DEBUG
00090 
00091             // Launch the "class_to_run" by using our classloader.
00092             Class clazz = jonasLoader.loadClass(classToRun);
00093             Class[] argList = new Class[] {args.getClass()};
00094             Method meth = clazz.getMethod("main", argList);
00095             String[] newArgs = new String[args.length - 1];
00096             System.arraycopy(args, 1, newArgs, 0, newArgs.length);
00097             meth.invoke(null, new Object[] {newArgs});
00098         } catch (InvocationTargetException ite) {
00099             Throwable t = ite.getTargetException();
00100             String message = t.getMessage();
00101             if (t instanceof Error) {
00102                 System.err.println("Error during execution of " + classToRun + " : " + message);
00103             } else if (t instanceof Exception) {
00104                 System.err.println("Exception during execution of " + classToRun + " : " + message);
00105             }
00106             t.printStackTrace(System.err);
00107             System.exit(2);
00108         } catch (Exception e) {
00109             System.err.println(classToRun + " reflection error : " + e);
00110             e.printStackTrace();
00111             System.exit(2);
00112         }
00113     }
00114 }

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