在群集环境中的JSP应用程序之间共享HashMap

时间:2012-09-20 06:58:02

标签: java oracle jsp servlets weblogic-10.x

Ours是一个基于JSP / JSF的应用程序,可在Weblogic 10上运行(在生产中集群)。我们有一个场景,其中(登录)用户获取基于时间戳的对象锁定。获取锁后,代码每60秒运行一次以更新/使锁无效。目前,锁定详细信息在数据库中维护。意味着,每60秒更新一次锁定,就会触发更新查询。

我们正试图在应用程序层移动此逻辑,以避免命中数据库。为此,先前写入数据库的数据现在在HashMap中维护。但是,HashMap存储在ServletContext对象中。为了获取新用户的锁,从ServletContext对象获取HashMap,然后对其进行任何操作。

但是,只是发现ServletContext对象不是跨群集复制的。因此,如果我有一个更改的HashMap,例如,当user-1获取锁定到object-1并且user-2登录时,node-1尝试获取对object-1的锁,但请求命中node-2,我猜,逻辑会失败,对吧?因为node-2不会有更新的HashMap。

任何想法/建议?请帮忙。

谢谢你, 甲

1 个答案:

答案 0 :(得分:1)

是的,我们为我们的一个项目做了类似的事情,在weblogic服务器上的所有集群节点之间共享ServletContext

检查以下weblogic参数

<强>相干性的ServletContext聚集

true或false表示ServletContext的属性是否将被聚类。如果为true,则所有可序列化的ServletContext属性值将在所有集群节点之间共享。

如果未指定,则默认为false,主要是因为Servlet规范指示ServletContext属性是JVM的本地属性而不应该是群集的。

有关详细信息,请参阅http://docs.oracle.com/cd/E13924_01/coh.340/e14408/appparams.htm