我做了一个jsf应用程序。此应用程序有一个包含开始,停止按钮的菜单。当按下开始按钮时,应用程序开始从网站获取数据并更新其数据库。但是,这个过程需要很长时间才能完成。我希望当我关闭浏览器时,它应该继续更新数据库。此外,当我再次打开它时,我应该得到先前的状态。但是,这没有发生。当我关闭浏览器时,应用程序也关闭了。我该怎么做?当我关闭我的浏览器时,Jsf应用程序关闭
谢谢。
我做了一个jsf应用程序。此应用程序有一个包含开始,停止按钮的菜单。当按下开始按钮时,应用程序开始从网站获取数据并更新其数据库。但是,这个过程需要很长时间才能完成。我希望当我关闭浏览器时,它应该继续更新数据库。此外,当我再次打开它时,我应该得到先前的状态。但是,这没有发生。当我关闭浏览器时,应用程序也关闭了。我该怎么做?当我关闭我的浏览器时,Jsf应用程序关闭
谢谢。
就我而言,我不会延长会话寿命。相反,创建一个任务并将执行任务的对象添加到一个@ApplicationScoped
bean中的队列中,并将数据库(或任何其他位置)保存在启动作业的用户和作业的状态中。
当用户注销(手动注销或关闭Web浏览器)时,由于整个应用程序(不是通过请求或用户会话)来管理该任务,因此该任务仍将被执行。当用户再次登录时,他/她可以向该应用程序队列询问该任务的状态。
你需要(至少):
@ApplicationScoped
托管bean将包含和处理的任务。ExecutorService
或类似技术来实现。注意:不敢自己手动启动新线程,这只会导致杀死您的Web应用程序服务器。Map<String, List<Task>>
映射,以便单个用户此刻可以有超过1个任务。将它保存在数据库(或类似的)中会更好,以便为这些不驻留在内存中的任务创建日志。您甚至可以设计这个功能,以便如果您取消部署Web应用程序或服务器突然关闭,则可以从精力充沛的地方重新开始手头的任务。
我们能否看到您的支持bean代码? –
代码超过1200行,是否有必要? 算法如下: 1.从网上下载文件。 2.打开文件并更新数据库,直到没有文件保留。 3.关闭文件,完成! 你在问java代码还是xhmtl代码? – Viplime
我想知道你的Bean的范围是什么,它管理过程 –