我的要求如下。
我有一个用java开发的Web应用程序。
我在html页面中有一个链接。当第一个客户端点击html页面中的提交按钮时,批处理文件应该运行。
同时当其他客户点击提交按钮时,他应该收到该页面正忙的消息。
如果第一个客户端单击释放按钮,则其他客户端必须能够运行批处理文件。
我该怎么做?
答案 0 :(得分:1)
单击提交按钮时设置标记,单击释放按钮时将其清除。
根据您的体系结构,标志可以是代码中的布尔变量,数据库中某个特殊条目到临时文件的任何内容。
单击提交按钮时,请检查该标志是否已设置。如果是,则返回一条错误消息,指出页面正忙。
在伪代码中:
if (flagIsSet()) {
showPageIsBusy();
} else {
setFlag();
startBatchFile();
}
请记住在批处理文件完成或单击释放按钮并在finally
块中的某个位置时清除标记。
您还必须确保只有启动批处理文件的客户端才能释放它并清除标记。
正如Avi在评论中指出的那样,您还应该记住同步对标志的访问。
答案 1 :(得分:0)
伪算法:
修改批处理文件以在批处理操作之前和之后运行servlet。
在运行批处理文件之前,设置一个servlet或标志,它将注册一个文件或数据库或我正在执行的会话变量,并在完成批处理文件时,设置一个将注册文件或数据库的servlet或标志,或者我正在发布的会话变量
当用户单击释放按钮时,运行将重新标记该标志的相同servlet。
当用户提交提交按钮时,检查该标志是否已执行或已释放,具体取决于您提醒客户。
答案 2 :(得分:0)
你可以在servlet类中使用一个字段(否则为一个大的nono)作为标志。
答案 3 :(得分:0)
如果您的应用程序碰巧在多个负载均衡的服务器上运行,那么您面临同样的问题:)我之前提交了一个问题,但不幸的是我没有得到任何回复。无论如何,您可以将问题的解决方案看作my question here的答案。
答案 4 :(得分:0)
这是Singleton或更好的Application-Bean。这个Bean应该是你长期运行的后台任务的一部分,并提供有关它的信息,例如如果它正在运行,也许就像是什么时候开始,谁开始它,如果你可以进步,所以你也可以显示进度条。
如果您告诉我们,您使用的是哪种Web应用程序框架,我认为我们可以提供更好的提示。