メッセージを聞き取り、必要に応じてプロセスをフォークオフできるActivitiコントローラを作成しています。それは私が通常のJava実行可能なjarファイルを実行するとうまく動作しますが、コールをエクスポートされActivitiプロジェクトを実行した場合にまでハングアップするようだとActiviti Workflow Javaコードからの呼び出し
Process p = Runtime.getRuntime().exec("java -jar ...");
:私は、Javaを使用しようとしている
Activitiコントローラが完了します。
コントローラー:
while(1){
print "listening"
recv message
print "executing"
exec process
print "done"
}
メッセージは、ループの先頭に戻ってくるなど、プリントディスプレイの全てを受信した場合。しかし、強制的にアプリケーションを閉じるか、またはwhileループを完全に削除するまで、プロセスは実際には実行されません。
コントローラコードが完成すると、Activiti jar全体がコマンドラインで完了していることがわかります。
**これは単純に出力を保持し、最後に表示するのではなく、ワークフローがActivitiを監視できる他のサービスにメッセージを渡すためです。
**私はrunnableとthreadを代わりに使用して、別のクラスにexecを配置してみたところ、同じ動作が示されています。
プロセスが最初に行うことは、activitiコントローラが停止/完了するまで発生しない別のソフトウェアにメッセージを送信することです。また、getOutputStream()、getInputStream()、getErrorStream()から読み込まない場合は、ブロックしてはいけません。プロセスのJava APIの – COner
:すべての標準io(つまりstdin、stdout、stderr)操作は、3つのストリーム(getOutputStream()、getInputStream()、getErrorStream())を介して親プロセスにリダイレクトされます。親プロセスは、これらのストリームを使用して、サブプロセスへの入力を提供し、サブプロセスからの出力を取得します。一部のネイティブ・プラットフォームでは、標準の入力および出力ストリームに対して限られたバッファ・サイズしか提供されないため、入力ストリームを即時に書き込むことができないか、サブプロセスの出力ストリームを読み取らないと、サブプロセスがブロックされ、 –
あなたは今あなたをどれだけ愛しているのか分かりません。エラーストリームがプロセスの実行をブロックするとは思わなかった。 – COner