我遇到了以下问题:
我正在尝试从当前运行的Web应用程序启动一个新进程 Tomcat服务器。因此,Web应用程序应该能够启动新进程。 如果我从Tomcat尝试这个,没有任何反应。但是,如果我在自己的Java应用程序中使用相同的代码,而不是在Tomcat上运行,那么一切正常。
我错过了哪一部分? Tomcat是否不允许从Web应用程序启动新进程? 我是否必须设置特殊权限?
这里的Code,在独立的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"之外别无其他。在屏幕上。
答案 0 :(得分:1)
您的问题至少来自不同的类路径内容。
但我同意你要做的不干净。
为什么不使用JMS在队列中发布作业并进行另一个MDB处理呢?