2013-12-17 79 views
0

我在Struts2中做了一個程序,它解析了一些URL列表中的一些XML並將Bean列表存儲在HttpSession中。這是一個漫長的過程,因爲它必須從url下載xml,解析它並創建bean。我想以這樣的方式設計這個任務,以便當它從客戶端獲得請求時,它將開始解析並將結果存儲在會話中。當它完成解析一些xml時,它會通知來自java的頁面或Struts,以便它能夠在完成解析剩餘的URL之前顯示一些結果。我已經在不同的線程中使用這個解析。但它有風險,因爲web爲每個不同的客戶端請求管理不同的線程池,並且存在內存泄漏的可能性。我已經看過execAndWait ,但在解析過程中不可能顯示一些結果bean。任何人都可以告訴更好的方式或更好的解決方案。在完成之前在Struts2中顯示立即搜索的結果

+0

從XML創建bean ...你確定它是*長* –

+0

是的,它很長,但不是太多。從網站下載後,有時需要三分鐘時間才能解析15個大型XML。是否有任何方式可以通過循環或其他方式管理解析機制,以便在解析一個xml後,可以在不中斷所有解析過程的情況下顯示即時結果。 –

回答

0

我解決了我的問題。首先創建一個攔截器項目並擴展ExecuteAndWaitInterceptor.java而不是Interceptor接口並重寫doIntercept方法。只是我們必須在doIntercept方法中使用getNewBackgroundProcess()。這個方法主要是創建一個後臺線程。如果你控制這個攔截器,那麼我們不需要等待不確定的延遲。如果我們控制這個機制,那麼當一個bean準備好在長時間處理完成之前顯示時,我們可以調用中間頁面。所有的控制將在我手中,當它應該被稱爲。而且我們不需要使用延遲和間隔延遲,因爲在這個延遲之後,任何bean都可能沒有準備好顯示。