KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jodd > util > VmUtil


1 // Copyright (c) 2003-2007, Jodd Team (jodd.sf.net). All Rights Reserved.
2

3 package jodd.util;
4
5 import java.io.IOException JavaDoc;
6 import java.util.Iterator JavaDoc;
7 import java.util.List JavaDoc;
8 import java.util.Map JavaDoc;
9
10 import com.sun.jdi.Bootstrap;
11 import com.sun.jdi.VirtualMachine;
12 import com.sun.jdi.connect.Connector;
13 import com.sun.jdi.connect.IllegalConnectorArgumentsException;
14 import com.sun.jdi.connect.LaunchingConnector;
15 import com.sun.jdi.connect.VMStartException;
16
17
18 /**
19  * Various VM utilities.
20  */

21 public class VmUtil {
22
23     /**
24      * Finds <code>com.sun.jdi.CommandLineLaunch</code> connector.
25      *
26      * @return com.sun.jdi.CommandLineLaunch connector or <code>null</code> if not found
27      */

28     public static LaunchingConnector findLaunchingConnector() {
29         List JavaDoc connectors = Bootstrap.virtualMachineManager().allConnectors();
30         Iterator JavaDoc it = connectors.iterator();
31         while (it.hasNext()) {
32             Connector connector = (Connector) it.next();
33             if (connector.name().equals("com.sun.jdi.CommandLineLaunch")) {
34                 return (LaunchingConnector) connector;
35             }
36         }
37         return null;
38     }
39
40     /**
41      * Returns the launching connector's arguments.
42      *
43      * @param connector connector
44      * @param mainArgs main class and arguments
45      * @param vmOptions virtual machine options
46      * @param watchFields
47      * flag for watching fields
48      *
49      * @return null if bad connector
50      */

51     public static Map JavaDoc connectorArguments(LaunchingConnector connector, String JavaDoc mainArgs, String JavaDoc vmOptions, boolean watchFields) {
52         if (connector == null) {
53             return null;
54         }
55         Map JavaDoc arguments = connector.defaultArguments();
56
57         // main
58
Connector.Argument mainArg = (Connector.Argument) arguments.get("main");
59         if ((mainArgs != null) && (mainArgs.trim().length() != 0)) {
60             if (mainArg == null) {
61                 return null;
62             }
63             mainArg.setValue(mainArgs);
64         }
65
66         // watchFields
67
if (watchFields == true) {
68             if (vmOptions == null) {
69                 vmOptions = "";
70             }
71             vmOptions += " -classic"; // need a VM that supports watchpoints
72
}
73
74         // options
75
Connector.Argument optionArg = (Connector.Argument) arguments.get("options");
76         if ((vmOptions != null) && (vmOptions.trim().length() != 0)) {
77             if (optionArg == null) {
78                 return null;
79             }
80             optionArg.setValue(vmOptions);
81         }
82
83         return arguments;
84     }
85
86
87
88     /**
89      * Launches target VM.
90      * Forward target's output and error.
91      *
92      * @param mainArgs application arguments
93      * @param vmOptions VM options
94      * @param wf
95      */

96     public static VirtualMachine launchTarget(String JavaDoc mainArgs, String JavaDoc vmOptions, boolean wf) {
97         LaunchingConnector connector = findLaunchingConnector();
98         if (connector == null) {
99             throw new Error JavaDoc("No connector found.");
100         }
101         Map JavaDoc arguments = connectorArguments(connector, mainArgs, vmOptions, wf);
102         if (arguments == null) {
103             throw new Error JavaDoc("Bad connector.");
104         }
105         try {
106             return connector.launch(arguments);
107         } catch (IOException JavaDoc ioex) {
108             throw new Error JavaDoc("Unable to launch target VM: " + ioex);
109         } catch (IllegalConnectorArgumentsException icaex) {
110             throw new Error JavaDoc("Internal error: " + icaex);
111         } catch (VMStartException vmsex) {
112             throw new Error JavaDoc("Target VM failed to initialize: " + vmsex.getMessage());
113         }
114     }
115
116 }
117
Popular Tags