当前位置:  开发笔记 > 编程语言 > 正文

限制访问Spring MVC控制器 - 一次N个会话

如何解决《限制访问SpringMVC控制器-一次N个会话》经验,为你挑选了1个好方法。

我们已经许可了商业产品(在这种情况下不重要的产品),这受到并发用户数量的限制.用户通过Spring Controller访问此产品.

我们拥有此产品的N个许可证,如果N + 1个用户访问它,则会收到有关需要购买更多许可证的错误消息.我想确保用户不会看到此消息,并且希望对产品的请求只是"排队",而不是让N + 1用户实际访问它.当然,他们更希望我购买许可证,因此他们的工具不会让我们本地执行此操作.

代替能够控制工具,我想限制控制器的并发会话数量永远不会超过N.其他人都可以等待.

我们正在使用Spring MVC.

有任何想法吗?



1> TRF..:

你需要的是一个ObjectPool.查看Apache Commons Pool http://commons.apache.org/pool

在应用程序启动时,您应该创建一个包含许可证或商业库对象的对象池(不确定它们具有哪种公共接口).

public class CommercialObjectFactory extends BasePoolableObjectFactory { 
    // for makeObject we'll simply return a new commercial object
    @Override
    public Object makeObject() { 
        return new CommercialObject(); 
    } 
}

GenericObjectPool pool = new GenericObjectPool(new CommercialObjectFactory());

// The size of pool in our case it is N
pool.setMaxActive(N) 
// We want to wait if the pool is exhausted
pool.setWhenExhaustedAction(GenericObjectPool.WHEN_EXHAUSTED_BLOCK) 

当你需要代码中的商业对象时.

CommercialObject obj = null;
try { 
    obj = (CommercialObject)pool.borrowObject();

    // use the commerical object the way you to use it.
    // ....

} finally { 
    // be nice return the borrwed object
    try {
        if(obj != null) {
            pool.returnObject(obj);
        }
    } catch(Exception e) {
        // ignored
    }
} 

如果这不是您想要的,那么您需要提供有关商业图书馆的更多详细信息.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有