从j2ee应用程序启动异步java进程的最佳方法是什么

从j2ee应用程序启动异步java进程的最佳方法是什么,java,jakarta-ee,asynchronous,Java,Jakarta Ee,Asynchronous,我正在处理一个j2ee应用程序,我需要启动另一个java进程,该进程可能会运行大约10分钟。由于UI将超时,我必须以异步方式启动该进程。我不能使用线程,因为我必须重用现有代码,并且会遇到同步问题。因此,请告诉我启动新异步进程的最佳方法?最近,我不得不从j2ee应用程序启动java进程 我创建了一个新的JVM,并为运行该进程提供了所有必要的(类补丁、主类、JVM参数、程序参数…) 如何生成JVM方法? 你的环境怎么样?如果您在Servlet3.0环境中运行,异步servlet可能会对您有所帮助。第

我正在处理一个j2ee应用程序,我需要启动另一个java进程,该进程可能会运行大约10分钟。由于UI将超时,我必须以异步方式启动该进程。我不能使用线程,因为我必须重用现有代码,并且会遇到同步问题。因此,请告诉我启动新异步进程的最佳方法?

最近,我不得不从j2ee应用程序启动java进程

我创建了一个新的JVM,并为运行该进程提供了所有必要的(类补丁、主类、JVM参数、程序参数…)

如何生成JVM方法?
你的环境怎么样?如果您在Servlet3.0环境中运行,异步servlet可能会对您有所帮助。第3条也是如此。不支持
public static Process createProcess(final String optionsAsString, final String workingDir, final String mainClass, final String[] arguments) throws IOException {
    String jvm = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";

    String[] options = optionsAsString.split(" ");
    List<String> command = new ArrayList<String>();
    command.add(jvm);
    command.addAll(Arrays.asList(options));
    command.add(mainClass);
    command.addAll(Arrays.asList(arguments));

    //System.out.println(command);

    ProcessBuilder processBuilder = new ProcessBuilder(command);
    processBuilder.directory(new File(workingDir));

    return processBuilder.start();
}
public static void makeItRun() {
   try {
      // Start JVM
      String classPath = buildClassPath();
      String workingDir = getSuitableWorkingDir();//or just "."
      Process java = createProcess("-cp \"" + classPath + "\"", workingDir, my.package.APP.class.getCanonicalName(), "-the -options -of -my -APP");

      // Communicate with your APP here ...

      // Stop JVM
      java.destroy();
   } catch(Throwable t) {
      t.printStackTrace();
   }
}