3

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

我们正试图在应用层移动这个逻辑,这样我们可以避免访问数据库。为此,之前写入数据库的数据现在保存在 HashMap 中。但是,HashMap 存储在 ServletContext 对象中。为了为新用户获取锁,从 ServletContext 对象获取 HashMap,然后对其进行任何操作。

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

有什么想法/建议吗?请帮忙。

谢谢你,A

4

1 回答 1

1

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

检查下面的 weblogic 参数

coherence-servletcontext-clustered

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

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

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

于 2012-09-20T08:21:20.043 回答