2013-03-05 75 views
0

我有一個Java應用程序,點擊一個按鈕生成一個很重的報告(大約30 MB的Excel報告)。Java應用程序不能同時提供兩個請求

在點擊'生成按鈕'之前,有兩個文本字段確定需要多少數據(項目標識符來自:以及項目標識符:)。

現在的問題是,當兩個同時請求來要求所有的數據,然後誰先按下按鈕報告生成只爲他和其他用戶得到空report.But如果一個用戶需要完整的報告和其他用戶想要一些它的信息說1000行,那麼這兩個用戶的報告都充滿了信息。

請給我一些關於如何看待和如何解決這個問題的見解。提前致謝。

+0

您可能想查看[threading](http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html)。 – adrianp 2013-03-05 11:48:26

+2

看看生成報告的內容。聽起來你在你的servlet中有實例數據,但是不可能知道,因爲你幾乎沒有提供任何人可以提供幫助的信息。 – 2013-03-05 11:48:34

+0

在我的應用程序中,當我們點擊jsp中的生成按鈕時,通過servlet獲取數據frm數據庫,然後它轉到另一個生成excel的servlet。我的應用程序沒有使用線程,它是一個基於進程的java應用程序。另外我在日誌中看到,當項目列表中的一個請求(首先到達)得到處理時,我沒有看到第二個reqst(與第一個reqst同時觸發)的任何類型的日誌記錄,但只要第一個請求幾乎提供完整的數據,然後我看到第二個請求(已經生成空的報告)被擊中(在日誌中)。 – Ani 2013-03-06 10:51:34

回答

0

有一個單身/應用範圍/ Servlet上下文範圍存儲有關報告的信息。它可以位於Web層,報告調用層或報告生成層中。實際上這兩個請求都設置了這些數據,並且兩個報告代都讀取了這些數據,這就是爲什麼它會造成混淆。

看看你的應用程序的結構,試圖找出它在哪裏。如果你從頭開始,你可以描述報告生成的整個過程,也許你可以自己實現它。

+0

該領域有何改進? – gaborsch 2013-03-05 15:24:09

+0

我仍然無法克服這個問題。讓我更詳細地解釋一下。我的應用程序運行在tomcat 5上,有16 GB RAM。應用程序是用像struts這樣的框架編寫的。發生什麼事情時,當一個用戶在jsp中點擊報告時,請求會轉到一個servlet,從那裏到一個模型對象,然後運行查詢,獲取數據,生成excel。問題是應用程序/ server不能同時爲報告提供兩個請求。報告太大(40 mb)。 – Ani 2013-08-30 10:48:01

+0

我們在日誌中看到,當2user同時爲報告命中時,1個請求被提交到服務器,生成完整報告,然後另一個請求到達服務器,但生成空白報告。當我們反彈tomcat服務器時問題得到解決。你能幫我看看哪裏?如果你需要額外的信息,請讓我知道。謝謝 – Ani 2013-08-30 10:51:57

相關問題