Java 从Tomcat启动新进程

Java 从Tomcat启动新进程,java,tomcat,process,tomcat7,Java,Tomcat,Process,Tomcat7,我有以下问题: 我正在尝试从当前运行的web应用程序启动一个新进程 Tomcat服务器的一部分。因此,web应用程序应该能够启动一个新流程。 如果我从Tomcat那里尝试,什么都不会发生。但是,如果我在自己的Java应用程序中使用相同的代码,而该应用程序没有在Tomcat上运行,那么一切都可以正常工作 我错过了哪一部分?Tomcat不允许从web应用程序启动新进程吗? 我必须设定特别许可吗 下面是在独立java应用程序中运行良好的代码: public class Test1 { /** *

我有以下问题:

我正在尝试从当前运行的web应用程序启动一个新进程 Tomcat服务器的一部分。因此,web应用程序应该能够启动一个新流程。 如果我从Tomcat那里尝试,什么都不会发生。但是,如果我在自己的Java应用程序中使用相同的代码,而该应用程序没有在Tomcat上运行,那么一切都可以正常工作

我错过了哪一部分?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”外,没有其他功能。

您的问题至少来自不同的类路径内容

但我同意你想做的是不干净的


为什么不使用JMS将作业发布到队列中,并让另一个MDB处理它?

您是否尝试过使用类似于或的库来管理流程?(两者都非常可靠)您使用的是哪种操作系统?如果是Linux,Selinux是否具有限制性?从Tomcat启动进程听起来很可疑。您希望该过程做什么?也许有更好的方法,没有过程。不,我还没有用过这样的图书馆。我会调查一下的。目前,tomcat只在Windows7虚拟机上运行@PhilippReichart我必须在这个过程中运行一个计算密集型的优化,它不应该阻塞主要的web服务,或者在其一般工作中使其慢得多。计算密集型优化也是Java程序吗?如果是这样,我建议使用Philippe Bossu下面提到的或go-with-JMS方法异步运行它。“正确”的方法可能涉及EJB,因为在Servlet环境中玩弄线程/执行器也是可疑的(但比生成进程要少)。