如何从 EJB 内部以线程安全的方式调用外部进程?
如 javadoc 中所述,ProcessBuilder 不是线程安全的。Apache commons exec 对线程安全只字未提,我对 Runtime.exec 也没有信心。
什么是正确的方法?
让我添加一些代码,这样人们就不会认为我在滥用,这段代码有时有效,有时无效
public int startTask(Logger logger, String expectPath, String expectScriptPath, long ticket) throws IOException {
Runtime r = Runtime.getRuntime();
Process p = r.exec(expectPath+" "+expectScriptPath+" "+ticket);
SessionLogger sysout = new SessionLogger(logger,p.getInputStream());
sysout.start();
SessionLogger syserr = new SessionLogger(logger,p.getErrorStream());
syserr.start();
try {
return p.waitFor();
} catch (InterruptedException e) {
log.error(e.getMessage(),e);
return -1;
}
}
请不要关闭或否决这个问题。
我知道这不是线程安全的。我只想知道如何从 EJB 内部正确地做到这一点。