2

异步作业,例如从网站下载分数,或在完成某些关键任务后发送电子邮件。现在,当我们下载一些乐谱时,我们必须等待当前页面才能获得响应页面或下载文件。是否有可能我可以点击下载分数并且它发生在后台,以便我可以导航到网站的其他部分,同时检查工作的状态。或者在以后安排一些工作,并通过电子邮件获取其执行结果。

我们的是一个带有 Hibernate 3.5 ORM 的 struts 2 web 应用程序。在浏览了一些 java 调度库之后,得到了一些关于 Quartz 的信息。但是 Quartz 是满足上述要求的正确库还是我可以尝试的任何其他库?请指导我正确的方向。

4

2 回答 2

8

您将需要某种异步处理支持。您可以使用:

然后你 mut 以某种方式恢复结果。取决于您是想直接在浏览器中还是通过电子邮件发送它们:

  • 每次渲染页面时,检查是否没有任何已完成/正在进行的作业。如果有一些已完成的作业,请在页面上的某处显示一个额外的链接(某种通知)。如果作业正在进行中,启动一个请求并每隔一秒询问一次或使用长轮询/来立即接收结果

  • 如果您想通过电子邮件发送结果,只需在作业完成后发送即可。恕我直言,简单得多但用户友好性较差。

于 2012-06-07T13:46:33.857 回答
1

Quartz 无疑是实现这一目标的一种方式——如果您想安排一个作业在特定时间或以特定频率运行,它会很好地工作。

如果您只是想在后台启动某些操作以响应用户操作并检查其状态,还有其他一些可能更适合此模式的方法:

  • java.util.concurrent 包:您可以设置一个 ThreadPoolExecutor 并向其提交实现Callable. 你得到一个Future<T>对象,你可以检查它是否完成(isDone)并在完成时得到它的结果(get)。

  • 对于 EJB 或 Spring,还有一个(会话)bean 方法的概念是@Asyncor @Asynchronous,它也返回 aFuture<T>并表现如上。基本上,这只是从您的代码中抽象出线程池的创建和管理,并将其移动到容器或框架中。

于 2012-06-07T13:45:13.860 回答