繁体   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