1 5 package com.tc.test.server.appserver.cargo; 6 7 import com.tc.process.LinkedJavaProcessPollingAgent; 8 import com.tc.process.StartupAppender; 9 10 import java.io.BufferedReader ; 11 import java.io.File ; 12 import java.io.FileInputStream ; 13 import java.io.IOException ; 14 import java.io.InputStreamReader ; 15 import java.lang.reflect.Method ; 16 import java.net.URL ; 17 import java.net.URLClassLoader ; 18 import java.util.Enumeration ; 19 import java.util.Properties ; 20 21 27 public final class CargoLinkedChildProcess { 28 29 private static File instanceDir; 30 31 private CargoLinkedChildProcess() { 32 } 34 35 public static void main(String [] args) throws Exception { 36 String className = args[0]; 37 int port = Integer.parseInt(args[1]); 38 instanceDir = new File (args[2]); 39 40 String [] serverArgs = new String [0]; 41 if (args.length > 3) { 42 serverArgs = new String [args.length - 3]; 43 for (int i = 3; i < args.length; i++) { 44 serverArgs[i - 3] = args[i]; 45 } 46 } 47 48 System.out.println("JAVA VERSION: " + System.getProperty("java.version")); 49 50 LinkedJavaProcessPollingAgent.startClientWatchdogService(port, className, true); 51 loadProperties(); 52 53 invokeStartupAppender(); 54 55 try { 56 Class startServer = Class.forName(className); 57 Method main = startServer.getMethod("main", new Class [] { String [].class }); 58 main.invoke(null, new Object [] { serverArgs }); 59 60 } catch (ClassNotFoundException cnfe) { 61 System.err.println("unable to locate server class: " + className); 62 cnfe.printStackTrace(); 63 } catch (NoSuchMethodException nsme) { 64 System.err.println("unable to access method: main()"); 65 nsme.printStackTrace(); 66 } 67 } 68 69 private static void loadProperties() { 70 File sandbox = instanceDir.getParentFile(); 71 Properties props = new Properties (); 72 try { 73 props.load(new FileInputStream (new File (sandbox + File.separator + instanceDir.getName() + ".properties"))); 74 } catch (IOException ioe) { 75 throw new RuntimeException ("Unable to load properties file: " + sandbox + File.separator + instanceDir.getName() 76 + ".properties"); 77 } 78 String name = null; 79 for (Enumeration e = props.propertyNames(); e.hasMoreElements();) { 80 name = (String ) e.nextElement(); 81 System.setProperty(name, props.getProperty(name)); 82 } 83 } 84 85 private static void invokeStartupAppender() throws Exception { 86 File startupAppenderJar = new File (instanceDir.getParent() + File.separator + StartupAppender.FILE_NAME); 87 if (!startupAppenderJar.exists()) return; 88 URL url = new URL ("jar:file:" + startupAppenderJar.getAbsolutePath() + "!/"); 89 ClassLoader classLoader = new URLClassLoader (new URL [] { url }, CargoLinkedChildProcess.class.getClassLoader()); 90 URL appenderTypeUrl = new URL ("jar:file:" + startupAppenderJar.getAbsolutePath() + "!/" 91 + StartupAppender.APPENDER_TYPE_FILENAME); 92 BufferedReader reader = new BufferedReader (new InputStreamReader (appenderTypeUrl.openStream())); 93 String appenderType = reader.readLine(); 94 reader.close(); 95 Class appenderTypeClass = classLoader.loadClass(appenderType); 96 StartupAppender appender = (StartupAppender) appenderTypeClass.newInstance(); 97 appender.append(); 98 } 99 } 100 | Popular Tags |