2011-07-19 53 views
0

我正在創建一個Activiti控制器,它可以偵聽消息並按需分離進程。來自Java代碼的Activiti工作流調用

我一直在嘗試使用java:

Process p = Runtime.getRuntime().exec("java -jar ..."); 

,因爲它的工作原理,當我運行正常Java可執行罐子得很好,但在運行遠銷呼叫Activiti的項目的情況下,似乎掛起,直到Activiti控制器完成。

控制器:

while(1){ 
    print "listening" 
    recv message 
    print "executing" 
    exec process 
    print "done" 
} 

當接收到一個消息中的所有打印件顯示的,包括回來的環的頂部。但是,直到我強行關閉應用程序,或完全刪除while循環,該過程實際上並沒有運行。

當控制器代碼完成時,可以看到整個Activiti jar在命令行中完成。

**這不是簡單地持有輸出並在最後顯示它,我知道這是因爲工作流將消息傳遞給我可以監視Activiti的其他服務。

**我嘗試使用runnable和線程來代替,將exec放入另一個類中,並展示相同的行爲。

回答

1

確保您正在讀取進程中的標準輸出和標準錯誤。

+0

該過程所做的第一件事是將消息發送到另一個軟件,直到activiti控制器停止/完成纔會發生。另外,如果我不讀取getOutputStream(),getInputStream(),getErrorStream()它不應該阻止...對嗎? – COner

+0

來自Process的Java API:其所有標準io(即stdin,stdout,stderr)操作將通過三個流(getOutputStream(),getInputStream(),getErrorStream())重定向到父進程。父進程使用這些流將輸入提供給子進程並從子進程獲取輸出。由於某些本地平臺僅爲標準輸入和輸出流提供有限的緩衝區大小,因此無法及時寫入輸入流或讀取子流程的輸出流可能會導致子流程阻塞甚至死鎖。 –

+0

你不知道我現在有多愛你。我不認爲錯誤流會阻止進程執行。 – COner

相關問題