我知道'普通'Java,但對servlet,容器等領域來說是新手。因此,我不確定哪種方法最明智。對非servlet應用程序使用Servlet
情況:我創建了一個接收信息並將其存儲在數據庫中的Servlet。該數據庫被其他應用程序讀取。
現在我需要的是一個應用程序接收完全相同的信息並將其存儲在同一個數據庫中。然而,這個新的應用程序需要從另一個服務器(我將使用httpClient)來獲取這些信息,而不是將它推送到它。這兩個應用程序將共存。
對於這個新的應用我看到以下兩個選項:
做一個獨立的應用程序。爲此,我可以複製粘貼很多現有的後端代碼,但是我需要做一些修改(servlet容器提供了一個上下文,簡單的數據庫連接池等)。另外,我可能需要使用一些包裝器,這樣可以像我可以啓動的適當的守護進程一樣工作,但也可以優雅地停止/重啓等。
使新的應用程序成爲Servlet的一部分。也就是說:只需在運行新應用程序的servlet的init()中啓動一個新線程即可。這將允許我重新使用已有的所有後端代碼,而無需重寫任何代碼。我只需要將執行HTTP-GET請求的代碼寫入其他服務器。使用這種方法,啓動和停止服務也會更容易,因爲我可以使用Servlet容器。
有關項目的一些信息:將數據解析並寫入數據庫的後端代碼有幾個線程,但並不十分複雜。編寫原始servlet的代碼大約需要一週的時間。使用現有的代碼庫我覺得這個新的應用程序應該最多可以工作1,2天。
我看到選項2的方式比較容易。但感覺有點像我會'濫用'servlets。 所以我的問題是:應該處理請求的應用程序不是servlet,而不是請求的應用程序?我在這裏沒有看到一些巨大的缺點嗎?哪個選項最有意義?
tl; dr:我可以編寫一個不作爲Servlet提供請求的應用程序嗎?
後續問題:我不應該開始我自己的線程,否則會發生不好的事情。你能詳細解釋一下嗎? 現在,現有的servlet使用兩個後臺線程將數據寫入兩個數據庫。 這些線程使用BlockingQueue連接到servlet。我在不同線程中擁有這個功能的原因是因爲寫入數據庫需要大量時間(因爲數據庫中有很多觸發器)並且數據可能會以突發形式進入。 所以這不是一個adviced設計?這給了什麼樣的麻煩? – brasilt 2010-10-06 14:01:09
對不起,我正在更新您的評論。 – Brabster 2010-10-06 14:05:14
@Brabster所指的可能是事實,大多數的Web /應用服務器喜歡在servlet容器管理線程,理論上你自己發起的線程不是安全的,因爲如果你需要的容器可以與他們胡鬧.... – 2010-10-06 14:05:58