我正在开发一个j2ee应用程序,我需要启动另一个可能运行大约10分钟的java进程。由于UI将超时,我必须以异步方式启动此过程。我无法使用线程,因为我必须重用现有代码,并且会在同步问题中出现问题。那么,请告诉我关于启动新异步过程的最佳方法吗?
答案 0 :(得分:0)
最近,我不得不从j2ee应用程序启动java进程。
我spwaned一个新的JVM,并为运行该进程提供了所有必要的(classpatch,Main class,jvm参数,程序参数......)。
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();
}
}