0

次の問題があります。

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」を表示するだけです。

4

1 に答える 1

1

あなたの問題は、少なくとも異なるクラスパスの内容に起因しています。

しかし、あなたがやろうとしていることはきれいではないことに同意します。

JMS を使用してジョブをキューにポストし、別の MDB で処理させてみませんか?

于 2013-02-05T12:55:46.543 に答える