2013-02-21 104 views
2

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

+1

查看[这篇文章](http://stackoverflow.com/questions/7474080/java-web-app-futuretask-progress-bar)为一个想法。 – 2013-02-21 13:22:36

回答

4

在Java EE我建议以下结构:

  • 一个Servlet调用(POST例如)将启动过程
  • 的POST将使用@Asynchronous EJB调用来处理重负载,所以这将开始做长期的过程
  • 它也将通过一个进展持有人对象,例如一个POJO放入上下文/会话中(一个@Stateful EJB也会这样做)
  • POST返回,后台作业继续
  • 状态检查由Ajax HTTP调用执行,它们使用与会话相同的会话起动
  • Ajax调用从会话/上下文得到进度持有者对象/@有状态,读取状态,并返回
  • 地位不断通过后台线程(除非你只使用更新应该是同步更新布尔型,字符型,整型或浮点型(最大32位基元)的一个属性)

请注意,从EJB 3.1开始可以使用@Asynchronous