Today I check https://www.galton.com/~sun_ss and found myself passed SCJD. I used to think that Sun will email me about the result but it is not necessary. I downloaded the assignment(Flight by night) on March 13, 2002, uploaded on May 3rd, 2002(unable to upload first, solved 1 day after I emailed who2contact), and took the essay test (only 5 questions) on May 12th, 2002, got passed on May 23th, 2002. Result:
Test: Sun Certified Developer for the Java 2 Platform (310-027)
Date Taken: 2002-05-23 01:31:17.153
Grade: P
Score: 0142
General Considerations(maximum = 58): 54
Documentation(maximum = 20): 20
GUI(maximum = 24): 19
Server(maximum = 53): 49
My major design choice and considerations are as follows: (almost my designChoice.txt)
I think most of them are common, nothing particular.
1) RMI vs Object Stream. I use RMI instead of Sockets
2) I modify the database class - suncertify.db.Data for easy usage. Also there are 2 deprecated methods in suncertify.db.Data, which need modification.
3) My search logic is pretty simple. For example, say we got three search criteria (origin='xxx', destiny='xxx', carrier='xxx'), I will search three times respectively with each criteria and get three result sets. The record which exists in each of the three result sets is the one we need.
4) Local/network
I have a interface named RemoteData, which have all the public methods of Data. The RemoteDataImpl is the RMI implementation in server of this interface, which just maps the remote invocations to local ones. Also in Data class, I have a doBook() method which is used to deal with the booking process in the sequence of lock, read, modify if applicable and unlock the target record. It might mot be very suitable to put this business method in a Data class, but this is the easiest way to conform local mode with network mode, and make sure the booking process is in the same thread in server with network mode. So I can use the reference of current thread as the owner of the lock.
5) Lock/Unlock
I use wait/notify mechanism for lock/unlock. I use the reference to the current thread
as the ID(owner) of the lock. When a locked record is to be unlocked, the reference of unlocking thread will be compared with the owner of the lock, if same, unlock the record, otherwise do nothing.
6) Server
My data server just instantiates a RemoteDataImpl object and bind it with a predefined name.
I don't designs a GUI for server.
7) Client GUI
I hava Entry class to start the MainScreen according the mode the user selects
in the command line parameter. The first parameter (-L or -N) indicates the local mode or
network mode. In local mode, the location of db.db is needed as the second parameter.
In network mode, the address and port of data server
As to the deployment, I decide to pack the _stud.class into client.jar instead of downloading it from the server for facilitation. So I do not use a SecurityManager for the clients.
I would like to thank Mark, Sid, Sai, Adam and Javaranch. Next I will run for SCWCD.
Good LUCk, Every one!
Leon Wang
5-29-2002