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
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
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
00090
00091
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 }