001: /*
002: * CoadunationBase: The base for a Coadunation instance.
003: * Copyright (C) 2006 Rift IT Contracting
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
018: *
019: * Main.java
020: *
021: * The main class responsible for starting up the coadunation base.
022: */
023:
024: // package path
025: package com.rift.coad;
026:
027: // java imports
028: import java.util.StringTokenizer;
029: import java.io.File;
030: import java.util.Vector;
031: import java.net.URL;
032: import java.lang.reflect.Method;
033: import java.net.URLClassLoader;
034:
035: /**
036: * The main class responsible for starting up the coadunation base.
037: *
038: * @author Brett Chaldecott
039: */
040: public class Main {
041:
042: /**
043: * The main method responsible for starting the coadunation base.
044: *
045: * @param args the command line arguments
046: */
047: public static void main(String[] args) {
048: try {
049: String libdirs = System.getenv("COAD_LIB_DIRS");
050: StringTokenizer stringTok = null;
051: if (libdirs.contains(";")) {
052: stringTok = new StringTokenizer(libdirs, ";");
053: System.out.println("Contains ;");
054: } else {
055: stringTok = new StringTokenizer(libdirs, ":");
056: System.out.println("Contains :");
057: }
058: System.out.println("Load from path : "
059: + System.getenv("COAD_LIB_DIRS"));
060: Vector urls = new Vector();
061: while (stringTok.hasMoreTokens()) {
062: String dirPath = stringTok.nextToken();
063: File dir = new File(dirPath);
064: if (dir.isFile() == true) {
065: urls.add(dir.toURL());
066: continue;
067: }
068: if (dir.isDirectory() == false) {
069: System.out.println("The path [" + dirPath
070: + "] does not point at a valid directory.");
071: System.exit(-1);
072: }
073: File[] files = dir.listFiles();
074: for (int index = 0; index < files.length; index++) {
075: String filePath = files[index].getAbsolutePath();
076: if (filePath.endsWith(".jar")
077: || filePath.endsWith(".zip")) {
078: urls.add(files[index].toURL());
079: }
080: }
081: }
082: URL[] urlArray = new URL[urls.size()];
083: urls.toArray(urlArray);
084: BaseClassLoader baseClassLoader = new BaseClassLoader(
085: urlArray, Main.class.getClassLoader());
086: Class classRef = baseClassLoader
087: .loadClass("com.rift.coad.Runner");
088: if (classRef == null) {
089: System.out
090: .println("Failed to run the Coadunation base Runner reference "
091: + "is null.");
092: throw new Exception(
093: "Failed to retrieve the appropriate class "
094: + "reference to start coadunation.");
095: }
096: System.out.println("Start Coadunation");
097: Method method = classRef.getMethod("main");
098: System.out.println("Invoking Coadunation");
099: //System.setProperty("java.rmi.server.RMIClassLoaderSpi",
100: // "com.rift.coad.RemoteClassLoaderSpi");
101: Thread.currentThread().setContextClassLoader(
102: baseClassLoader);
103: method.invoke(null);
104:
105: } catch (Exception ex) {
106: System.out.println("Failed to run the Coadunation base ["
107: + ex.getMessage() + "]");
108: ex.printStackTrace(System.out);
109: System.exit(-1);
110: }
111: }
112:
113: }
|