在struts应用程序中一次只允许一个用户访问页面

时间:2015-03-10 05:01:39

标签: multithreading struts2 singleton

如果两个或更多用户开始使用相同的页面并开始编辑重大更改,那么拥有一个巨大的客户资料页面将在我的数据库中发生,因此计划实施线程概念,其中只有一个用户可以使用该客户页面

我知道线程概念,但对如何实现它感到困惑  希望我也需要使用Singleton类

任何建议或逻辑都会有所帮助

我正在使用Struts,Hibernate框架工作

1 个答案:

答案 0 :(得分:0)

您可以使用应用程序上下文来存储标志变量。 Action将使用其值仅允许一个同时执行。

public class TestAction extends ActionSupport implements ApplicationAware {
    private static final String APP_BUSY_KEY = "APP_BUSY";
    Map<String, Object> map;

    @Override
    public void setApplication(Map<String, Object> map) {
        this.map = map;
    }

    @Override
    public String execute() throws Exception {
        if (map.containsKey(APP_BUSY_KEY)) {
            return ERROR;
        } else {
            map.put(APP_BUSY_KEY, "1");
            try {
                // action logic here
            } finally {
                map.remove(APP_BUSY_KEY);
            }
            return SUCCESS;
        }
    }
}

如果您计划为两个请求实现类似的逻辑(在显示值后锁定并在提交新值后释放锁定),那么逻辑将更复杂,您还需要在超时后处理锁定释放。