Design details :
1. Data layer :
Data class is implemented as a Singleton pattern .
(Only one exists per VM) .
Defined a new LockManager for locking / unlocking methods .
Also a Singleton.
Changed the signature of the lock / unlock methods to
track the owner of the lock by clientID passed from the
client.
Locking scheme checks for the following :
a. Before performing full database lock, check if database already locked by another client,
b. Before record unlocking or full database unlock, check if the clientID is the same as the owner of the lock.
c. Before full database unlock, check if the database is locked in the first place.
2. Server layer
Adapter pattern .
Multithreading implementation.
3. Client Layer :
Factory , Mediator
4. Other points :
Used RMI . Modified Data class. Used Multithreaded Server design .
Only Write Locks (no read locks) .