Hello all, I passed
SCJD (URLyBird 1.3.1) today (362/400). The distribution is as follow:
General Consideration: 99/100
Documentation: 70/70
OO Design: 30/30
GUI: 39/40
Locking: 44/80
Data class: 40/40
Network Server: 40/40
Total: 362/400
Overall I could have done better in locking section. This is because I used my customized class to keep track of locked records instead of using standard
Java API. Anyway
for me. Below are my pointers:
Generation Considerations
* use Sun coding standards
* think like a junior programmer in areas of design and coding logic
Don't know why that single point got deducted?
Documentation
* user guide = HTML format, screen shots for everything (errors, app windows etc), provide quick start guide
* javadoc = provide javadoc comments for private members/classes, generate javadoc comments for protected/public members/classes
* choices.txt = describe requirements, assumptions, use cases, architecture, networking, participants, each layer of the app
OO Design
* uses 3-tier architecture: GUI, service layer, data layer
* separate each class accordingly to responsibilities as much as possible
* package source code/classes accordingly to as if it is 3-tier app (I have 4 packages: client, data, server, helper)
* no anonymous inner classes
* inner classes are all private
* group helper classes into its own package
GUI
* use Swing Action rather than ActionListener interface
* have menu bar, JTable, button panel, status bar
* buttons in the button panel and the menu items in the menu bar are controlled by list selection model and some "actions" are disabled by default until a table row is selected
* use table cell rederers to position/align numbers and dates
* no column sorting for table
* provide refresh view button/action to get latest data's image
* provide create, delete, check out functions in the GUI
* status bar display message as user operates the app (eg when such and such window opens)
* status bar display number of connected users (for network mode only) - use Swing Timer to update, act as server keep-alive
* provide tool tips for table columns and rows
* use my own table model (inherits AbstractTableModel)
* position window in the middle of the user computer's screen (using ToolKit)
* didn't use GrigBagLayout, only BorderLayout, FlowLayout and at times GridLayout
Locking / Data Class
* have my own interface extending Sun provided interface
* Data class implements my own interface (extended one)
* use my own class to manage locked records (didn't use standard Java API)
* act as service layer (interface LocalService) in stand-alone mode - delegate to Data class
* Data class is singleton
Network Server
* use RMI
* didn't use rmic to explicitly generate stubs
* act as service layer (interface RemoteService) in networked mode - delegate to Data class
* display connection and disconnection messages
* provide server connection checking when clients connect (if server IP/port are correct)
* provide server shutdown using shutdown hook
Thanks to all the people who helped me during the assignment.