Hi all, I have received the result 5 mins ago, after waiting for approximately 1 month. The score is not very great, but I am very happy since I dont really have enough time to finish it. Here, I would like to thank all of you here, especially: Max, Andrew, Mark, Vlad and Phil, they helped me a lot with my assignment, and solving the problems I encountered. In addition, thanks Max for his cool book, SCJD with J2SE 1.4, the book covers lots of areas that we might have troubles, and it has provided several approaches. Below is my score:
Grade: P Score: 346 General Considerations (maximum = 100): 99 Documentation (maximum = 70): 70 O-O Design (maximum = 30): 30 GUI (maximum = 40): 24 Locking (maximum = 80): 44 Data store (maximum = 40): 40 Network server (maximum = 40): 40
The GUI and Locking part, like some of the others, do not score well. Since I have not put much effort in my GUI part, I understand why I lost points, however, I really wonder which part makes me score so low in the locking part. But anyway, I am appreciated with that. I will take SCWCD 1.4 Beta tonite. Hope I can pass it along as well. Best wishes to those who are in the way of SCJD. Nick. [ January 25, 2004: Message edited by: Nicholas Cheung ]
Hi Nicholas, Congratulations on passing the exam. You got 100% of the maximum score in all categories except locking and GUI. Another person, Peter Ye, just posted his score too and I notice that you both got 44 points out of 80 possible in the locking category. I've noticed others getting about 44 points in this category as well. It seems 44 points is almost a threashold of some sort. As I think most people have probably tested their locking schemes in a multi-threaded environment and would not have submitted their applications if they hadn't successfully passed this testing, I'm left to wonder what aspect of locking (at least in terms of Sun's grading criteria) was missing. Is there anything you can think of that has been discussed on this forum concerning locking that you didn't implement in your project? Congratulations again and best wishes in your future endeavors. - George
Congratulations, Nicholas ! Peter, Nicholas and Damu : all passed today with a 44/80 in locking. Yes George, it would be interesting to find out why they lost points in that area. Best, Phil.
Joined: Nov 07, 2003
Hi Phil, Sorry for the late reply, as I have just taken SCWCD beta yesterday, and now I need to start my study on SCMAD. Regarding SCJD, let me share some of my experiences: 1. Keep in mind all the time, Simple is the best! Some people might think that we need to have a connection pool for the RMI connections, however, I just implement the RMI (network part) as what Max suggested. In addition, some people even think of implementing the 24-hour business requirement, however, I do NOT implement this as well. Instead, I have documented this issue in my design doc, stating that the 24-hour requirement is a business decision, and I assume that there exists another program (or application) such that it takes care about updating the database file. (Maybe 1 mark is lost in General Consideration is due to it, however, implementing it does not mean you wont lose marks ) 2. Singleton in Data access As suggested by Ken, I make use of the Singleton pattern between the Database Server and the Data class. There can be more than 1 Database Server instance, while there can only be ONE Data class, which is responsible for the physical access to the database file. I have NOT implement data caching, because performance is not a concern. In order to play safe, for each request, 1 I/O will be generated to read or write to the database file. 3. Specification of Local and Remote services In order to avoid Remote exception being notified to clients (need to catch Remote Exception) in standalone mode, I did the following: I define an interface Services, which contains ALL business methods that are allow to be called by clients. It throws all required exceptions, as well as the Remote Exception. I then define 2 interfaces LocalServices and RemoteServices. They are exactly the same as Services (in the aspect of business methods) except ALL methods in RemoteServices throw a RemoteException, while that in LocalServices DONT. Thus, for standalone mode, the object (stub) obtained by the client will be casted to LocalServices, which does not throw any RemoteException. 4. For the GUI part, I wonder why I lose so much points, but anyway, here is the general design. I follow Max's suggestion, building a JTable, with a Menu bar (suggested by Kathy), 2 pull down menus for Hotel name and Location (suggested by Kathy), a Search button, a Book button, and an Exit button. I think the GUI should cover all the general aspect, and thus, I really wonder where I lose the 16 points! 5. For the Locking part, I do NOT specify the functions provided in the SUN interface as synchronized in order to avoid the chances for auto fail. Instead, I perform synchronization for each function. I used Vector as the locker. Maybe this makes me lost points, however, some people who use HashMap results the same as me. I do check whether the record is locked before each access, and I do notify all threads after the lock operation(lock and unlock) completes. I really wonder why so many people score 44/80 in this part, I have sent an email to SUN about this issue. 6. For the network part, I use RMI instead of Socket, as it is easy to code, test and implement. It abstracts all network stuffs for the developers so that it is easy to implement. 7. Finally, for the documentation, below is the outline of my doc:
 Overview  General Considerations and Assumptions  Server Design  Client Design  Record Locking Mechanism  Record Searching Mechanism  Networking Approach  Major Design Patterns Applied  Data Model used for displaying data in JTable  Exception Handling and logging  Thread Safety  Flexibility for further extension  Package Structure for submission
8. For the essay part, there are totally 4 Qs. Lucky, in my exam, the 4 Qs exactly appear as 4 sections of my documentation. In fact, you are expecting that what Qs will be asked. Hoping that I am not violating SUN's disclosture policy. Best luck to those who are in the way of SCJD. Nick.
5. For the Locking part, I do NOT specify the functions provided in the SUN interface as synchronized in order to avoid the chances for auto fail.
I'm trying to understand why that might cause auto-fail. I do synchronize my data manipulation methods to handle my physical file locking. Anyone have ideas on what auto-fail problems this could cause? Thanks. TJ
SCJP, SCJD, SCWCD, SCBCD
Joined: Nov 07, 2003
Hi Terry, I just try my best to avoid, which does not really means by doing so, it results in auto-fail. As Andrew mentioned before, adding the keyword synchronized in the function does not change the signature, i.e. if SUN given this:
The signature of this function can be equivalent to:
However, this, in fact, changes the interface provided by SUN, as the given function does not have the keyword synchronized. Some people suggest that, we may, for e.g., SUN provides us DBAccess.java as the interface, we can define our own interface, say OurDBAccess, which extends DBAccess, and is implemented by Data.java. Maybe in your point of view, you find the above approaches is no problem (Actually, it is really no problem which means the above action can pass through SUN's software). But, for me, in order to really play safe, I decide not to change what SUN gives me, and I fully follow what SUN said: Given the interface DBAccess, and Data implements this interface, without any changes (i.e. not tries to define a new interface that extends the given interface). Nick.
Hi Nicholas, Thank you for your detailed information, especially the locking part! There is a discussion on the main SCJD forum here about why so many people get a 44/80 for locking. I just disagree with what you wrote above about the "syncronized" keyword. Its use *does not change* the provided interface. Synchronization is pure implementation stuff. Best, Phil.