任何人都可以請分享他們從Java EE env調用unix腳本的體驗嗎,servlet還是EJB?請注意,這些腳本將被調用以進行實時處理而不是脫機處理。在Java EE環境中運行unix腳本?
回答
從Java EE容器生成進程可能不是正確的方法。 如果這些是shell腳本,它們將不可移植。 如果要使用事務支持,則可以使用Quartz Scheduler將腳本重寫爲作業。 這很可能是Java EE做這種事情的方式。
編輯:隨着在評論中添加你的要求,這應該工作
Process process = new ProcessBuilder(command).start();
更多細節here
請注意,如果您使用腳本和/或管道(沒有本地可執行文件)必須包括shell來調用命令(和設置管道)
您將遇到的最大問題是,如果您的應用服務器內存映像很大,當您分叉運行腳本時,您可能會耗盡內存並導致分支失敗。當您分叉時,系統需要製作可執行映像的完整副本。它不會生成物理副本,但它確實需要創建一個虛擬副本。所以,如果你有一個大的Java EE堆,比如4G的真實內存(即不只是Java堆,總進程大小),那麼你需要一個額外的「免費」4G真正的RAM和/或交換叉足夠虛擬空間發生。
是的,你會立即執行exec或其他一些不會吸收gazillion資源的命令。但系統無法知道這一點,因此它需要採取行動,好像它將不得不一次運行兩個Java EE容器副本,即使是納秒級。
如果您沒有fork的資源,則fork失敗。
如果你綁在空間上,你可以做的是創建一個小型的微型exec啓動守護進程。然後,而不是您的Java EE應用程序分叉進程,您只需打開一個套接字到您的守護進程,並且IT分叉進程。很顯然,期望這個小守護程序比你的容器消耗的資源要少得多,所以它很便宜。
守護進程可以像使用命令行在套接字上執行一樣簡單,只是通過命令代碼和一些參數來執行它獲取的內容(可能不安全,當然,但是...)或簡單的rpc。什麼適合您的項目。你可以用Java,一種腳本語言(Python,Perl,Ruby)來編寫它,不管。很多方法可以做到這一點。
一種可能性是編寫一個監聽JMS隊列並調用腳本的小應用程序。這樣,腳本執行就與應用程序服務器分開,所以不會遇到任何規範限制。
- 1. 在Python環境中運行Python腳本?
- 2. Java EE開發環境?
- 3. 運行腳本的Windows環境變量
- 4. 如何在java中編碼以運行使用cygwin在Windows環境中內部使用rSync的unix shell腳本?
- 5. Unix環境中的多線程/並行Bash腳本
- 6. 如何在java-ee web應用程序中運行bash腳本?
- 7. 運行C程序的Unix環境
- 8. 在UNIX中運行腳本的Crontab
- 9. 在UNIX環境
- 10. 在Mac上設置Java EE環境
- 11. 從SSIS運行Unix腳本
- 12. 如何從Java環境運行Gnuplot腳本?
- 13. 如何將參數傳遞給unix shell腳本以在unix環境中運行作業
- 14. 需要在python不存在的環境中運行python腳本
- 15. 未使用Process Runtime在Java中運行的Unix腳本
- 16. 如何在posix環境中運行bash shell腳本?
- 17. Google翻譯腳本未在生產環境中運行env
- 18. 在虛擬環境中運行腳本從virtualenv
- 19. 在python環境中運行python腳本時檢查變量嗎?
- 20. bash腳本在多個docker-compose環境中運行測試
- 21. 無法在當前環境中多次運行BASH腳本
- 22. 僅在測試環境中運行遷移腳本
- 23. 在Xcode中運行沒有環境變量的shell腳本?
- 24. 在Rails中,如何運行加載rails環境的腳本?
- 25. 在運行命令行腳本時設置PHP環境變量
- 26. 如何從java連接到遠程unix框並在其中運行unix腳本?
- 27. Java EE 5的開發環境
- 28. java運行時環境中的Animation.jar
- 29. 運行時環境
- 30. 運行腳本平行,依次UNIX
目前我們的應用程序是一個Eclipse插件,它爲很少的功能使用了很多Unix腳本。我們的目標是使它成爲一個基於Web的應用程序,我們希望重用相同的Unix腳本。 我的想法是從App服務器調用這些unix腳本。你能建議一個更好的方法來做到這一點? – 2010-01-28 16:15:06