2

很多时候,Java Web 应用程序中有一些由 http servlet 调用的长时间运行的进程。一个典型的例子是,将 100 个 mp3 文件转换为 flak 格式(只是一个随机示例)。http 连接将是活动的,但由于该过程需要很长时间,因此我们可以构建一些进度条以显示在网页上(最好是 uisng ajax),以指示任务的进度。这应该是什么设计模式?比如说,Servlet 的 post 方法会调用实际的长期进程,而 Servlet 的 get 方法会调用进度监听器?

4

1 回答 1

5

在 Java EE 中,我会推荐以下结构:

  • Servlet 调用(例如 POST)将启动该过程
  • POST 将使用@AsynchronousEJB 调用来处理繁重的负载,因此将开始执行耗时的过程
  • 它还将传递一个进度持有者对象,例如放入上下文/会话中的 POJO(@Stateful EJB 也可以)
  • POST 返回,后台作业继续
  • 状态检查由 Ajax HTTP 调用执行,它们使用与启动器相同的会话
  • Ajax 调用从 session/context/@Stateful 获取进度持有者对象,读取状态并返回
  • 状态由后台线程持续更新(更新应该是同步的,除非你只使用 boolean、char、int 或 float 的一个属性(最大 32 位原语))

请注意,@Asynchronous它从 EJB 3.1 开始可用。

于 2013-02-21T13:30:02.057 回答