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 内から適切に行う方法を知りたいだけです。