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。
任何想法/建议?请帮忙。
谢谢你, 甲
答案 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