2012-06-05 79 views
1

我有一個長期運行的任務(報告),它會在開始返回數據之前超過任何TCP連接超時。異步servlet(在Servlet 3.0中引入)正是我所需要的,但是我僅限於Servlet v2.4。 有沒有「自己動手」的解決方案?我在做什麼感覺被黑了 - 我在線程中異步啓動任務,並立即返回客戶端。然後,客戶端每隔幾秒輪詢一次(使用ajax),並檢查此任務ID的「準備就緒」狀態(靜態列表保持它們的狀態以及線程處理的對象的一些句柄)。準備就緒後,我將輸出流注入工作對象,以便線程可以將結果寫回客戶端。3.0版之前的異步Servlet解決方案?

+0

使用異步servlet將只是servlet線程返回線程池。但是網絡連接資源仍然「消耗殆盡」,因爲它一直保持打開狀態直到響應被髮回。異步Servlet實際上就像擁有第二個servlet線程池,您可以選擇性地將其工作。http://goo.gl/dbmpc –

回答

1

您可以實現反向AJAX技術,這意味着,而不是投票多次得到你一旦任務完成的響應的響應。 通過使用DWR here可以快速實現反向ajax技術。但是你應該保持使用靜態列表。如果你的後臺任務業務邏輯很複雜,你可以使用ESB或更復雜的東西。