0

这是我的一位前辈问我的问题。

1)我们有一个 J2EE 应用服务器的两个不同节点:节点 1 和节点 2。(如下图所示。)

2)也启用了休眠二级缓存。

3) 问题如下:用户点击登录页面 URL 并假设此请求到达节点 1 并且用户登录然后用户注销。

4) 再次用户请求登录页面,这一次,请求转到节点 2。现在用户登录并更改他的密码并注销。

现在的问题是当用户尝试使用他的新密码登录并且请求转到节点 1 时。他能够登录系统吗?

如果他不能这样做,可以做些什么来让用户在节点 1 上使用他的新密码登录。

Note: We have a LoginUser table where the Username and passwords are stored. 

在此处输入图像描述

我的答案 :

根据我的观点,当用户尝试使用节点 1 登录然后注销时,可能会出现这种情况。

Hibernate 触发这个查询:

select * from Login where username = "John";

并且这个条目被缓存在节点1的二级缓存中。

现在,当他使用节点 2 登录系统并更改密码时。再次尝试登录节点1,他无法使用新密码登录,因为这次节点1的二级缓存包含旧密码,所以他可以使用旧密码登录。

这就是他无法使用新密码登录节点 1 的原因。

现在解决这个问题的方法可能是二级缓存的复制。

请分享您对同一问题的意见。

4

1 回答 1

3

您的问题的答案是这里的 Hibernate 文档中描述的分布式二级缓存。Infinispan 是最受支持的平台。您可以在 Jboss wiki上阅读有关设置的信息。

当任一节点上的缓存数据更改时,这将负责使集群中的 2LC 失效。用户请求命中的节点将知道缓存已过时,并将转到数据库以加载所需的新数据。

于 2013-06-25T17:51:11.497 回答