データベースのペシミスティック ロックを Curator プロセス間ロックに置き換えようとしています。データベース ロックでselect for update
は、トランザクションの開始時にエンティティをロックし、トランザクションがコミットされると解放されます。トランザクションは複数のメソッドにまたがる可能性があり、チェーン内のいずれかのメソッドがこのロックを再度取得しようとすると、同じトランザクション/スレッドで実行されているため取得されます。
Zookeeper ロックを使用すると、私が見た例は次のようになります。
InterProcessMutex lock = new InterProcessMutex(client, lockPath);
if ( lock.acquire(maxWait, waitUnit) )
{
try
{
// do some work inside of the critical section here
}
finally
{
lock.release();
}
}
サービス呼び出しが複数のメソッドにまたがり、それらのメソッドのいずれかが個別にこのロックを取得しようとすると、これは問題を引き起こします。これらは独立したビジネスメソッドであるため、ロックが渡されることは望ましくありません。同じスレッドで実行している場合、この同じロック オブジェクトを返すサービス/ファクトリの実装はありますか?