2011-04-05 89 views
6

所以,我處於一種情況,我想排隊一堆HttpServletRequest對象進行異步處理。暫時擱置這是否是一個明智的策略 - 實際上在這種情況下,因爲我試圖改造一個糟糕的遺留系統 - 這是一個危險的事情嗎?將HttpServletRequest對象存儲在隊列中以備後續處理是否危險?

我在這裏關心的是HttpServletRequest對象是否持有會導致死鎖或資源爭用問題的寶貴資源或開放連接。

假設我正在實現一個帶有doPost()方法的簡單servlet,該方法接受HttpServletRequest對象,將其放入LinkedBlockingQueue中,然後向用戶發送某種股票響應(如301重定向到確認頁)。

謝謝!

+0

取決於您的servlet容器,但這聽起來很可能會炸燬。您要訪問的請求中有哪些信息?把*那東西放入你的LBQ中。 – Ron 2011-04-05 18:19:15

+0

我使用樹脂。是的,我知道我可以這樣做,但由於各種原因必須處理遺留代碼,這並不像應該那樣簡單。 – sangfroid 2011-04-05 18:29:51

回答

6

我已經看到了碼頭的內部結構,我可以向你保證,將當前請求移出該結構將非常非常糟糕。有各種當前連接狀態,不能在當前請求之外使用。我不禁假設,幾乎任何servlet容器都是如此。

這聽起來像你正在計劃對原始請求作出響應,然後進行一些額外的處理。我建議將您需要的信息從原始請求複製到離線處理的單獨數據結構中。另外,如果您正在處理需要HttpServeletRequest的代碼,那麼您始終可以使用代碼所需的數據位來模擬自己的代碼。

+0

基本上,我需要一個當前同步的進程,並使其異步。我需要的所有值都在HTTP標頭,表單參數和Cookie中。問題是,這組值是不明確的,埋在遺留代碼中。我可以嘗試「發現」這些值是什麼,然後重構業務邏輯以獲取新的數據結構而不是HttpServletRequest對象,但這將是一個單調乏味,容易出錯的過程。我寧願單獨留下遺留代碼,並繼續傳入HttpServletRequest對象。不過,嘲笑是一種選擇。 – sangfroid 2011-04-05 19:58:28

1

我做了一個非常類似的事情,和我遇到的一個問題是,碼頭,似乎清理HttpServletRequest裏面的東西在某些時候,讓你從一些getXYZ方法在null返回值,甚至拋出的NPE你爲他人。

所以,是的,這是危險的。

我現在將我需要的東西複製到doPostdoGet之內,並且完全忘記了這個實例。

相關問題