Java Web应用程序:监控进度

时间:2013-02-21 13:14:35

标签: java java-ee web-applications progress-bar

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

1 个答案:

答案 0 :(得分:4)

在Java EE中,我建议使用以下结构:

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

请注意,自EJB 3.1以来@Asynchronous可用。