Hello,
I have contributed next to nothing to this site even though I have gained valueable info from it. So, I want to give you details on how I approached the common design questions. Firstly, I used adapters for remote and local communications. The local adapter merely created a local instance of Data. The remote adapter did an RMI lookup on the remote server.
Next, I did not use client ids for locking. I created a Lock class that used a HashMap to keep track of what records were locked, but not who had locked them. therefore, I did not have to change the signature of lock/unlock to accept a client id. Upon Lock creation, if a certain system property was set, a lock monitor was started. The monitor traversed the HashMap every 4 seconds, unlocking records that have been locked longer than 4 seconds.
In documentation, which I got 20 for 20, I did a clientdoc, a serverdoc, and a design
doc. I followed the Readme file contents as specified in the instructions accompanying the project download.
I spent weeks (part-time) on the GUI. I was penalized 7 points on that. I opted to use the old fashioned way of no GUI builder, which was probably a mistake, but I learned all about layout managers and containers first hand this way.