次の問題があります。
Tomcat サーバーの現在実行中の Web アプリケーションから新しいプロセスを開始しようとしています。したがって、Web アプリケーションは新しいプロセスを開始できるはずです。Tomcat からこれを試しても、何も起こりません。ただし、Tomcat で実行されていない独自の Java アプリケーション内で同じコードを使用すると、すべて正常に動作します。
どの部分を見逃しましたか?Tomcat は Web アプリケーションから新しいプロセスを開始することを許可しませんか? 特別な許可を設定する必要がありますか?
スタンドアロン Java アプリケーション内で正常に動作するコードは次のとおりです。
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
String javaHome = System.getProperty("java.home");
String javaBin = javaHome + File.separator + "bin" + File.separator
+ "java";
String classpath = System.getProperty("java.class.path");
String className = Test2.class.getCanonicalName();
ProcessBuilder builder = new ProcessBuilder(javaBin, "-cp", classpath,
className);
Process process;
try {
process = builder.start();
Scanner s = new
Scanner(process.getInputStream()).useDelimiter("\\Z");
System.out.println(s.next());
process.getOutputStream().close();
process.getErrorStream().close();
process.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
Test2.class は、画面に「hello world」を表示するだけです。