2010-07-29 49 views
3

我需要用java(從oracle導出數據)生成一個報告,這個報告可能需要幾分鐘的時間,涉及的數據量很大,所以當我提交表單時,屏幕凍結直到結束。Java EE提交表單並離開後臺進程工作?

如何在後臺進程中生成報告,以便用戶可以繼續瀏覽?

JMS?我如何使用JMS來做到這一點? (歡迎任何示例或解釋)

有沒有另一種方法? 根據Java EE規範,最好的選擇是什麼?

回答

1

是的,JMS可能是一個選項。您只需將消息發送到隊列,然後Message Driven Bean(一種特殊類型的EJB)將接收並處理消息。這個消息在這種情況下就像一個命令。儘管你可以使用沒有消息驅動Bean的JMS,但它有點複雜。

如果您處於EJB 3.1環境中,您可以試試asynchronous EJB

否則,雖然它不被規範推薦,但您可以在Web容器中啓動一個線程。您可以爲每個作業啓動一個線程,也可以在ServletContextListener中啓動/停止一個後臺線程,該處理程序處理存儲在數據庫的表中的命令。

使用異步作業在表面上很容易,但對於生產,您需要考慮如何管理錯誤,監視進度,重試失敗的作業,確保沒有兩個相同的作業同時運行等。有自己的優點和缺點。還要注意事務所需的策略(JMS是事務處理的,我不確切知道異步EJB 3.1,如果JDBC事務或UserTransaction正確執行操作,可以處理自定義線程和數據庫表)。

希望它有幫助。

+0

嘿謝謝你的回答,並對我遲到的迴應感到抱歉,我會嘗試。 但無論如何,請參閱異步過程的狀態 過程? – ErVeY 2010-07-30 19:16:15