Java Web 应用程序:监控进度

Ran*_*rma 2 java web-applications progress-bar jakarta-ee

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

gab*_*sch 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 开始可用。