关闭浏览器时,Jsf应用程序关闭

时间:2012-11-12 12:14:27

标签: jsf glassfish-3

我创建了一个jsf应用程序。这个应用程序有一个包含开始,停止按钮的菜单。当按下启动时,应用程序开始从网站获取数据,并更新其数据库。应用程序还有进度条用于更新过程。但是这个过程需要很长时间才能完成。我希望当我关闭浏览器时,它应该继续更新数据库。此外,当我再次打开它时,我应该得到以前的状态。但是,这不会发生。当我关闭浏览器应用程序也关闭。我怎么做?

感谢。

1 个答案:

答案 0 :(得分:1)

就我而言,我不会延长会话时间。相反,创建一个任务并将执行任务的对象添加到@ApplicationScoped bean中的Queue中,并将启动作业的用户和作业状态保存在数据库(或任何其他位置)。

当用户注销(手动注销或关闭Web浏览器)时,任务仍将执行,因为它由整个应用程序管理(而不是由请求或用户会话管理)。当用户再次登录时,他/她可以向此应用程序队列询问任务的状态。

您将需要(至少):

  • 将包含并处理任务的@ApplicationScoped托管bean。
  • 一种同时处理和执行一个或多个任务的方法。这可以通过ExecutorService或类似技术实现。注意:不敢自己手动启动新线程,这只会导致杀死您的Web应用程序服务器。
  • 用于将用户映射到他/她已启动的任务的结构。它可以使用Map<String, List<Task>>进行映射,以便单个用户此刻可以拥有多个任务。最好将其保存在数据库(或类似的)中,以便为不驻留在内存中的这些任务创建日志。您甚至可以设计这个,以便在取消部署Web应用程序或服务器突然关闭时,您可以从savestate点重新启动手头的任务。