跨 JVM 同步方法
2022-09-03 14:27:03
如何跨 JVM 同步方法?
我的示例是一个 Web 应用程序,它限制用户名多次登录(换句话说,第一个用户可以登录,但如果另一个用户使用相同的用户名登录,他将被拒绝)。
Web 应用程序部署在多个服务器上,因此有多个 JVM,用户可以尝试使用不同的服务器登录,具体取决于负载平衡器。
以下是该方法的外观
public synchronized static SessionData logonSync(String userName, String password) throws Exception
{
int count = DB.count("sessions", "WHERE user_name=?", userName);
if (count > 0)
{
throw new Exception("logon.error.loginAlreadyUsed");
}
return logon(userName, password);
}
由于同步方法,它在1个应用程序服务器上正常工作,但是跨多个JVM?两个用户可能尝试同时登录不同的 Web 应用。我该如何防止这种情况?
* 编辑 *如果您的解决方案想要利用某些事务性缓存方法,则该应用也使用 Memcached。