Comment: This report shows the total 1.4 SCJD points that could have been awarded in each section, and the actual number of points you were awarded. This is provided to give you per-section feedback on your strengths. The maximum possible score is 400; the minimum to pass is 320. General Considerations (maximum = 100): 99 Documentation (maximum = 70): 69 O-O Design (maximum = 30): 30 GUI (maximum = 40): 31 Locking (maximum = 80): 44 Data store (maximum = 40): 40 Network server (maximum = 40): 40
Major decisions (briefly discussed in this forum):
1. RMI, but no remote interface for DBMain - remote interface with business logic, called Services, with three methods (book, release, find).
2. DuplicateKeyException not used at all, RecordNotFoundException not used for find method.
3. runtime wrapper for IOException called RuntimeIOException
4. Server mode has no gui (maybe I've lost some points on this?)
5. MVC for client GUI, but my View component does not use events - it calls Controller directly. I guess I've lost some points because of these issues: no gui configuration is saved (I store only database file location, host and port), default JTable management (I've added simple sorting only), specific MVC implementation (no events), I've forgot to handle RuntimeIOException and show some dialog with error message.
6. Seems like I've failed with my locking. I've implemented locking, based on record-weak_reference_to_client map and synchronized lock() unlock() methods. I've used wait() and motifyAll(). Weak references are added to ReferenceQueue in order to cleanup later by utility thread (since my DBMain is not exported remotelly, I guess I've lost some points because of this unnecessary cleanup). Also I've implemented deadlock detection and reentrant locking support. I've tested all locking with multiple threads, deadlock also, so my locking works fine, so I'm a bit confused about the lost points.
Anyway, I'm quite satisfied with the results, since I've lost many points only in one section, which means that either my implementation was too complex or I've missed smth in requirements.