我有一個我想從J2EE Web應用程序觸發的shell腳本。從Java觸發shell腳本的最佳方法
該腳本處理很多事情 - 處理,FTP等 - 這是一個遺留問題。
運行需要很長時間。
我想知道什麼是最好的方法。我希望用戶能夠點擊鏈接,觸發腳本,並向用戶顯示一條消息,說明腳本已啓動。我希望HTTP請求/響應週期是即時的,無論我的腳本需要很長時間才能運行。
我能想到的三個選項:
- 產生新線程的用戶點擊的處理過程中。但是,我認爲這不符合J2EE規範。
- 在觸發腳本之前,向HTTP響應流發送一些輸出並提交它。這給出了HTTP請求/響應循環已經完成的錯覺,但實際上,處理請求的線程仍然在那裏等待shell腳本完成。所以我基本上爲了自己的目的劫持了容器HTTP處理線程。
- 創建一個包裝腳本,在後臺啓動我的主腳本。這將使請求/響應循環在容器中正常完成。
以上所有將使用servlet和Runtime.getRuntime()。exec()。
這是在Solaris上使用Oracle的OC4J應用程序服務器在Java 1.4.2上運行的。
請問沒有人有任何意見哪個是最簡單的解決方案,爲什麼?
或者沒有人有更好的方法嗎?我們已經有了Quartz,但我們不想將shell腳本重新實現爲Java過程。
謝謝。
另一個想法是使用單獨的處理線程,該線程在隊列中等待(或用於Object.notify()+ Object.wait())的通知,並且具有HTTP請求處理程序推入隊列(或調用通知)。 – ash 2013-08-30 06:51:20