I am still unsure about how I handle the lock. This requirement bother me the most "Locks a record so that it can only be updated or deleted by this client". I cannot identify the client other than using the thread id. This works under the assumption that the lock and unlock is done under one thread. Is this a valid assumption? Under the remote case, I did not expose the lock and unlock in the remote interface, so all lock and unlock are done in one RMI call which use one single thread. Am I good or am I missing some use cases?