簡體   English   中英

使用現有的EJB服務從Tapestry執行長期運行的任務

[英]Executing long-running task from Tapestry using already existing EJB service

我有以下情況。

我的網站是用Tapestry編寫的。 在其中一頁上,我需要生成一個相當大的Excel或PDF文檔(大約20 MB)。 現在,由於整個過程需要時間,因此我要求用戶稍等一下。

但是,當我嘗試測試上限時,我注意到我的整個應用程序(不僅僅是Web部件)都凍結了,因為這一代人耗盡了所有資源,並且網站和應用程序的其余部分均無響應。

到目前為止,這是我一直在做的流程。

  1. 用戶單擊按鈕以請求頁面上的文件
  2. 正在從數據庫中獲取數據(這部分非常快)
  3. 數據被傳遞到准備它的Tapestry服務(沒什么花哨的,也很快)
  4. 准備好的數據被發送到EJB服務,該服務創建並部署一個訪問者,該訪問者創建excel / pdf文件
  5. 創建的文件的InputStream一直傳遞到Tapestry,由Tapestry將其包裝在StreamResponse並提供下載

什么是處理此問題的合適方法?

我可以像這樣從我的某些Tapestry服務中使用Tapestry的ParallelExecutor嗎?

Future<InputStream> future = executor.invoke(new Invokable<InputStream>() { ... });

我的主要目的是使應用程序和網站保持運行,並且不會凍結。

先感謝您。

看一看掛毯縫上的progresslink演示 它可能會給您一些啟發,以輪詢掛毯中的長期運行/異步任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM