KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > test > server > appserver > cargo > CargoLinkedChildProcess


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

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 JavaDoc;
11 import java.io.File JavaDoc;
12 import java.io.FileInputStream JavaDoc;
13 import java.io.IOException JavaDoc;
14 import java.io.InputStreamReader JavaDoc;
15 import java.lang.reflect.Method JavaDoc;
16 import java.net.URL JavaDoc;
17 import java.net.URLClassLoader JavaDoc;
18 import java.util.Enumeration JavaDoc;
19 import java.util.Properties JavaDoc;
20
21 /**
22  * This class serves three purposes. It delegates to {@link LinkedJavaProcessPollingAgent} to page the parent process.
23  * And it loads a properties file which was written by the parent process (in the same directory as the log) and sets
24  * all name value pairs as system properties for the appserver's JVM. This makes these available to servlets running in
25  * the container.
26  */

27 public final class CargoLinkedChildProcess {
28
29   private static File JavaDoc instanceDir;
30
31   private CargoLinkedChildProcess() {
32     // cannot instantiate
33
}
34
35   public static void main(String JavaDoc[] args) throws Exception JavaDoc {
36     String JavaDoc className = args[0];
37     int port = Integer.parseInt(args[1]);
38     instanceDir = new File JavaDoc(args[2]);
39
40     String JavaDoc[] serverArgs = new String JavaDoc[0];
41     if (args.length > 3) {
42       serverArgs = new String JavaDoc[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 JavaDoc startServer = Class.forName(className);
57       Method JavaDoc main = startServer.getMethod("main", new Class JavaDoc[] { String JavaDoc[].class });
58       main.invoke(null, new Object JavaDoc[] { serverArgs });
59
60     } catch (ClassNotFoundException JavaDoc cnfe) {
61       System.err.println("unable to locate server class: " + className);
62       cnfe.printStackTrace();
63     } catch (NoSuchMethodException JavaDoc nsme) {
64       System.err.println("unable to access method: main()");
65       nsme.printStackTrace();
66     }
67   }
68
69   private static void loadProperties() {
70     File JavaDoc sandbox = instanceDir.getParentFile();
71     Properties JavaDoc props = new Properties JavaDoc();
72     try {
73       props.load(new FileInputStream JavaDoc(new File JavaDoc(sandbox + File.separator + instanceDir.getName() + ".properties")));
74     } catch (IOException JavaDoc ioe) {
75       throw new RuntimeException JavaDoc("Unable to load properties file: " + sandbox + File.separator + instanceDir.getName()
76                                  + ".properties");
77     }
78     String JavaDoc name = null;
79     for (Enumeration JavaDoc e = props.propertyNames(); e.hasMoreElements();) {
80       name = (String JavaDoc) e.nextElement();
81       System.setProperty(name, props.getProperty(name));
82     }
83   }
84
85   private static void invokeStartupAppender() throws Exception JavaDoc {
86     File JavaDoc startupAppenderJar = new File JavaDoc(instanceDir.getParent() + File.separator + StartupAppender.FILE_NAME);
87     if (!startupAppenderJar.exists()) return;
88     URL JavaDoc url = new URL JavaDoc("jar:file:" + startupAppenderJar.getAbsolutePath() + "!/");
89     ClassLoader JavaDoc classLoader = new URLClassLoader JavaDoc(new URL JavaDoc[] { url }, CargoLinkedChildProcess.class.getClassLoader());
90     URL JavaDoc appenderTypeUrl = new URL JavaDoc("jar:file:" + startupAppenderJar.getAbsolutePath() + "!/"
91                                   + StartupAppender.APPENDER_TYPE_FILENAME);
92     BufferedReader JavaDoc reader = new BufferedReader JavaDoc(new InputStreamReader JavaDoc(appenderTypeUrl.openStream()));
93     String JavaDoc appenderType = reader.readLine();
94     reader.close();
95     Class JavaDoc appenderTypeClass = classLoader.loadClass(appenderType);
96     StartupAppender appender = (StartupAppender) appenderTypeClass.newInstance();
97     appender.append();
98   }
99 }
100
Popular Tags