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 間で動作しますか? 2 人のユーザーが同時に異なる Web アプリにログインしようとしている可能性があります。どうすればこれを防ぐことができますか?
* 編集 * ソリューションでトランザクション キャッシュ メソッドを利用したい場合、アプリは Memcached も使用します。