Michael,
The way I did clean the dead client is different.
I create a nested class inside of LockManager to hold objectID, recordNum and the time it received the lock and I have Vector to store or remove that kind of object during lock and unlock, I also create a daemon
thread running every 2 second and check if there is any expired object is in Vector then it will clean the dead client and unlock that record too.
how do you feel about it ? is that the right design
Regards
Sam