使用已有的EJB服务从Tapestry执行长时间运行的任务
我有以下情况。
我有我的网站用Tapestry写的。 在其中一页上,我需要生成一个相当大的Excel或PDF文档(大约20 MB)。 现在,由于整个过程需要时间,我要求我的用户稍微等一下。
然而,当我试图testing上限时,我注意到我的整个应用程序(不仅仅是web部分)冻结,因为这一代耗尽了所有的资源,其余的网站和应用程序变得没有反应。
以下是我迄今为止所做的stream程。
- 用户点击一个button来请求页面上的文件
- 数据正在从数据库中取出(这部分相当快)
- 数据被传递给一个Tapestry服务,它准备(没有什么特别的,也很快)
- 准备的数据被发送到EJB服务,创build和部署创buildexcel / pdf文件的访问者
- 创build的文件的
InputStream
一直传递到Tapestry,它将其封装在StreamResponse
并提供下载
什么是解决这个问题的恰当方法?
我可以用这种方式从我的一些Tapestry服务中使用Tapestry的ParallelExecutor
吗?
Future<InputStream> future = executor.invoke(new Invokable<InputStream>() { ... });
我的主要目标是应用程序和网站继续运行,他们不冻结。
先谢谢你。
看一下从tapestry stitch的progresslink演示 。 它可能会给你一些启发,以便在挂毯上查询长时间运行/asynchronous任务。