我们的应用程序是基于 JSP/JSF 的应用程序,可在 Weblogic 10(在生产环境中集群)上运行。我们有一个场景,其中(登录的)用户获取了一个基于时间戳的对象锁。获取锁后,每 60 秒运行一次代码以更新/使锁无效。目前,锁的详细信息保存在数据库中。这意味着,每 60 秒更新一次锁,就会触发一次更新查询。
我们正试图在应用层移动这个逻辑,这样我们可以避免访问数据库。为此,之前写入数据库的数据现在保存在 HashMap 中。但是,HashMap 存储在 ServletContext 对象中。为了为新用户获取锁,从 ServletContext 对象获取 HashMap,然后对其进行任何操作。
但是,刚刚发现 ServletContext 对象不会跨集群复制。因此,如果我有一个 HashMap 更改为 node-1,当用户 1 获取对象 1 的锁定并且用户 2 登录时,尝试获取对象 1 的锁定但请求命中节点 2,我想,逻辑会失败,对吧?因为 node-2 不会有更新的 HashMap。
有什么想法/建议吗?请帮忙。
谢谢你,A