2011-07-19 11 views
0

メッセージを聞き取り、必要に応じてプロセスをフォークオフできる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を配置してみたところ、同じ動作が示されています。

答えて

1

プロセスからstdoutとstderrを読み込んでいることを確認してください。

+0

プロセスが最初に行うことは、activitiコントローラが停止/完了するまで発生しない別のソフトウェアにメッセージを送信することです。また、getOutputStream()、getInputStream()、getErrorStream()から読み込まない場合は、ブロックしてはいけません。プロセスのJava APIの – COner

+0

:すべての標準io(つまりstdin、stdout、stderr)操作は、3つのストリーム(getOutputStream()、getInputStream()、getErrorStream())を介して親プロセスにリダイレクトされます。親プロセスは、これらのストリームを使用して、サブプロセスへの入力を提供し、サブプロセスからの出力を取得します。一部のネイティブ・プラットフォームでは、標準の入力および出力ストリームに対して限られたバッファ・サイズしか提供されないため、入力ストリームを即時に書き込むことができないか、サブプロセスの出力ストリームを読み取らないと、サブプロセスがブロックされ、 –

+0

あなたは今あなたをどれだけ愛しているのか分かりません。エラーストリームがプロセスの実行をブロックするとは思わなかった。 – COner

関連する問題