2012-01-16 116 views
0

基本上我想使用一個jsp網頁,所以在Java中,運行(管理器)不同的後臺進程(可以是任何運行的)在Linux服務器上。在java web服務器上運行單獨的後臺進程

它們需要以不同的用戶身份運行,而不是網絡本身。

我想知道我有什麼選擇?

非常感謝。


我剛發現 「運行時RT =調用Runtime.getRuntime();過程PROC = rt.exec(」 linux命令 「);」可能有效。

但是我不知道剛剛開始的(child?)進程是否會完全從java servlet進程中分離出來?有可能在不同的帳戶下運行它嗎?

+0

什麼是JEE版本?在JEE 6中,創建異步服務非常容易,使用EJB JEE 5您可以嘗試使用消息驅動bean。 – Thomas 2012-01-16 13:18:34

+0

Thx Thomas。我不明白的是如何從一個Java世界的不同帳戶下啓動一個完全獨立的本地進程? – GaryX 2012-01-16 13:22:13

+0

您可能需要http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html。我不認爲你可以在JSP頁面上做很多事情,你至少需要一個servlet,但即使這樣也會存在安全限制。 – Viruzzo 2012-01-16 13:22:44

回答

0

在假定終身運行的Java EE Web應用程序中使用Runtime是個壞主意。

首先,由Runtime創建的新進程將通過設計分配儘可能多的新堆內存作爲當前運行的Java環境。這可能並不一定會損害一個簡單的Java應用程序,該應用程序默認使用64MB或者其他東西,但是在Java EE Web應用程序中,通常以千兆字節分配內存,這將成爲完全的內存浪費。

其次,您只是不希望在Java EE Web應用程序中產生非託管進程/線程。如果進程/線程暫停和/或永遠運行,可能導致無法在必要時關閉/重新啓動Java EE Web應用程序(您需要首先完全終止它),該怎麼辦?如果該進程崩潰並將整個Java EE運行時間一起取下,該怎麼辦?

最後,您不能更改運行該進程的用戶。它將始終是執行當前正在運行的Java運行時的用戶。

你已經基本上2種選擇:

  1. 不要使用Java這個在所有。例如,只需使用平臺提供的後臺作業管理器來完成這項工作,例如基於Unix的平臺中的Cron和基於Windows的平臺中的任務計劃程序。

  2. 用100%Java做。使用純Java執行相同的目標,而不需要產生一個進程。您可以根據需要使用ExecutorService API或第三方庫(如Quartz)管理後臺作業。請注意,即使這些作業仍需運行100%純Java代碼。

相關問題