2011-10-19 108 views
0

我有一個Java應用程序(實際上它是grails)我需要執行一個外部程序。最好我希望我的應用程序是獨立的,即將外部腳本/程序作爲戰爭文件的一部分。這個外部腳本/程序也需要生成一些文件。最佳實踐在Java Web應用程序中執行外部程序

我想,我的問題是,如果有某種最佳實踐如何做這些樣的東西,使最終產品是不是太酥取決於應用程序的權限,什麼不可以?

回答

0

您需要確保的一件事情是,一次只有一個線程執行程序的一個實例。所以你需要一些鎖定和同步。

想象這樣一個場景,多個用戶/請求/線程試圖用不同的輸入執行相同的程序,那將是一場災難。因此您需要在執行程序時等待程序鎖定程序,或者您需要在每次運行程序時創建新實例。你應該對此非常小心。

此外,你想清理程序運行後,如果它產生任何輸出。

你必須要小心,如果用戶可以通過惡意命令到您的系統,並試圖劫持其他應用程序。

總之,你要注意安全性和正確性

0

安全(我提到的第一個方案。) - 確保您的應用程序不允許arbitary的執行(用戶自備)在主機系統上的代碼。考慮SQL注入風格的攻擊。如果需要傳遞數據,我建議先將它插入數據庫,然後將主鍵傳遞給外部進程,這將有助於避免緩衝區溢出類型的情況。

健壯性 - 這個程序是否會失敗,或者花時間,或者有其他未知的副作用。通過從不同的線程執行,甚至是不同的進程,將您的主要Web應用程序從此程序中分離出來。

記錄 - 如果你需要從這個外部應用程序收集日誌,您可能希望在會話ID(或同等學歷)傳遞,所以你可以跟蹤回Web會話任何錯誤。

0

您可以設計一個小型管理系統來跟蹤服務請求。這將是一個非常有用的組件,因爲大多數項目都有這樣的目的。

該應用程序應該從服務執行,對該服務本身的請求應該是異步的。此外,您還可以獲得反饋並跟蹤該服務狀態。

相關問題