如何跨 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。