ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/experimental/misc/JVMManager/JVMManager.java
Revision: 1.1
Committed: Fri Nov 3 22:05:33 2000 UTC (23 years, 5 months ago) by ajm
Branch: MAIN
CVS Tags: PROJECT_COMPLETION, HEAD
Log Message:
Checked in the JVMManager, a look at running multiple classes in a single VM

File Contents

# Content
1 // Some imports
2 import java.util.*;
3 import java.lang.reflect.*;
4
5 // This class is a wrapper for running applications
6 // a basic thread extension
7 class ApplicationThread extends Thread {
8
9 // The constructor takes the name of the method we're gonna run
10 // and the arguments we're gonna pass into it
11 ApplicationThread(Method mainMethod, Object[] args) {
12 _mainMethod = mainMethod;
13 _args = args;
14 }
15
16 // The main bit of the thread just starts the functionality of the given
17 // method running
18 public void run() {
19 try {
20 System.out.println(" Starting: "+ _mainMethod.getDeclaringClass().toString());
21 _mainMethod.invoke(null, _args);
22 System.out.println(" Finished: "+ _mainMethod.getDeclaringClass().toString());
23 } catch (Exception e){
24 System.err.println("ERROR: " + e);
25 e.printStackTrace(System.out);
26 }
27 }
28
29 Method _mainMethod = null;
30 Object[] _args = null;
31 }
32
33 // The JVMManager takes a list of classes and instantiates them within the
34 // single VM that it is running in
35 //
36 // Future enhancements include:
37 // Passing of arguements to each class
38 // Seperation of in/out/err for each app
39 // GUI mode
40 // VM Thread control (ie, Kill, HUP etc...)
41 // Implementation of Java Security, specifically ProtectionDomain for each app
42 //
43 // Version 1.0
44 //
45 // (c) Copyright 2000 Alex Moore
46 //
47 class JVMManager {
48 public static void main(String args[]) {
49 // no exceptions are yet caught - not good
50 try {
51
52 // get hook on the runtime
53 Runtime myRuntime = Runtime.getRuntime();
54 // get hook on the system Class loader
55 ClassLoader myClassLoader = ClassLoader.getSystemClassLoader();
56 System.out.println("JVM Manager Started.");
57 System.out.println(" Total memory: " + myRuntime.totalMemory());
58 System.out.println(" Free memory: " + myRuntime.freeMemory());
59 System.out.println();
60
61 // for the time being we are just accepting a list of classes
62 // so just get the command line and assume that is just a simple list of classes to run
63 String[] appList = args;
64
65 // step through each app, and start it rolling
66 for (int i=0; i < appList.length; i++) {
67
68 // Load the class
69 Class myClass = myClassLoader.loadClass(appList[i]);
70 // and we don't support passing of individual args, but we will ;-) so its just null
71 String[] passedArgs = {};
72
73 System.out.println("*** Class Loaded: " + myClass.toString());
74
75 System.out.println(" Listing declared methods:");
76
77 // Just because we can, we're going to list the declared methods...no reason
78 Method[] theMethods = myClass.getDeclaredMethods();
79 for (int x=0; x < theMethods.length; x++) {
80 System.out.println(" "+ theMethods[x].toString());
81 }
82
83 // create an array of classes that are listed in the main method header
84 // so we can get a hook to the main method
85 Class[] passedArgsClass = {passedArgs.getClass()};
86 // get a hook on the main method
87 Method myMethod = myClass.getMethod("main",passedArgsClass);
88
89 System.out.println(" Got a hook to the main method.");
90 System.out.println(" Creating and passing start up arguments to thread.");
91
92 // Now we know where it is, we need to create a thread for it, passing in
93 // a list of objects that represent its args.
94 Object[] passedArgsObject = {passedArgs};
95 ApplicationThread anApp = new ApplicationThread(myMethod, passedArgsObject);
96
97 // Finally we start it going
98 System.out.println(" Starting Thread.");
99 anApp.start();
100
101 // Now we go and start the rest of the Apps listed
102
103 }
104
105 // At this point we are finished, though in the future the VM Manager
106 // won't just die away, but will remain to carry out JVM administration and
107 // thread management.
108 System.out.println();
109 System.out.println("JVM Manager Finished.");
110 System.out.println(" Free memory: " + myRuntime.freeMemory());
111 System.out.println();
112
113 } catch (Exception e) {
114 System.err.println("ERROR: " + e);
115 e.printStackTrace(System.out);
116 }
117 }
118 }
119