使用已有的EJB服务从Tapestry执行长时间运行的任务

我有以下情况。

我有我的网站用Tapestry写的。 在其中一页上,我需要生成一个相当大的Excel或PDF文档(大约20 MB)。 现在,由于整个过程需要时间,我要求我的用户稍微等一下。

然而,当我试图testing上限时,我注意到我的整个应用程序(不仅仅是web部分)冻结,因为这一代耗尽了所有的资源,其余的网站和应用程序变得没有反应。

以下是我迄今为止所做的stream程。

  1. 用户点击一个button来请求页面上的文件
  2. 数据正在从数据库中取出(这部分相当快)
  3. 数据被传递给一个Tapestry服务,它准备(没有什么特别的,也很快)
  4. 准备的数据被发送到EJB服务,创build和部署创buildexcel / pdf文件的访问者
  5. 创build的文件的InputStream一直传递到Tapestry,它将其封装在StreamResponse并提供下载

什么是解决这个问题的恰当方法?

我可以用这种方式从我的一些Tapestry服务中使用Tapestry的ParallelExecutor吗?

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

我的主要目标是应用程序和网站继续运行,他们不冻结。

先谢谢你。

看一下从tapestry stitch的progresslink演示 。 它可能会给你一些启发,以便在挂毯上查询长时间运行/asynchronous任务。